CTFHub Git泄露实战:从log历史中挖flag的两种姿势(附GitHack工具详解)
CTFHub Git泄露实战从log历史中挖flag的两种姿势附GitHack工具详解在CTF竞赛中Git泄露漏洞已成为Web类题目的经典考点。当开发者疏忽地将.git目录部署到生产环境时攻击者便能利用版本控制的历史记录挖掘敏感信息。本文将深入剖析两种从git log中提取flag的高效方法并详解GitHack工具的高级用法。1. Git泄露漏洞原理与侦察技巧.git目录作为Git版本控制系统的核心存储库默认包含以下关键文件objects/存储所有提交对象、文件内容refs/记录分支和标签的指向logs/保存所有引用变更历史config仓库配置信息漏洞利用前提条件目标网站存在.git目录可访问目录未设置deny from all等访问限制历史提交中包含敏感信息如flag侦察阶段推荐使用组合工具# 目录扫描工具 python3 dirsearch.py -u http://target.com -e git # 专用.git检测脚本 python3 git-dumper.py http://target.com/.git output_dir注意实际比赛中需遵守规则仅对授权目标进行测试2. GitHack工具链深度解析GitHack作为自动化利用工具其工作流程可分为三个阶段阶段操作关键技术索引重建下载index文件解析Git索引格式对象恢复获取objects/数据zlib解压缩版本还原重建提交历史引用链追踪高级参数组合示例# 递归下载所有分支 python GitHack.py -u http://target.com/.git --all-branches # 指定文件类型下载 python GitHack.py -u http://target.com/.git -e *.php,*.txt # 暴力破解object目录 python GitHack.py -u http://target.com/.git --brute-objects常见问题解决方案报错Object not found尝试--deep-search模式网络中断恢复使用--resume继续下载文件校验失败手动补全缺失的object文件3. 历史记录挖掘双解法实战3.1 差异对比法git diff通过对比特定提交版本可精确定位flag变动位置# 查看完整提交历史 git log --prettyformat:%h - %an, %ar : %s # 对比相邻两个提交 git diff commitA commitB --color-words # 仅显示新增内容 git diff commitA commitB --word-diff | grep 典型工作流程使用git log定位可疑提交用git show commitID查看变更详情对含flag的提交执行差异分析3.2 版本回退法git reset该方法通过还原历史版本直接获取flag文件# 查看文件变更记录 git log --follow flag.txt # 回退到指定版本危险操作 git reset --hard target_commit # 创建临时分支保护现场 git checkout -b temp_branch target_commit关键参数对比参数工作区暂存区风险等级--soft保留保留低--mixed保留重置中--hard重置重置高4. 防御方案与实战技巧开发人员应配置.htaccess防止泄露RedirectMatch 404 /\.gitCTF选手必备的进阶技巧对象直接访问通过curl获取特定objectcurl http://target.com/.git/objects/xx/xxxxxx | zlib-flate -uncompress引用泄露利用检查info/refs获取分支信息钩子脚本分析查看.git/hooks/寻找线索在最近某次CTF比赛中选手通过组合以下方法成功获取flag利用--bare模式克隆仓库分析reflog找到被删除的提交使用git fsck检查悬空对象