1. 工具背景与核心功能
FUKK GIT是一款专为CTF比赛设计的Git仓库敏感信息扫描工具。在CTF比赛中,Git仓库泄露是Web类题目的常见考点,选手需要从暴露的.git目录中寻找隐藏的flag。传统的手工方法需要依次检查stash、commit历史、reflog等多个位置,效率低下且容易遗漏关键信息。
这个工具的价值在于:
- 自动化扫描本地/远程Git仓库
- 使用正则表达式精准匹配flag格式
- 终端实时高亮显示敏感信息
- 无需保存文件,避免留下痕迹
- 自动清理临时文件保持环境干净
提示:工具名"FUKK"是"Find Useful Key Knowledge"的缩写,体现了其核心功能定位。
2. 环境准备与安装
2.1 基础依赖安装
使用前需要确保系统已安装:
- Python 3.6+ 环境
- Git命令行工具
- pip包管理器
安装核心依赖:
pip install colorama git-dumpercolorama:用于终端彩色输出git-dumper:增强的远程仓库克隆工具
2.2 工具获取方式
推荐两种获取方式:
- 直接克隆仓库:
git clone https://github.com/dollmarker/FUKK-GIT.git cd FUKK-GIT- 下载ZIP压缩包:
wget https://github.com/dollmarker/FUKK-GIT/archive/refs/heads/main.zip unzip main.zip cd FUKK-GIT-main3. 核心功能详解
3.1 本地仓库扫描
基本扫描命令:
python fukkgit.py -d /path/to/repo -m "flag{.*}"扫描过程会检查:
- 当前工作目录的修改(未提交内容)
- 所有stash存储的临时修改
- 完整的commit历史记录
- reflog中的操作记录
- 所有分支的差异
- 未引用的Git对象
3.2 远程仓库扫描
远程扫描命令示例:
python fukkgit.py -u http://target.com/.git/ -m "ctf{.*}"工具会:
- 自动下载远程.git目录
- 在临时目录重建仓库
- 执行全面扫描
- 完成后自动清理临时文件
注意:远程扫描需要目标服务器允许目录列表访问,常见的CTF题目通常会配置好这个权限。
3.3 正则表达式匹配
支持多种匹配模式:
- 基础flag格式:
-m "flag{[a-zA-Z0-9_]+}"- 多模式组合:
-m "flag{.*}" -m "ctf{.*}" -m "key:.*"- 从文件读取模式:
python fukkgit.py -f patterns.txtpatterns.txt示例内容:
flag\{.*\} ctf\{.*\} secret_[A-Za-z0-9_]+ admin_.*_password4. 高级使用技巧
4.1 深度扫描策略
对于特别隐蔽的flag,建议使用深度扫描:
# 扫描所有对象(包括已删除内容) python fukkgit.py -d . --deep-scan # 检查特定commit python fukkgit.py -d . -c abc1234深度扫描会:
- 解析所有Git对象文件
- 检查已删除的文件内容
- 验证每个blob对象
- 分析树对象的变更历史
4.2 结果过滤与排序
使用管道组合其他工具:
# 按时间排序结果 python fukkgit.py | sort -k 3 # 只显示唯一结果 python fukkgit.py | uniq # 统计出现次数 python fukkgit.py | sort | uniq -c | sort -nr4.3 自动化脚本集成
可以编写wrapper脚本实现自动化:
#!/bin/bash TARGET=$1 PATTERN=$2 echo "[*] Starting automated Git scan" python fukkgit.py -u $TARGET -m $PATTERN > results.txt if [ -s results.txt ]; then echo "[+] Found potential flags:" cat results.txt else echo "[-] No matches found" # 尝试备用模式 python fukkgit.py -u $TARGET --deep-scan fi5. 常见问题排查
5.1 权限问题
错误现象:
Permission denied: '.git/index'解决方案:
# 确保有读取权限 chmod -R +r .git # 或者使用sudo sudo python fukkgit.py -d /path/to/repo5.2 网络连接问题
错误现象:
Failed to clone remote repository检查步骤:
- 确认目标URL可访问
- 检查网络代理设置
- 尝试使用git-dumper替代:
git-dumper http://target.com/.git/ ./local_copy python fukkgit.py -d ./local_copy5.3 正则表达式不匹配
调试方法:
- 先用简单模式测试:
python fukkgit.py -m "."- 逐步增加复杂度:
python fukkgit.py -m "flag" python fukkgit.py -m "flag{" python fukkgit.py -m "flag{.*}"- 使用在线正则测试器验证模式
6. 实战案例分析
6.1 CTF题目示例
假设题目给出:
http://ctf.example.com/.git/解题步骤:
- 扫描远程仓库:
python fukkgit.py -u http://ctf.example.com/.git/ -m "flag{.*}"- 发现flag在历史commit中:
Found in commit: abc1234 - "remove flag"- 查看具体修改:
git show abc12346.2 企业安全审计场景
审计公司内部Git仓库:
# 扫描所有历史commit中的密码 python fukkgit.py -d ./company-repo -m "password\s*=\s*'.*'" # 检查API密钥泄露 python fukkgit.py -d ./company-repo -m "[a-zA-Z0-9]{32}"发现敏感信息后的处理:
- 重置相关密钥
- 修改历史commit(需要force push)
- 通知相关人员
7. 工具原理深入解析
7.1 Git对象模型分析
工具核心扫描以下Git对象:
- blob:存储文件内容
- tree:记录目录结构
- commit:保存版本信息
- tag:标记特定版本
扫描算法流程:
- 解析.git目录结构
- 遍历所有对象文件
- 对每个对象解码内容
- 应用正则表达式匹配
- 记录匹配位置和上下文
7.2 正则表达式引擎优化
为提高匹配效率:
- 预编译所有正则模式
- 使用多线程并行扫描
- 实现增量式内容读取
- 缓存已解析的对象
性能对比:
| 扫描方式 | 小型仓库 | 大型仓库 |
|---|---|---|
| 单线程 | 2.3s | 4m12s |
| 多线程 | 1.1s | 1m48s |
| 增量式 | 0.8s | 1m05s |
8. 开发与扩展指南
8.1 添加新功能
以添加JSON输出支持为例:
- 修改参数解析:
parser.add_argument('--json', action='store_true', help='Output in JSON format')- 实现JSON格式化:
if args.json: import json print(json.dumps(results, indent=2))8.2 集成其他工具
与git-secrets集成示例:
from git_secrets import scan_history def enhanced_scan(repo_path): standard_results = scan_git(repo_path) secrets_results = scan_history(repo_path) return standard_results + secrets_results8.3 性能优化建议
- 对象缓存:
from functools import lru_cache @lru_cache(maxsize=1000) def parse_git_object(sha): # 解析实现- 多进程处理:
from multiprocessing import Pool with Pool(4) as p: results = p.map(scan_commit, all_commits)9. 安全注意事项
9.1 合法使用原则
重要限制:
- 仅用于授权测试
- 禁止扫描非授权目标
- 遵守比赛规则
- 企业内需获得书面许可
9.2 防护措施
防止.git泄露:
- 配置nginx禁止访问:
location ~ /\.git { deny all; }- 添加.gitignore文件
- 定期审计历史commit
- 使用pre-commit钩子检查敏感信息
10. 替代方案对比
| 工具名称 | 语言 | 远程支持 | 正则匹配 | 高亮显示 | 自动清理 |
|---|---|---|---|---|---|
| FUKK GIT | Python | ✅ | ✅ | ✅ | ✅ |
| git-all-seek | Shell | ❌ | ✅ | ❌ | ❌ |
| GitHound | Go | ✅ | ❌ | ✅ | ❌ |
| truffleHog | Python | ✅ | ❌ | ✅ | ✅ |
选择建议:
- CTF比赛:FUKK GIT(定制化强)
- 企业审计:truffleHog(企业级功能)
- 快速检查:git-all-seek(无需安装)
11. 实际使用心得
在多次CTF比赛和渗透测试中,我总结了以下经验:
- 时机选择:
- 比赛开始1小时后使用(避免被监控发现)
- 企业审计选择非工作时间
- 模式优化:
# 包含常见flag变种 -m "flag{.*}" -m "[fF][lL][aA][gG]{.*}" -m "FLAG_.*"- 结果验证:
- 检查是否为真实flag(有些是诱饵)
- 确认flag格式符合题目要求
- 测试flag是否已被使用过
- 隐蔽技巧:
# 使用安静模式减少日志 python fukkgit.py -q # 设置延迟避免触发防护 --delay 0.5这个工具真正强大的地方在于它的可扩展性,通过修改匹配模式和扫描策略,可以适应各种不同的场景需求。我在实际使用中通常会准备多个不同的pattern文件,根据目标特点选择最合适的扫描方案。