653 字
3 分钟
CTFHUB-skilltree-Git/SVN/HG泄露解题记录
CTFHUB-skilltree-Git/SVN/HG泄露解题记录
T1 Git-Log
- 阅读题目信息,指出可以下载工具GitHack,在ctfhub.com的工具集可以搜索下载。

- 阅读工具使用方法为
python GitHack.py http://www.xx.com/.git,此举旨在当该网站.git文件暴露时,使用HTTP协议逐个文件下载.git内部文件(不需要git端口开放),执行语句。

- 执行
git log查看完整git提交历史,存在add flag和remove flag记录,试着git diff xxx查看内容修改的记录,由于git会保存修改记录的特性,通过查看日志,我们仍然获取了删去的flag内容。

T2 Git-Stash
- 其它操作均相同,本题涉及stash(暂存),是用于将正在修改代码时将修改临时保存起来,等再次使用时恢复,
git stash list用于查看缓存列表,git stash pop用于恢复最近一次暂存,并删除暂存,如图通过恢复暂存的方式拿到flag。
T3 Git-Index
- index(索引)也代表git的暂存区,为二进制文件,记录文件git add情况,状态信息等,GitHack工具会自动处理并重建仓库,index文件被自动恢复至工作区,故执行
ls直接获得flag
T4 SVN
- SVN是一个开放源代码的版本控制系统,与git不同是,git存在本地仓库,本地仓库包含完整版本信息,svn则是提交时与服务器直接相连,本题是由于.svn文件夹未删除导致信息泄露,先根据指引下载dvcs-ripper工具,这是一个用Perl编写的渗透测试工具集,专门用于从存在版本控制系统泄露的网站上提取源码。

- 先执行
sudo cpan DBD::SQLite用于让 Perl 程序通过DBI接口连接和操作SQLite 数据库,按照如下操作使用工具,通过 .svn/pristine/ 下载所有历史版本的文件内容,查看文件获得flag。
T5 HG
- 下一个是.hg泄露,Mercurial和Git都是分布式版本控制系统,在Mercurial中,提交前没有索引或暂存区,相对Git更简单,一样可以使用刚才的工具,按照如下步骤操作,打开store文件夹。

- 在fncache中,存放的是经过编码处理的长文件名映射表,说明仓库中包含一个如下名的flag(去掉.i),但是根据题目提示由于不同版本问题,使用cat获取flag内容无效,让我们手动尝试,在url中拼接flag的文件名,成功获取flag。

CTFHUB-skilltree-Git/SVN/HG泄露解题记录
http://124.70.202.140/posts/post-20/20/ 部分信息可能已经过时







