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.3s4m12s多线程1.1s1m48s增量式0.8s1m05s8. 开发与扩展指南8.1 添加新功能以添加JSON输出支持为例修改参数解析parser.add_argument(--json, actionstore_true, helpOutput in JSON format)实现JSON格式化if args.json: import json print(json.dumps(results, indent2))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(maxsize1000) 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 GITPython✅✅✅✅git-all-seekShell❌✅❌❌GitHoundGo✅❌✅❌truffleHogPython✅❌✅✅选择建议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文件根据目标特点选择最合适的扫描方案。
阅读完成 · 觉得有帮助?