git是一个主流的分布式版本控制系统,开发人员在开发过程中经常会遗忘 .git 文件夹,导致攻击者可以通过 .git 文件夹中的信息获取开发人员提交过的所有源码,而可能导致服务器被攻击而沦陷。
Git信息泄露原理
通过泄露的.git文件夹下的文件,还原重建工程源代理。
1.解析.git/index文件,找到工程中的所有:(文件名.文件shu1)
2.去.git/objects/文件夹下下载对应的文件
3.zlib解压文件,按原始的目录结构写入源代码
常规git泄露
即没有任何其他操作,参赛者通过运用现成的工具或自己编写的脚本即可获取网站源码或者flag。
git回滚
git作为一个版本控制工具,会记录每次提交的修改,所以当题目存在git泄露时,flag文件可能在修改中被删除或被覆盖了,这时我们可以利用git的“git reset”命令来恢复到以前的版本。
git分支
在每次提交时,git都会自动把它们串成一条时间线,这条时间线就是一个分支。而git允许使用多个分支,从而让用户可以把工作从开发主线上分离出来,以免影响开发主线。如果没有新建分支,那么只有一条时间线,即只有一个分支,git中默认为master分支。因此,我们要找的flag可能不会藏在当前分支中,这时使用“git log”命令只能找到在当前分支上的修改,并不能看到我们想要的信息,因此需要切换分支来找到想要的文件。
git泄露的其他利用
除了查看源码的常见利用方式,泄露的git中也可能有其他有用的信息,如 .git/config 文件夹中可能含有 access_token 信息,从而可以访问这个用户的其他仓库。
SVN是源代码版本管理软件,造成SVN源代码漏洞的主要原因是管理员操作不规范将SVN隐藏文件夹暴露于外网环境,可以利用 .svn/entries 或 wc.db 文件获取服务器源码等信息。
在初始化项目时,HG会在当前文件夹下创建一个 .hg 隐藏文件夹,其中包含代码和分支修改记录等信息。