【CTF-MISC-git】在 git 仓库中寻找隐藏的 flag。
题目
BearcatCTF 2026\forensics\Poem About Pirates
解题过程
查找步骤
1. 检查 git 仓库状态
首先,确认当前目录是否为 git 仓库,并查看工作区状态。
gitstatus输出:
On branch main nothing to commit, working tree clean2. 查看 git 提交历史
查看所有提交记录,寻找可能的线索。
gitlog--oneline输出:
fb94dcb (HEAD -> main) Added sestina about pirates 026d64c Added limerick about pirates 4d41e95 Added acrostic about pirates 2778ad8 Added haiku about pirates 0f00ca7 Added sonnet about pirates 0d9c7f0 Initial commit3. 检查分支和标签
检查是否存在隐藏的分支或标签,这些地方可能包含线索。
gitbranch-a输出:
* maingittag输出:
(无输出,说明没有标签)4. 查看 git 操作历史 (reflog)
使用git reflog查看所有 git 操作历史,包括可能被覆盖或删除的提交。
gitreflog输出:
fb94dcb (HEAD -> main) HEAD@{0}: rebase (finish): returning to refs/heads/main fb94dcb (HEAD -> main) HEAD@{1}: rebase (pick): Added sestina about pirates 026d64c HEAD@{2}: rebase (squash): Added limerick about pirates a6f9948 HEAD@{3}: rebase (squash): # This is a combination of 3 commits. e945ca3 HEAD@{4}: rebase (squash): # This is a combination of 2 commits. ef980a4 HEAD@{5}: rebase (start): checkout HEADyu HEAD~5 ae56c9e HEAD@{6}: rebase (finish): returning to refs/heads/main ae56c9e HEAD@{7}: rebase (start): checkout HEAD~4 ae56c9e HEAD@{8}: commit: Added sestina about pirates d058dda HEAD@{9}: commit: Changed villanelle about pirates 4a58f3e HEAD@{10}: commit: Added villanelle about pirates 4521350 HEAD@{11}: commit: Added another haiku about pirates ef980a4 HEAD@{12}: commit: Added limerick about pirates 4d41e95 HEAD@{13}: rebase (finish): returning to refs/heads/main 4d41e95 HEAD@{14}: rebase (pick): Added acrostic about pirates 2778ad8 HEAD@{15}: rebase (pick): Added haiku about pirates 0f00ca7 HEAD@{16}: rebase (squash): Added sonnet about pirates 4eb6f1d HEAD@{17}: rebase (start): checkout HEAD~4 8dc49e7 HEAD@{18}: rebase (abort): updating HEAD 4eb6f1d HEAD@{19}: rebase (start): checkout HEAD~3 8dc49e7 HEAD@{20}: commit: Added acrostic about pirates fb3c329 HEAD@{21}: commit: Added haiku about pirates cdcb678 HEAD@{22}: commit: Changed sonnet about pirates 4eb6f1d HEAD@{23}: commit: Added sonnet about pirates 0d9c7f0 HEAD@{24}: commit (initial): Initial commit解释git中的命令
这个输出是git reflog命令的结果,显示了HEAD指针在本地仓库中的所有移动历史。让我详细解释每一行:
- 基本格式说明
每条记录格式:[commit-hash] [HEAD位置]@{[索引]}: [操作]: [描述]
最新操作(顶部)
fb94dcb (HEAD -> main) HEAD@{0}: rebase (finish): returning to refs/heads/main
- rebase操作完成,HEAD重新指向main分支
fb94dcb HEAD@{1}: rebase (pick): Added sestina about pirates
- 在rebase过程中,应用(pick)了"Added sestina about pirates"这个提交
026d64c HEAD@{2}: rebase (squash): Added limerick about pirates
- 在rebase过程中,压缩(squash)了"Added limerick about pirates"提交
a6f9948 HEAD@{3}: rebase (squash): # This is a combination of 3 commits
- 合并了3个提交的 squash 操作
e945ca3 HEAD@{4}: rebase (squash): # This is a combination of 2 commits
- 合并了2个提交的 squash 操作
ef980a4 HEAD@{5}: rebase (start): checkout HEADyu HEAD~5
- 开始rebase,检出HEAD~5(当前HEAD的第5个父提交)
中间操作
ae56c9e HEAD@{6}: rebase (finish): returning to refs/heads/main
- 另一次rebase完成
ae56c9e HEAD@{7}: rebase (start): checkout HEAD~4
- 开始rebase,检出HEAD~4
ae56c9e HEAD@{8}: commit: Added sestina about pirates
- 创建了一个提交,内容是"Added sestina about pirates"
d058dda HEAD@{9}: commit: Changed villanelle about pirates
- 创建了一个提交,修改了关于海盗的维拉内拉诗
4a58f3e HEAD@{10}: commit: Added villanelle about pirates
- 添加了关于海盗的维拉内拉诗
4521350 HEAD@{11}: commit: Added another haiku about pirates
- 添加了另一个关于海盗的俳句
ef980a4 HEAD@{12}: commit: Added limerick about pirates
- 添加了关于海盗的打油诗
较早操作
4d41e95 HEAD@{13}: rebase (finish): returning to refs/heads/main
- 另一次rebase完成
4d41e95 HEAD@{14}: rebase (pick): Added acrostic about pirates
- 在rebase中应用了关于海盗的藏头诗提交
2778ad8 HEAD@{15}: rebase (pick): Added haiku about pirates
- 在rebase中应用了关于海盗的俳句提交
0f00ca7 HEAD@{16}: rebase (squash): Added sonnet about pirates
- 压缩了关于海盗的十四行诗提交
4eb6f1d HEAD@{17}: rebase (start): checkout HEAD~4
- 开始rebase
8dc49e7 HEAD@{18}: rebase (abort): updating HEAD
- 中止了rebase操作
4eb6f1d HEAD@{19}: rebase (start): checkout HEAD~3
- 开始另一个rebase
8dc49e7 HEAD@{20}: commit: Added acrostic about pirates
- 添加了关于海盗的藏头诗
fb3c329 HEAD@{21}: commit: Added haiku about pirates
- 添加了关于海盗的俳句
cdcb678 HEAD@{22}: commit: Changed sonnet about pirates
- 修改了关于海盗的十四行诗
4eb6f1d HEAD@{23}: commit: Added sonnet about pirates
- 添加了关于海盗的十四行诗
0d9c7f0 HEAD@{24}: commit (initial): Initial commit
- 初始提交,仓库的第一个提交
关键观察
- 多次rebase操作:用户多次进行rebase,可能是为了整理提交历史
- 提交压缩:使用了squash来合并多个相关提交
- 中止rebase:有一次rebase被中止(abort)
- 诗歌主题:所有提交都与海盗主题的诗歌相关
5. 检查被覆盖的提交
在 reflog 中发现与villanelle.txt相关的提交d058dda,该提交被 rebase 操作覆盖。查看该提交的内容:
gitshow d058dda输出:
commit d058dda829008df2881c18d34eb6ac1f7cbf8015 Author: Fish enjoyer <fish@cyberatuc.org> Date: Sat Jan 31 19:53:51 2026 -0500 Changed villanelle about pirates diff --git a/villanelle.txt b/villanelle.txt index 634f5a0..ebc9b59 100644 --- a/villanelle.txt +++ b/villanelle.txt @@ -7,7 +7,7 @@ No place remains for honest men to hide. The Jolly Roger flies above the bay. Across the map where ink and salt decay. -BCCTF{1gN0r3_4ll_PreV1OU5_1n57Ruc7iOns}. +They chase the ghosts that on the winds do ride. They seek the gold before the break of day. The restless waves wash all the blood away.发现 Flag
在被覆盖的提交d058dda中,发现了被替换的内容,其中包含 Flag:
Flag: BCCTF{1gN0r3_4ll_PreV1OU5_1n57Ruc7iOns}
总结
通过以下步骤成功找到 Flag:
- 检查 git 仓库状态,确认工作区干净
- 查看 git 提交历史,了解仓库结构
- 检查分支和标签,排除这些位置的线索
- 使用
git reflog查看所有 git 操作历史,发现被覆盖的提交 - 通过
git show查看被覆盖提交的内容,找到 Flag
Flag 被隐藏在一个被 rebase 操作覆盖的提交中,通过查看该提交的 diff 内容成功提取。
附录:查看所有git内容操作
gitlog-p>all_commits.md使用git log -p命令查看所有提交的详细内容,并将输出重定向到文件中以便查看。
但要注意:
- git log -p 命令只会显示当前分支(main)上的提交历史
- 提交 d058dda 已经被 rebase 操作覆盖,不再存在于当前分支的历史中
- 只有通过 git reflog 命令才能找到这种被覆盖的提交
