Git的简介
Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。是为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
Git具有以下特点:
- 开发者可以提交到本地,每个开发者通过克隆(git clone),在本地机器上拷贝一个完整的Git仓库。(也是分布式相比于集中式的最大区别)
- 公共服务器压力和数据量都不会太大。
- 速度快、灵活。
- 任意两个开发者之间可以很容易的解决冲突。
- 离线工作。
- 代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息。
漏洞产生的原因
一些开发人员在开发时为了让版本控制和网站部署变得方便,会先将仓库托管在Coding或者Github上,开发好后,直接将源码打包上传进行解压。
可是由于在目录中初始化一个仓库后,会在这个目录下产生一个名叫.git的文件夹,这个文件夹里保存了这个仓库的所有版本信息。如果开发者没有将这个文件夹删除,则会造成源码泄露,攻击者可以利用这个文件还原重建工程代码,进一步进行代码审计,挖掘文件上传、sql注入等漏洞。
同时,如果网站涉及到数据库操作,则可能导致链接数据库需要的用户名、密码、端口、库名等信息从源码中泄露,一旦服务器开放了数据库的远程连接功能,攻击者就可以使用从源码中得到的用户名密码进行登录,造成更多安全隐患。
附:.git文件夹详解及git仓库下两个文件
- README.md :对code source的介绍,相当于注释作用,通常涵盖项目介绍、代码所实现的功能、系统环境参数、部署要素、代码组织架构等内容
- .gitignore :配置 git 需要忽略的文件或文件夹,从这个文件一般也可以得到一部分网站的目录结构 , 或者一些日志/配置文件等敏感文件
git漏洞的利用
使用GitHack工具
下载地址 https://github.com/lijiejie/GitHack
GitHack是一个.git泄露利用脚本,只需要下载到本地,cd到所在文件夹,执行1
python githack.py http://xxx.x.x.x/.git
命令
这里我们用Jarvis oj的一道题做演示,题目地址http://web.jarvisoj.com:32798/
运行结束后得到文件
爬虫爬取整个git目录
这种方法跟使用githack工具相比,好处在于可以完全模拟服务器上的代码环境,跟踪到git的每一次提交,得到git提交日志中可能存在的开发人员对每一次commit的描述,例如对某个bug的修复,进而进行白盒审计。
操作过程
- 在linux下利用wget对该目录进行递归下载
1 | wget -r -p -np -k http://www.xxx.com/.git/ |
- 下载完成后,进入下载的目录
3.执行命令git log,查看网站的提交记录
4.执行命令gir reset –hard [log hash],恢复到指定版本号,只需要源码的话就恢复到最近一次的提交
解决办法
- 对.git目录的访问权限进行控制
- 在每次pull之后删除.git文件夹
参考链接:https://www.jianshu.com/p/edae09535ea3