本关推荐使用Githack lijiejie/GitHack: A `.git` folder disclosure exploit
使用githack后可以得到两个文件
index.html和50x.html
GitHack 主要尝试从泄露的 Git 对象中提取文件内容,Git-Dumper 则尝试把服务器上的 .git 元数据和对象重新拼成一个可以使用的本地 Git 仓库。
所以后面直接使用git-dumper
在Githack创建的文件夹中我们发现

发现只有 50x.html 和 index.html,没有 .git 目录,因此无法直接通过 Git 查看提交历史。
使用 Git-Dumper 重新获取数据
从题目提供的 /.git/ 路径下载 Git 元数据、引用和对象。
在cmd中运行以下命令 将ctfhub 的.git文件夹恢复至我们的本地的文件夹(随便创建一个即可)
bash
mkdir E:\网络安全\git-recovered
git-dumper http://challenge-93fc0ccde56b8d3f.sandbox.ctfhub.com:10800/.git/ E:\网络安全\git-recovered
确认 .git 目录存在,并且 Git 能识别 master 分支。
bash
cd /d E:\网络安全\git-recovered
dir /a
git status
查看提交历史
bash
git log --all --oneline --decorate
找到三个提交:7cf4548 remove flag、d1ea00a add flag、fad3870 init。
定位被删除的文件
bash
git log --all --diff-filter=D --summary
输出明确显示,remove flag 这个提交删除了 23585232687344.txt。
读取删除前的文件
bash
git show d1ea00a:23585232687344.txt
d1ea00a 是添加 Flag 的提交,因此可以直接从该历史快照读取文件内容。
Git 的每个提交都会保存一份文件树快照,并通过父提交连接历史。删除文件只会让它从新快照中消失,不会自动把之前提交中的文件内容一并删除。
因此,不是在当前目录寻找这个文件,而是在 d1ea00a 对应的历史快照中读取它。
为什么删除能恢复?

