【CTF-MISC-git】在 git 仓库中寻找隐藏的 flag。

【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/mainrebase操作完成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~4ae56c9e HEAD{8}: commit: Added sestina about pirates创建了一个提交内容是Added sestina about piratesd058dda 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开始rebase8dc49e7 HEAD{18}: rebase (abort): updating HEAD中止了rebase操作4eb6f1d HEAD{19}: rebase (start): checkout HEAD~3开始另一个rebase8dc49e7 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 fishcyberatuc.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中发现了被替换的内容其中包含 FlagFlag: BCCTF{1gN0r3_4ll_PreV1OU5_1n57Ruc7iOns}总结通过以下步骤成功找到 Flag检查 git 仓库状态确认工作区干净查看 git 提交历史了解仓库结构检查分支和标签排除这些位置的线索使用git reflog查看所有 git 操作历史发现被覆盖的提交通过git show查看被覆盖提交的内容找到 FlagFlag 被隐藏在一个被 rebase 操作覆盖的提交中通过查看该提交的 diff 内容成功提取。附录查看所有git内容操作gitlog-pall_commits.md使用git log -p命令查看所有提交的详细内容并将输出重定向到文件中以便查看。但要注意git log -p 命令只会显示当前分支main上的提交历史提交 d058dda 已经被 rebase 操作覆盖不再存在于当前分支的历史中只有通过 git reflog 命令才能找到这种被覆盖的提交