1. GitHack工具简介与实战价值
第一次接触GitHack是在去年的高校CTF比赛中,当时遇到一个靶场题目提示"检查版本控制信息",我花了三小时手动下载.git/objects文件,结果队友用GitHack两分钟就拿到了完整源码。这个工具本质上是个Python脚本,专门用于自动化下载存在.git目录泄露的网站源码。它的工作原理很有意思——就像玩拼图游戏,通过解析.git/objects目录下的碎片化文件,还原出完整的项目代码树。
在实际渗透测试中,我遇到过至少二十次.git泄露案例。最典型的是某次企业授权测试,发现他们的测试环境网站居然完整暴露了.git文件夹。用GitHack下载代码后,直接发现了数据库硬编码凭证和未授权API接口。这种漏洞之所以危险,是因为.git目录可能包含:
- 完整的项目历史版本
- 开发者注释中的敏感信息
- 被删除但未彻底清理的配置文件
- 数据库连接字符串等机密数据
2. Windows环境准备避坑指南
2.1 Python2环境配置
虽然现在Python3已是主流,但GitHack仍需要Python2.7环境。我推荐使用官方最后发布的2.7.18版本,下载地址在Python官网的历史版本页面。安装时务必勾选"Add python.exe to Path",这是后续能直接调用python命令的关键。
常见问题排查:
- 如果cmd输入python提示不是内部命令,需要手动添加环境变量:右键"此电脑"→属性→高级系统设置→环境变量→在Path中添加
C:\Python27和C:\Python27\Scripts - 遇到pip无法使用时,可以运行
python -m ensurepip --default-pip进行修复 - 32位和64位系统要选择对应版本,混用会导致依赖库安装失败
2.2 Git安装的特殊要求
很多人以为随便装个Git就行,其实有讲究。必须使用Git for Windows的便携版(MinGit),而不是带GUI的完整版。我推荐下载地址来自GitHub官方仓库,版本选择2.40.0以上。
安装时注意:
- 解压到GitHack同级目录下的
git文件夹 - 将
git\cmd添加到系统Path变量 - 测试时运行
git --version应显示版本号而非报错
3. GitHack部署全流程详解
3.1 工具获取与解压技巧
直接从GitHub下载最新版GitHack时,建议不要点"Download ZIP",而是用git clone命令:
git clone https://github.com/lijiejie/GitHack.git这样能确保获取到完整的.git目录结构。解压位置我习惯放在C:\PentestTools下,与其它安全工具集中管理。
3.2 关键配置调整
打开GitHack.py文件,有几个参数需要特别注意:
# 修改下载线程数(默认5) THREADS = 3 # 设置超时时间(秒) TIMEOUT = 10 # 启用调试模式(首次使用建议开启) DEBUG = True在Windows下特别要检查第42行左右的路径拼接代码,确保使用的是os.path.join()而不是硬编码的Linux风格斜杠。
4. 实战漏洞挖掘演示
4.1 目标识别技巧
如何快速发现.git泄露?除了常规的/.git/HEAD访问测试,我常用组合方法:
- 使用dirsearch扫描:
python dirsearch.py -u http://target.com -e git - 检查响应头:
curl -I http://target.com/.git/config - 观察文件大小:正常.git/HEAD应返回23字节
4.2 完整攻击链示例
假设发现目标http://vuln-site.com存在泄露,操作流程如下:
cd C:\PentestTools\GitHack python GitHack.py http://vuln-site.com/.git/运行后会看到类似这样的进度输出:
[+] Fetching .git/index (200 OK) [+] Fetching 8a/3d1f5c6... (200 OK) [+] Reconstructed admin/config.php下载完成的代码会保存在以目标域名命名的文件夹中。重点检查:
- 配置文件(*.config, *.env)
- 数据库操作类文件
- 权限验证相关的include文件
5. 常见问题解决方案
5.1 证书错误处理
当目标使用HTTPS时可能遇到SSL错误,有两种解决方式:
- 修改GitHack.py第89行,添加:
import ssl ssl._create_default_https_context = ssl._create_unverified_context- 或者改用HTTP协议(如果支持)
5.2 文件下载不全问题
我遇到过的典型情况包括:
- 网络波动导致部分对象下载失败:重新运行脚本会自动续传
- 服务器限制频率:调整THREADS参数为1-2
- 文件权限问题:尝试在URL后添加
/.git/或/%2egit/
6. 防御建议与法律边界
从防御角度,运维人员应该:
- 在Nginx配置中添加:
location ~ /\.git { deny all; }- 定期使用
git-secrets扫描历史提交 - 部署前运行
git clean -xdf
在CTF比赛中使用GitHack是完全合法的,但在真实环境中务必获得书面授权。去年某公司就因员工擅自测试.git泄露导致法律纠纷。建议在授权书中明确测试范围和工具列表。