渗透测试 | 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应用发现

发现三个登录页面:

  1. http://10.10.10.137:8000 - Ajenti面板
  2. http://10.10.10.137/login.php - 自定义登录页面
  3. 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提权

  1. 使用Ajenti的文件管理器编辑SSH配置文件:

    • 路径: /etc/sshd_config
    • 修改: PermitRootLogin yes
  2. 通过Ajenti重启SSH服务

  3. 尝试使用root/KpMasng6S5EtTy9Z登录SSH失败

4.2 密码重置

通过Ajenti的Users功能直接重置root密码(无需旧密码),然后使用新密码SSH登录获取完整root权限。

5. 关键发现总结

  1. 敏感信息泄露: config.php暴露MySQL凭据
  2. JWT认证缺陷: 使用数据库凭据即可获取API token
  3. API信息泄露: 通过/users端点获取所有用户凭据
  4. 管理后台配置泄露: 获取Ajenti的root凭据
  5. 权限管理不当: Ajenti面板具有完整root权限

6. 修复建议

  1. 避免在源码中硬编码敏感凭据
  2. 实现JWT token的适当验证机制
  3. 限制API端点的访问权限
  4. 对管理后台的配置文件设置适当权限
  5. 限制Ajenti面板的权限,避免直接root访问

7. Flag获取

最终flag: 8448343028fadde1e2a1b0a44d01e650

8. 工具使用记录

  1. dirsearch.py - 目录扫描
  2. curl - API测试
  3. Postman - JSON请求构造
  4. Ajenti面板 - 系统管理

9. 时间线

  1. 信息收集: 端口扫描、目录遍历
  2. 漏洞发现: JWT认证缺陷、配置泄露
  3. 初始访问: 通过API获取用户凭据
  4. 权限提升: 管理后台→Ajenti→root
  5. 后渗透: 获取flag
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凭据: /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认证: 初始尝试失败,发现JSON格式错误(usename拼写错误)。修正后使用Postman成功获取token: 3.3 用户信息获取 使用获取的token查询用户信息: 返回结果: 查询各用户详情获取密码: 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