2021-07-07 CTFer成长之路-信息收集-敏感目录泄露

举报
愚公搬代码 发表于 2021/10/19 22:40:59 2021/10/19
【摘要】 一:敏感目录泄露 通过敏感目录泄露,我们往往能获取网站的源代码和敏感的URL地址,如网站的后台地址等。 1. git泄露 [漏洞简介]git是一个主流的分布式版本控制系统,开发人员在开发过程中经常会...

一:敏感目录泄露

通过敏感目录泄露,我们往往能获取网站的源代码和敏感的URL地址,如网站的后台地址等。

1. git泄露

[漏洞简介]git是一个主流的分布式版本控制系统,开发人员在开发过程中经常会遗忘.git文件夹,
导致攻击者可以通过.git文件夹中的信息获取开发人员提交过的所有源码,进而可能导致服务器被攻
击而沦陷。
(1)常规git泄露
常规git泄露:即没有任何其他操作,参赛者通过运用现成的工具或自己编写的脚本即可获取网站源码
或者flag。这里推荐一个工具:https://github.com/denny0223/scrabble,使用方法也很简单:

1 ./scrabble http://127.0.0.1/git_test/
2 ls
3 cat flag.text

  
 
  • 1
  • 2
  • 3

(2) git回滚
git作为一个版本控制工具,会记录每次提交(commit)的修改,
所以当题目存在git泄露时,flag
(敏感)文件可能在修改中被删除或被覆盖了,这时我们可以利用git的“git reset’命令来恢复到
以前的版本。

1 ./scrabble http://127.0.0.1/git_test/
2 ls
3 cat flag.text
4 get reset --hard HEAD^
5 cat flag.text

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

如果是跳转到固定版本

1 ./scrabble http://127.0.0.1/git_test/
2 ls
3 cat flag.text
4 get log -stat
5 get diff-HEAD commit-id
6 cat flag.text

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

(3) git分支
在每次提交时,git都会自动把它们串成一条时间线,这条时间线就是一个分支。而git允许使用多个分支,从而让用户可以把工作从开发主线上分离出来,以免影响开发主线。如果没有新建分支,那么只有一条时间线,即只有一个分支,git中默认为master分支。因此,我们要找的flag或敏感文件可能不会藏在当前分支中,这时使用“git log"命令只能找到在当前分支上的修改,并不能看到我们想 要的信息,因此需要切换分支来找到想要的文件。现在大多数现成的git世露工具都不支持分支,如果需要还原其他分支的代码,往往需要手工进行文件的提取,这里以功能较强的GitHacker(https://github.com/WangYihang/GitHacker)工具为例。GitHacker的使用十分简单,只需执行命令“

python GitHacker.py http://127.0.0.1:8000/.git/

  
 
  • 1

运行后,我们会在本地看到生成的文件夹,进入后执行“git log--all”或"git branch-v"命令,只能看到master分支的信息。如果执行“git reflog”命令,就可以看到一些checkout的记录除了master还有一个secret分支,但自动化工具只还原了master分支的信息,因此需要手动下载secret分支的head信息,保存到.git/refs/heads/secret中(执行命令“wgethttp://127.0.0.1:8000/.git/refs/heads/secret”)。恢复head信息后,我们可以复用GitHacker的部分代码,以实现自动恢复分支的效果。在GitHacker的代码中可以看到,他是先下载object文件,再使用git fsck检测,并继续下载缺失的文件。此处可以直接复用检测缺失文件并恢复的fixmissing函数。我们注释掉程序最后调用main的部分,修改为如下代码:在这里插入图片描述
修改后重新执行“python GitHacker.py”命令,运行该脚本,再次进入生成的文件夹,执行“git log--all”或“git branch-v”命令,则secret分支的信息就可以恢复了,从git log中找到对应提交的hash,执行“git diff HEAD b94c”(b94c为hash的前4位)命令,即可得到flag
(4)git泄露的
其他利用除了查看源码的常见利用方式,泄露的git中也可能有其他有用的信息,如.git/config文件夹中可能含有access_token信息,从而可以访问这个用户的其他仓库。

2.SVN泄露

SVN(subversion)是源代码版本管理软件,造成SVN源代码漏洞的主要原因是管理员操作不规范将SVN隐藏文件夹暴露于外网环境,可以利用.svn/entries或wc.db文件获取服务器源码等信息。这里推荐两个工具:https://github.com/kost/dvcs-ripper,Seay-svn(Windows下的源代码备份漏洞利用工具)。

3.HG泄露

在初始化项目时,HG会在当前文件夹下创建一个.hg隐藏文件夹,其中包含代码和分支修改记录等信息。这里推荐工具:https://github.com/kost/dvcs-ripper

4.总结经验

不论是.git这些隐藏文件,还是实战中的admin之类的敏感后台文件夹,其关键在于字典的强大,读者可以在某些工具的基础上进行二次开发,以满足自己需要。这里推荐一个开源的目录扫描工具:https://github.com/maurosoria/dirsearch。CTF线上比赛往往会有重定向一类问题。例如,只要访问.git,便会返回403,此时试探着访问.git/config,如果有文件内容返回,就说明存在git泄露,反之,一般不存在。而在SVN泄露中,一般是在entries中爬取源代码,但有时会出现entries为空的情况,这时注意wc.db文件存在与否,便可通过其中的checksum在pristine文件夹中获取源代码。

文章来源: codeboy.blog.csdn.net,作者:愚公搬代码,版权归原作者所有,如需转载,请联系作者。

原文链接:codeboy.blog.csdn.net/article/details/118540011

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。