Git信息泄露复现
复现漏洞前建议先学习一下Git基础再去复现,这样才会理解漏洞利用原理
漏洞介绍
漏洞形成
在运行
git init
命令初始化仓库时会在工作目录下产生一个名为.git
的文件夹,该文件夹是Git用来存储代码变更记录等。在没有删除该文件夹时就对代码进行发布,这就导致了.git目录泄露,可以利用该文件夹对源代码进行恢复
漏洞原理
- 通过泄露的
.git
文件夹下的文件,还原重建工程源文件 - 解析
.git/index
文件,找到工程中所有的文件名、文件sha1 - 去
.git/objects
文件夹下下载对应的文件 zlib
解压文件,按原始的目录结构写入源代码
GitHack
项目介绍
GitHack是一个git泄露测试脚本,可以通过泄露的文件重建还原工程源代码,代码运行在Python2
工作原理
- 尝试获取
packs
克隆 - 尝试历遍所有克隆
- 尝试从缓存文件
index
、commit
记录中恢复
用法示例
下载GitHack
1 | # Github下载(较慢) |
使用示例
1 | python2 GitHack.py http(s)://xxx/.git/ |
漏洞演练
CTFHub-log
(注意: CTFHub里面的题目是会变动的,flag也会变,注意项目的版本号与还原出来的文件名)
使用GitHack将文件复原,复原的文件会在dist/xxx/
目录下
1 | python2 GitHack.py http://challenge-4b38633eacfb8d28.sandbox.ctfhub.com:10800/.git/ |
查看该项目的日志,可以看到有一个版本的说明为add flag
,怀疑是添加了flag…
1 | git log |
尝试将项目回退到该版本,发现了文件32323689020801.txt
1 | git reset --hard 662e3670a54e699e5724d00975363ca8eeea118f |
CTFHub-Stash
使用GitHack将文件复原,复原的文件会在dist/xxx/
目录下
1 | python2 GitHack.py http://challenge-972bd73f55d8b38b.sandbox.ctfhub.com:10800/.git/ |
使用上一题的方法发现flag不在该处
尝试查看现有的stash
,发现存在一条stash
1 | git stash list |
使用pop
重新应用缓存的stash
,发现master分支下的2800536510995.txt
文件发生了改变
1 | git stash pop |
CTFHub-Index
使用GitHack将文件复原,复原的文件会在dist/xxx/
目录下
1 | python2 GitHack.py http://challenge-8c5ada501d65fb4a.sandbox.ctfhub.com:10800/.git/ |
在恢复出来的源代码中的16925331427615.txt
文件中查看到flag
0.png)
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 大胖胖的笔记!