Vulnhub DarkHole-2 靶场:3 种 Git 泄露利用工具 (GitHacker/git-dumper) 实战对比 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输出显示了一个邮箱和密码组合lushadmin.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. 工具对比与选择建议下表对比了三种方法的主要特点特性GitHackergit-dumper手动 wget安装复杂度中等简单无需安装自动化程度高中低恢复完整性优秀良好一般适用场景复杂恢复快速下载学习/调试网络要求较高中等灵活对 Git 知识要求低中高选择建议优先选择 GitHacker当需要完整恢复仓库包括历史记录和可能被删除的文件时快速简单选择 git-dumper当只需要快速获取最新代码不关心完整历史时学习或调试时用手动方法当需要深入理解 Git 内部机制或处理特殊情况时4. 从 Git 泄露到系统渗透获取源代码后我们在提交历史中发现了关键凭证lushadmin.com:321。使用这些凭证成功登录系统后发现了以下攻击路径SQL 注入漏洞在dashboard.php?id1处存在可注入点数据库信息泄露通过注入获取 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 服务器配置禁止访问 .gitlocation ~ /\.git { deny all; }使用 .gitignore 文件避免将敏感文件纳入版本控制定期安全扫描使用工具检查是否存在信息泄露最小权限原则确保 Web 用户只能访问必要的目录和文件