git文件泄露利用原理及工具 – 安全小工坊

image.png

前言

之前扫出来一些.git泄露漏洞,在用git泄露工具下载恢复的时候,要不漏报,要不慢的要死,还有的扫一半工具直接挂了的。。。然后就开始研究起这些工具的原理来了。这里简单说一下比较流行的工具GitHack和Git_Extract

  • GitHack:支持python2和python3,支持多线程,但只通过.git/index来提取文件hash,可能存在漏报
  • Git_Extract:比GitHack有更多的发现方式,但只支持python2,还只能是单线程,遇到文件比较多或者网不好的网站,扫半天都结束不了。

git泄露恢复原理

简单来说,在使用git时,各种行为和文件都被标记了一个hash,然后记录在了.git/objects文件夹下,这个hash前两位是所在文件夹,后38位是文件夹内的文件。

利用.git泄露来恢复源码的本质就是去这个.git/objects文件夹下下载源码对应的hash文件并恢复成源文件。

但是这些都是hash,肯定是爆破不出来地址的,那么如何找到这些hash的准确值呢?

网上翻阅一下git原理相关文章,大概可概括为:

  • objects文件夹内的hash文件内容主要为commit,blob,tag,tree四类,其中blob类型的就是可以恢复为源码的hash文件
  • commit类型的文件中包含tree类型文件的hash值
  • tree类型的文件包含blob类型文件的hash
  • blob类型的问题件包含源码

由上可知,可以通过git泄露的固定地址找到commit类型的hash,再由commit类型文件找到tree类型的文件hash,之后通过tree类型找到blob类型hash,最后从blob类型文件中恢复源码。

(ps:以上是为了方便理解,并不严谨,详细查找git原理的相关文章)

哪些固定路径的文件可以找到hash?

这是从Git_Extract工具中拿到的地址:

‘/logs/HEAD’, ‘/logs/refs/heads/master’, ‘/packed-refs’, ‘/refs/remotes/origin/HEAD’, ‘/ORIG_HEAD’, ‘/FETCH_HEAD’, ‘/refs/wip/index/refs/heads/master’, # PlaidCTF 2020 magit wip mode ‘/refs/wip/wtree/refs/heads/master’,

因此,可以形成一个简单流程

固定路径提取hash===>commit文件提取hash===>tree文件提取hash===>blob文件恢复源码

pack文件提取源码

除了通过hash来恢复源码,/objects/info/packs存在(这个不是真正的pack文件,而是保存了pack文件的hash),那么也可以通过下载其对应的pack文件来恢复源码。

pack可以简单理解为所有.git/objects的压缩包,可以通过这个文件恢复所有的objects中的内容。

具体文件格式可查阅相关文档这里不做过多介绍。

git泄露工具

根据GitHack和Git_Extract拼凑改良的一个小工具,index解析取自GitHack,pack解析取自Git_Extract并修改为python3格式,整体框架重新编写。

  • 支持python3
  • 支持多线程
  • 支持多种提取方式,能够提取其他分支和历史版本
  • 增加进度提示

image.png

image.png

获取方法

公众号回复 gitdump 获取

往期文章

image.png

Source

Back To Top