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目录一并上传。这个目录包含了版本控制的所有信息,包括:

  • 完整的代码历史记录
  • 分支信息
  • 提交日志
  • 可能的敏感配置信息

攻击者利用这些信息可以:

  1. 恢复完整的项目源代码
  2. 查看历史提交记录,寻找被删除的敏感信息
  3. 分析应用程序架构,寻找更多攻击面

在 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

工具特点:

  1. 自动恢复完整仓库:包括所有分支和标签
  2. 支持增量恢复:可以继续未完成的恢复过程
  3. 智能处理缺失对象:尝试从历史记录中重建缺失的文件

实战结果:

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

工具特点:

  1. 简单易用:单一命令即可完成下载
  2. 支持断点续传:网络中断后可继续下载
  3. 进度显示:实时显示下载进度

实战结果:

git-dumper 同样成功下载了 Git 仓库,但相比 GitHacker,它需要更多手动操作来恢复完整历史:

cd darkhole_dump git fsck --full git reflog git log

虽然最终也能获取相同的信息,但过程稍显复杂,适合对 Git 内部机制更熟悉的用户。

2.3 手动 wget 方法:基础但灵活

对于不想依赖第三方工具的情况,可以使用基本的 wget 命令手动下载 Git 对象。

操作步骤:

  1. 下载 Git 索引文件:

    wget -r -np -nH -R "index.html*" http://192.168.56.105/.git/
  2. 手动恢复 Git 对象:

    git init darkhole_manual cd darkhole_manual cp -r ../192.168.56.105/.git/* .git/ git checkout -- .

方法特点:

  1. 无需额外工具:仅使用系统自带命令
  2. 完全控制过程:适合特殊情况的处理
  3. 学习价值高:深入理解 Git 内部机制

实战结果:

手动方法虽然可行,但遇到不完整的仓库时,恢复过程较为复杂,需要手动处理缺失的对象和引用。

3. 工具对比与选择建议

下表对比了三种方法的主要特点:

特性GitHackergit-dumper手动 wget
安装复杂度中等简单无需安装
自动化程度
恢复完整性优秀良好一般
适用场景复杂恢复快速下载学习/调试
网络要求较高中等灵活
对 Git 知识要求

选择建议:

  1. 优先选择 GitHacker:当需要完整恢复仓库,包括历史记录和可能被删除的文件时
  2. 快速简单选择 git-dumper:当只需要快速获取最新代码,不关心完整历史时
  3. 学习或调试时用手动方法:当需要深入理解 Git 内部机制或处理特殊情况时

4. 从 Git 泄露到系统渗透

获取源代码后,我们在提交历史中发现了关键凭证lush@admin.com:321。使用这些凭证成功登录系统后,发现了以下攻击路径:

  1. SQL 注入漏洞:在dashboard.php?id=1处存在可注入点
  2. 数据库信息泄露:通过注入获取 SSH 凭证jehad:fool
  3. 权限提升:利用定时任务和 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 泄露漏洞,开发人员应采取以下防护措施:

  1. 生产环境删除 .git 目录

    rm -rf .git
  2. Web 服务器配置禁止访问 .git

    location ~ /\.git { deny all; }
  3. 使用 .gitignore 文件:避免将敏感文件纳入版本控制

  4. 定期安全扫描:使用工具检查是否存在信息泄露

  5. 最小权限原则:确保 Web 用户只能访问必要的目录和文件