git 源码泄露学习与题目练习
——
Git
是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。
在创建一个项目时,会在本地用 git bash 初始化一个文件,而文件夹内就会生成一个 .git 文件。
就是这么个文件,可能能够被攻击者利用,造成 git 源码泄露。
生成的 git 文件像这样。
先了解一下这些不同文件的作用
hook:存放一些sheel的地方。
info:存放仓库的信息
object:存放所有git对象的地方
refs:存放提交hash的地方
config:github的配置信息
description:仓库的描述信息,主要给gitweb等git托管系统使用
HEAD:映射到ref引用,能够找到下一次commit的前一次哈希值
——
git 信息泄露原理
-
可以通过泄露的 .git 文件夹下的文件,还原重建工程源码。
-
解析.git/index文件,找到工程中所有的: (文件名,文件sha1)
-
去.git/objects/文件夹下载对应的文件
-
zlib解压文件,按原始的目录结构写入源代码。
-
渗透测试人员、攻击者,可以进一步审计代码,挖掘,文件上传,SQL注射等安全漏洞。
在 Windows 环境下
如果已经知道了 .git 文件的路径,可以利用工具 GitHack 下载到 git 文件夹里的所有内容。
在 Linux 环境下
自带了 wget 文件下载工具,在命令行下执行命令即可下载文件。
GitHack 下载:
https://github.com/goodricc/GitHack
就是一个 python 脚本,下载后命令行进入此目录即可执行命令。
为了方便可直接创建 cmd 快捷方式把起始位置设置为文件路径,打开就可以直接输入命令了。
注:
GitHack 需要 python2 的环境,并且 python2 的版本需要在 2.7.9 以上,不然可能显示类似这样的报错:
AttributeError: "module" object has no attribute "_create_unverified_context"
GitHack是一个.git泄露利用脚本,通过泄露的.git文件夹下的文件,重建还原工程源代码。
当前大量开发人员使用git进行版本控制,对站点自动部署。 如果配置不当,可能会将 .git 文件夹直接部署到线上环境。这就引起了git泄露漏洞。
githack 使用的一般命令格式:
GitHcak.py http://xxxxxxxx/.git
——
——
git 泄露题目练习
bugku web40
题目描述:我哥说渗透只用 Linux 环境。
打开环境,页面上没有什么消息。
F12 源代码中可以看到注释中有一个 flag ,但提交之后发现是一个假 flag 。
前面那个 flag 的内容可以看出来经过了 base64 编码,解码之后提交仍然是一个假 flag 。
页面中找不到其它信息了,再看看题目描述提示用 Linux 环境。
(理论上 Windows 环境下的方法感觉也是可以解决的)
其实感觉还是不知道如何下手。
尝试扫一扫后台,Linux 用 dirb 命令扫描到 .git 目录。
在 Windows 下用后台扫描工具如果字典里 含有 ‘ git ’字符也是可以扫出来的。
扫到 git 目录之后,了解到这是关于 git 泄露的题目。
经过尝试,Windows 下应该是做不了这题,因为在用 GitHack 想把文件都下载下来之后,发现只有两个没什么用的文件,里面没有啥信息。
进入文件执行命令也告诉了我们此仓库不存在,即没有把仓库里的文件都下载下来。
那接下来就只能用 Linux 系统了。
在命令行执行命令:
wget -r http://114.67.246.176:19619/.git
下载完后显示下载了大概五十多 M 的文件。
并且已经可以看到这个文件夹了。
右键这个文件夹,在此文件夹上打开命令行。
执行命令:
git reflog
得到这个仓库的操作日志。
已经得到了每个操作日志,就一个个尝试查看每次操作 cmmit 的内容:
git show commit_id
经过测试,我这里在版本号 40c6d51 里找到了正确的 flag 。