Git源代码泄露利用技巧
如果在部署应用时没有及时删除.git目录或做访问限制,便会造成.git目录泄露,这种情况在渗透和做CTF题的时候经常遇到,这次便简单介绍下.git泄露的利用方式
什么是git泄露
Git是一种分布式版本控制系统,可以用于跟踪文件的变化,记录每次修改的内容,以便开发者随时查案历史版本,并回溯到任意版本
使用git init
指令可以初始化一个git仓库,而仓库的相关配置文件就保存在当前目录下的隐藏目录.git中。如果在部署应用时未及时删除.git目录,并且未对目录访问进行限制,便会导致出现git泄露漏洞
由于git仓库中存储了项目的源代码、配置文件和敏感信息,一旦泄露将导致攻击者可以获取到代码和信息,对系统发起进一步攻击
git泄露通常是通过目录扫描发现,存在git相关访问路径说明存在git源代码泄露漏洞
.git目录结构
.git目录是Git版本控制系统中存储仓库信息的核心目录,其文件结构如下
COMMIT_EDITMSG
:保存最新的提交信息HEAD
:指向当前分支,或者指向当前所在的提交objects
:存储了Git的对象数据库,包括所有的文件内容、目录结构和提交信息,使用文件哈希值作为文件名refs
:存储分支、标签等引用信息config
:存储仓库配置信息,如用户信息、远程仓库地址、默认分支等index
:暂存区的索引文件,记录了暂存区中的文件列表、文件状态和文件哈希值等信息logs
:存储了引用日志信息,记录分支的变更历史hooks
:存储包含了Git的钩子脚本,开发者可以在特定的Git操作(如提交、合并)前后执行自定义的脚本description
:仓库的描述信息,主要给gitweb等网站托管系统使用info
:包含仓库的一些信息
在上面的文件中,objects目录需要重点关注,因为源代码文件通常就保存在其中
wget
适用于git源代码泄露漏洞和列目录漏洞同时出现,递归下载.git目录下的所有文件
1 | wget -r http://xxx.xxx.com/.git |
GitHacker
多线程git泄露利用工具,可以完整的下载整个git目录,更适用无法直接访问git目录的时候下载目录
一条指令快速安装
1 | python3 -m pip install -i https://pypi.org/simple/ GitHacker |
安装后在任何位置都可以直接调用GitHacker
使用只需要指定url地址和文件保存路径
1 | GitHacker --url http://xx.xxx.com/.git --output-folder output |
dumpall
一款信息泄漏利用工具,适用于.git/.svn/.DS_Store泄漏和目录列出
1 | python dumpall.py -u http://xx.xxx.com/.git |
使用局限性较高,只能下载git解析后的代码源文件,不能下载整个.git
隐藏目录
git信息泄露漏洞利用主要是查看敏感信息,会用到的一些指令如下
1 | git reflog # 显示所有提交,包括孤立节点 |
除此之外还有很多git指令可以使用,如下是git配置仓库时常用的指令
Bugku-source
目录扫描发现存在.git
路径,并且路径直接访问可以获取所有文件信息
通过wget
指令递归下载整个.git
目录到本地
然后通过git reflog
指令查看所有提交
然后通过git show
逐个查看修改的内容,最终拿到flag
攻防世界-lottery
一个买彩票小游戏,注册会得到20美元初始资金,每次输入7位数字进行博彩,赢得的奖金数取决于匹配相同数字数量,而要买下flag需要9990000美元
主目录下有robots.txt
文件,里面记录.git
路径,由于.git
路径无法直接在浏览器访问,这里我们使用GitHacker把.git
目录下的所有文件下载下来
下载下来后查看api.php
文件,里面有一个buy
函数用于购买彩票
1 | function buy($req){ |
由于if($numbers[$i] == $win_numbers[$i])
匹配彩票号码是否匹配用的是数组元素弱比较,因此我们只要让数组元素为true
便可以绕过比较,通过构造全为true
的数组拿到最高奖金刷钱
刷到一定金额后直接买下flag