3.CTF——python利用工具

时间:2024-04-16 08:15:41

web AWD 攻与防

  • CTF线下赛主要考察代码审计能力及运维能力,代码审计发现漏洞,python写利用漏洞,运维发现可疑攻击目标,异常流量,异常权限,重要业务备份与还原。用运维的知识加固系统与业务。当被人攻击以后,不要慌。分出一个人查流量,另一个人继续审计代码,挖掘漏洞才是最重要的攻击源。实在发现不了漏洞时,改变策略,把精力重心移到流量上来。

  • web的漏洞利用
    你已经通过代码审计定位到了这个漏洞,要去利用它。
    一般都是通过特定的URL去触发这个漏洞。所有的web漏洞都是这样子的。
    这个时候,怎么用python去写呢?

比如挖出了一个web利用摄像头的漏洞:发一个特定的URL,通过URL的返回,在它的cookies里面能够查到它的一个明文账号密码。

构造这个特殊的URL

怎么知道这个特殊的URL是什么呢?这需要在挖漏洞里下功夫了,这里是一个文件包含漏洞,这个地址把账号密码传到一个文件里面做认证,把认证的结果又返回给这个URL。
摄像头页面是这个公司写的,而做密码验证的是另一个公司写的。摄像头公司的人以为把账号密码发给另一个公司就可以做验证了,而另一个公司不仅把密码验证了,还把真正的密码给返回给摄像头的公司。在两个公司的交互过程中,漏洞就发生了。我们知道这个大前提,再配合挖掘漏洞的知识,这个特殊的URL就被我们构造出来了。

大部分都是怎么构造一个request请求包,解析返回包。

细节代码需要自己去收集攻击框架。比如,全场开火脚本:exploit_all.py

token(自己队伍的标识):你打了别人,拿到了flag,主办方怎么知道是谁提交的flag呢?把flag和token做一个运算。

全场攻击的host和port从哪里来?

读取targets文件来的,文件里面的格式为 IP:端口

  • 比赛环境

linux运维

  • 运维流程-SSH

    • 如果主办方没有给私钥,尽量尝试配公私钥登录
    • 禁止密码登录并配置公私钥登录(没绝对把握,仅把密码改了就可以,不用配置禁止密码登录,修改密码用passwd 用户名)
  • 密钥登录
    编辑sshd_config文件

vi /etc/ssh/sshd_config

禁用密码验证

PasswordAuthentication no

启用密钥验证

RSAAuthentication yes
PubkeyAuthentication yes

指定公钥数据库文件

AuthorsizedKeysFile .ssh/authorized_keys
  • 也可以这样改

重启SSH服务前建议多保留一个会话以防不测。

linux很难出现远程溢出漏洞,很少有人掌握这个漏洞,非常少见。能进来的大多数要靠暴力猜解。
因为我们现实中,大多数使用一个SSH管理工具(SecureCRT)的一个小软件来连接linux业务环境进行工作的。
如果控了他windows机器,通过对windows攻击(如木马)就可以拿到linux业务管理环境的密码。

我们如何防止木马拿到密码呢?这个时候就可以配公私钥,用私钥去登录。你监听吧,咱不输入密码了。嘿嘿。

主机右键--去掉其他钩,留下私钥认证--加载私钥文件。这种登录方式是非常安全的。如果你使用这种方式登录,别人不可能拿到你的私钥的。私钥是与本地绑定的,送给他都没关系,不要怕。

细节可以直接搜索: SSH公钥登录

私钥长什么样子的呢?来,亲。你慢慢去猜解密码吧。

  • 公钥批量写入

nmap扫描22
hydra SSH爆破 -user 用户名文件 密码文件 -p
字典生成工具 crunch

  • web源码备份

    crontab -l 查看计划任务 crontab -e 编辑
    ctl+o保存 ctl+x退出

人家给你加一个网马,加一个哈希值,你知道有网马但是找不到。
1.初始化 2.对比,哪些文件是新增的

  • 数据库备份

虚拟机的快照是直接把内存 dump下来了


不要把3306留在网上,不要远程去维护,关掉远程维护的配置
不管用VPN也要其他的也罢,只要你的数据库留在网上,端口爆出来。VPN只是传输安全,但是人家用你的密码去登陆也是一样的。你知道VPN相对安全,但你不知道自己的电脑是否有问题。另外,不管是VPN还是什么,它们都会被别人远程爆破掉。
网线拔掉,电源关掉的电脑最安全,其他的地方你不能这样做,但是数据库你可以这样做,没有任何远程管理的需求。

  • 数据库降权

    你的数据库没有开远程,但是别人通过其他端口进入了你的系统,把你的数据库给爆出来了,而你压根就用不上那么高的权限,运行数据库的时候,难道要给它一个root权限吗?这个时候就要降权,把账号也绑定到只能本地登陆。这个时候,别人怎么样都无法通过远程来访问你的数据库了。

这里的dog是在调戏别人,别人在攻击你的数据库时会扫描数据库的名字。他看见你的数据库名字是dog,密码是123456,也进不来,只能本地登陆。

本地:不是说到机房,是不把数据库的端口给外面提供。在虚拟机可以登陆数据库,而母体机无法登陆数据库。通过SSH连到虚拟机里面,再去登陆数据库。也算是本地登陆。假设绑定的为linux登陆数据库,那么我们用SSH远程连接linux就可以了。而连接linux的又是公私钥的方式,还是本地绑定的。你种木马也没用,爆破更不可能。完美。

linux服务器权限管理

  • 权限配置
    • 对于非必须可写的目录
      权限设置755,拥有者设为非www-data用户;从而防止文件被篡改/删除

    • 对于必须可写的目录
      根据服务器类型,上一个.htaccess,或者修改nginx的目录配置文件,去除此路径的脚本执行权限

防御脚本 都是用python写的 python做安全运维很有优势

  • waf

  • 文件监控 watch python 脚本

监控到别人上传的Helloworld文件

我们发现这时,如果把监控记录重定向文件里面,就变成监控日志了。保护好这个监控日志。


通过一句话给自己一个apache的权限,因为别人在攻克你服务器的时候,拿到的权限也是apache的权限,自己把自己的程序杀掉。如果你用比较低的权限去运维,你连别人运行的木马都杀不掉。
这也是为什么,你用的windows系统中,删除不了文件的原因,你的权限不够。最高的权限是system权限,不是admin。

网络拓扑扫描


如果你是防御的,你要查看一下内网中其他机器的防御机制;如果你是做攻击的,你要查看一下其他机器的薄弱点。
如果你队友的机器很薄弱,可以屏蔽了他,别人从他那里下手无法攻击到你这边。攻击者会寻找最薄弱的地方,当成一个跳板机来对你下手。

为什么外网端口强,内网就不强了呢?有些端口会开放到外网上,有些端口会开放到内网中。如内部的FTP,SMB等。外部端口一般漏洞少,内部端口往往存在大量漏洞。