渗透测试 | HTB-Luke实战
字数 1827 2025-08-18 11:39:30
HTB-Luke渗透测试实战教学文档
1. 目标概述
本次渗透测试的目标是HTB平台上的Luke靶机(IP:10.10.10.137),通过系统性的信息收集、漏洞发现和利用,最终获取系统root权限。
2. 信息收集阶段
2.1 初始扫描
- 目标IP: 10.10.10.137
- 开放端口及服务:
- 21/tcp - FTP
- 22/tcp - SSH
- 80/tcp - HTTP (静态网页,使用Bootstrap 4框架)
- 3000/tcp - PPP (实际为Node.js应用)
- 8000/tcp - HTTP-alt (Ajenti登录页面)
2.2 Web应用发现
发现三个登录页面:
- http://10.10.10.137:8000 - Ajenti面板
- http://10.10.10.137/login.php - 自定义登录页面
- http://10.10.10.137/management - 管理后台
2.3 目录遍历结果
使用dirsearch.py对80和3000端口进行目录扫描:
80端口重要发现:
- /config.php - 包含MySQL凭据:
$dbHost = 'localhost'; $dbUsername = 'root'; $dbPassword = 'Zk6heYCyv6ZE9Xcg'; $db = "login"; - /management - 401认证页面
- /login.php - 登录页面
- /member/ - 可访问目录
3000端口(Node.js应用):
- /login - 返回"please auth"
- /users - 返回JSON错误信息:
{"success":false,"message":"Auth token is not supplied"}
3. 漏洞分析与利用
3.1 JWT认证分析
3000端口返回的错误信息表明使用JWT(JSON Web Token)认证。推测需要构造有效的认证请求获取token。
3.2 认证尝试
使用MySQL凭据尝试JWT认证:
curl -X POST -H 'Accept: application/json' -H 'Content-Type: application/json' \
--data '{"usename":"admin","password":"Zk6heYCyv6ZE9Xcg"}' \
http://10.10.10.137:3000/login
初始尝试失败,发现JSON格式错误(usename拼写错误)。修正后使用Postman成功获取token:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwiaWF0IjoxNTY3NjY5MDI5LCJleHAiOjE1Njc3NTU0Mjl9.RXpmi8wbxNoRad-0grsWbMYK0a6_SVObti1aoiro8qU
3.3 用户信息获取
使用获取的token查询用户信息:
curl -H 'Accept: application/json' \
-H "Authorization: Bearer <token>" \
http://10.10.10.137:3000/users
返回结果:
[
{"ID":"1","name":"Admin","Role":"Superuser"},
{"ID":"2","name":"Derry","Role":"Web Admin"},
{"ID":"3","name":"Yuri","Role":"Beta Tester"},
{"ID":"4","name":"Dory","Role":"Supporter"}
]
查询各用户详情获取密码:
- Admin: WX5b7)>/rp$U)FW
- Yuri: bet@tester87
- Derry: rZ86wwLvx7jUxtch
- Dory: 5y:!xa=ybfe)/QD
3.4 管理后台访问
使用获取的凭据登录http://10.10.10.137/management,访问config.json获取更高权限凭据:
- root/KpMasng6S5EtTy9Z
3.5 Ajenti面板利用
使用获取的root凭据登录Ajenti面板(10.10.10.137:8000),发现具有root权限的文件管理能力。
4. 权限提升
4.1 通过Ajenti提权
-
使用Ajenti的文件管理器编辑SSH配置文件:
- 路径: /etc/sshd_config
- 修改:
PermitRootLogin yes
-
通过Ajenti重启SSH服务
-
尝试使用root/KpMasng6S5EtTy9Z登录SSH失败
4.2 密码重置
通过Ajenti的Users功能直接重置root密码(无需旧密码),然后使用新密码SSH登录获取完整root权限。
5. 关键发现总结
- 敏感信息泄露: config.php暴露MySQL凭据
- JWT认证缺陷: 使用数据库凭据即可获取API token
- API信息泄露: 通过/users端点获取所有用户凭据
- 管理后台配置泄露: 获取Ajenti的root凭据
- 权限管理不当: Ajenti面板具有完整root权限
6. 修复建议
- 避免在源码中硬编码敏感凭据
- 实现JWT token的适当验证机制
- 限制API端点的访问权限
- 对管理后台的配置文件设置适当权限
- 限制Ajenti面板的权限,避免直接root访问
7. Flag获取
最终flag: 8448343028fadde1e2a1b0a44d01e650
8. 工具使用记录
- dirsearch.py - 目录扫描
- curl - API测试
- Postman - JSON请求构造
- Ajenti面板 - 系统管理
9. 时间线
- 信息收集: 端口扫描、目录遍历
- 漏洞发现: JWT认证缺陷、配置泄露
- 初始访问: 通过API获取用户凭据
- 权限提升: 管理后台→Ajenti→root
- 后渗透: 获取flag