前言
说找时间写,今天终于动手来写一波有关漏洞利用工具的博文。
git目录泄漏导致了源码泄漏,是一种很严重的过失。说是过失是因为它其实很容易避免。其实在ctf比赛中还是遇到过很多这样的题型,只要能把整个目录中的重要文件下载下来就可以了,那么怎样下载,就是下面要写的了。
知识点
要想下载git目录首先要知道这个目录下的文件都有啥含义。
- hooks:这个目录存放一些shell脚本,可以设置特定的git命令后触发相应的脚本;在搭建gitweb系统或其他git托管系统会经常用到hook script
- info:包含仓库的一些信息
- logs:保存所有更新的引用记录
- objects:所有的Git对象都会存放在这个目录中,对象的SHA1哈希值的前两位是文件夹名称,后38位作为对象文件名
- refs:这个目录一般包括三个子文件夹,heads、remotes和tags,heads中的文件标识了项目中的各个分支指向的当前commit
- COMMIT_EDITMSG:保存最新的commit message,Git系统不会用到这个文件,只是给用户一个参考
- config:这个是GIt仓库的配置文件
- description:仓库的描述信息,主要给gitweb等git托管系统使用
- index:这个文件就是我们前面提到的暂存区(stage),是一个二进制文件
- HEAD:这个文件包含了一个档期分支(branch)的引用,通过这个文件Git可以得到下一次commit的parent
- ORIG_HEAD:HEAD指针的前一个状态
上面的内容网上很多,可以多了解了解。还有git的基本操作如果都理解的话就可以进行下面的内容了。
分析利用方法
其实git目录中是没有源码的明文,也就是说要得到源码,还要使用git命令进行转换的。而且,只要能下载到对象文件就可以了。我有两种想法。
- 一般情况下,在暂存区中记录的对象包含了大部分想要获得的文件,说大部分是因为可能有一部分被删除了。所以只分析index文件可能会漏掉一些。
- 还有一种是分析logs/HEAD文件,这个文件记录了仓库从创建到最后所有的提交记录以及分支变换等等的记录。但是它并不记录
git add .
等的添加命令,也就是说没有提交的对象分析不到。但是它会记录已经删除的文件和不同版本的文件。
鉴于两种方法的互补,可以按照两种方法分别写出程序,在没有头绪之时考虑是否是方法的弊端导致的漏掉文件。源码
1 | # coding:utf-8 |
源码也可以到我的码云上下载 我的githack
总结
这个工具很早之前就有简洁版本,现在重新写了一遍,对git工具的使用和git目录又熟悉了不少。虽然网络上早有此类工具,但自己写出来还是有不少感悟,以后多写多练。