git简介
git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。当前大量开发人员使用git进行版本控制,对站点自动部署。攻击者可以利用该漏洞下载git文件夹里的所有内容。如果文件夹内有敏感信息比如站点源码、数据库账户密码等,攻击者可能直接控制服务器。如果配置不当,可能会将.git文件夹直接部署到线上环境。这就引起了git泄露漏洞。
.git目录
- config - 包含一些配置选项
- description - 仓库的描述信息,主要给gitweb等git托管系统使用
- HEAD - 指定当前分支,映射到ref引用,能够找到下一次commit的前一次哈希值
- hooks - 存放可在某些指令前后触发运行的钩子脚本(hook scripts),默认包含一些脚本样例
- index - 这个文件就是我们前面提到的暂存区(stage),是一个二进制文件
- info - 存放仓库的信息
- objects - 存储所有Git的数据对象,对象的SHA1哈希值的前两位是文件夹名称,后38位作为对象文件名
- refs - 存储各个分支指向的目标提交
git常用命令
git ls-files -u 显示冲突的文件,-s 是显示标记为冲突已解决的文件git diff 对比工作区和stage文件的差异git diff --cached 对比stage和branch之间的差异git ls-files --stage 检查保存在stage的文件git log 显示到HEAD所指向的提交为止的所有提交记录git reset HEAD <file> 可以拉取最近一次提交到版本库的文件到暂存区,且不影响工作区git reset --hard HEAD 放弃工作区和index的改动,HEAD指针仍然指向当前的commit
漏洞利用实例
CTFhub-Log
首先利用dirsearch工具扫描题目网站
python dirsearch.py -u http://challeng-7874a01df5e06f.sandbox.ctfhub.com:10800/
![在这里插入图片描述](https://img-blog.csdnimg.cn/a67dc2d1322d4b1fae2feed09d3c5162.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAVEl0YW5pdW14,size_20,color_FFFFFF,t_70,g_se,x_16) 可以看出存在git泄露,接下来用git_extract工具来下载源代码到本地,需要注意的是此工具需要在python2环境下运行,没有的小伙伴可以去官网下载安装(可以和python3环境共存,记得修改python.exe以区分两个版本)。
python2 git_extract.py http://challenge-af087dea0ea36ad3.sandbox.ctfhub.com:10800/.git/
![在这里插入图片描述](https://img-blog.csdnimg.cn/c287b7efec404a8d863836a40fbef305.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAVEl0YW5pdW14,size_20,color_FFFFFF,t_70,g_se,x_16) 下载完成,可以在工具根目录下找到如下文件夹: ![在这里插入图片描述](https://img-blog.csdnimg.cn/9151403d9ad24ba39360f58bdaf9abad.png) 在此界面,右键点击Git Bush Here。接着输入git log命令,查看所有提交记录: ![在这里插入图片描述](https://img-blog.csdnimg.cn/8d966a38f5c041eea84ba482f73a52d8.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAVEl0YW5pdW14,size_15,color_FFFFFF,t_70,g_se,x_16) 可以看到在第二条记录中进行了add flag的操作,猜测flag就在里面,继续输入git diff命令来对比文件:
git diff 930fd6274703f77ecbed6fafacfd1bdb0efff42c 最后成功得到flag: ![在这里插入图片描述](https://img-blog.csdnimg.cn/61fde57dd8754f309db4248a46b15997.png)
CTFhub-stash
stash命令可用于临时保存和回复修改,进入题目,依照上题方法扫描网站目录,发现git漏洞存在,下载源代码到本地,查看文件夹,发现**.git\refs**目录下有一stash文件,用记事本打开该文件: ![在这里插入图片描述](https://img-blog.csdnimg.cn/213a7887dda24d7f943d4aaaa3c51698.png)
利用git diff命令,查看提交差异:
git diff 3a7efb60aa102868368856c99ddd1d5c2b6fd8ed
得到flag:
![在这里插入图片描述](https://img-blog.csdnimg.cn/e404b8e7b5714a6998e6674fe4a09b8e.png) 当然官方题解的步骤为:
git stash list #显示所有保存的记录列表 git stash pop #从列表中弹出来一个文件
但经过尝试并未成功。
|