1.信息搜集
信息搜集可以从敏感目录、敏感备份文件、Banner识别三方面着手搜集。
1.1 敏感目录
-
git泄露
git是主流的分布式版本控制系统,开发人员经常会遗忘.git文件夹,导致攻击者可以通过.git文件夹中的信息获取开发人员提交过的所有源码,进而可能导致服务器被攻击而沦陷。
(1)常规git泄露
没有任何其他aw操作,参赛者通过运用县城的工具或自己编写的脚本即可获取网站源码或者flag
这里使用个书中介绍的工具scrable:
这里页面中的已经给出题目的标题,这里可以直接使用scrabble获取.git文件夹中上传的源文件
可以看到<p>n1book{git_look_s0_easyfun}</p>
(2)git回滚
git作为一个版本控制工具,会记录每次提交(commit)的修改,所以文件可能在修改中被删除或被覆盖了,这时可以利用git的"git reset"命令来恢复到以前的版本。
这里flag.php是以前的版本通过修改它原本的内容此刻变成了 "flag is old"然后上传。
利用scrabble工具获取到源码,再通过 “git reset --hard HEAD^”命令跳回到以前的版本。
除了"git reset",还能用更简单的方式通过"git log -stat"命令查看每个commit修改了那些文件,再用"git diff HEAD commit-id"比较当前版本与想查看的commit之间的变化。
(3)git分支
每次提交,git都会自动把它们串成一条时间线,一条时间线就是一个分支。git允许多个分支。
git默认为master分支,因此,如果要找的flag或敏感文件可能不会藏在当前分支之中,这时使用"git log"命令只能找到在当前分支上的修改。
这时就需要工具的帮助了,这里市面上能获取到分支的工具很少,懒得找的话就得自己写,书上推荐的工具是王一航大佬的GitHacker工具.
只需要使用 "GitHacker http://ip/.git"或者"git branch -v"命令,会在本地生成文件夹,进入文件夹执行"git log --all"或者"git branch -v"命令,只能看到master分支的信息。如果执行”git reflog“命令,就可以看到一些git回显的checkout的记录
(4)git泄露的其他利用
除了查看源码的常见利用方式,泄露的git中也可能有其他有用的信息,如.git/config文件夹中可能含有access_token信息,从而可以访问这个用户的其他仓库。
- SVN泄露
SVN(subversion)是源码版本管理软件,造成SVN源码漏洞的主要原因是管理员操作不规范将SVN隐藏文件夹暴露于外网环境,可以利用.svn/entries或wc.db文件获取服务器源码等信息。
- HG泄露
在初始化项目时,HG会在当前文件夹下创建一个.hg隐藏文件夹,其中包含代码和分支修改记录等信息。
4. 总结经验
不论是.git这些隐藏文件,还是实战中的admin之类的敏感后台文件夹,其关键在于字典的强大,读者可以在某些工具的基础上进行二次开发,以满足自己需要。这里书中推荐一个开源的目录扫描工具: https://github.com/maurosoria/dirsearch
ctf线上比赛往往会有重定向一类问题。例如,只要访问.git,便会返回403,此时试探着访问.git/config,如果有文件内容返回,就说明存在git泄露,反之,一般不存在。而SVN泄露中,一般时在entries中爬取源代码,但有时 会出现entries为空的情况,这时注意wc.db文件存在与否,便可通过其中的checksum在pristine文件夹中获取源代码。
1.2敏感文件备份
1.gedit备份文件
在LINUX下,用gedit编辑器保存后,会生成一个"~"的文件例如: flag~
2.vim备份文件
当意外退出时会在当前目录下生成一个".文件名.swp"的文件针对SWP备份文件,可以用"vim -r"命令恢复文件的内容。
3.常规文件
- robots.txt:记录一些目录和CMS版本信息。
- readme.md:记录CMS版本信息,有的甚至是GitHub地址。
- www.zip/rar/tar.gz:往往是网站源码备份。
4.经验总结
出题人有时会因为各种情况导致SWP备份文件的生成,所以读者在比赛过程中可以编写实时监控叫不能,对题目服务进行监控。
vim在第一次意外退出时生成的备份文件为 *.swp,第二次意外退出时的为*.swo,第三次退出时的为*.swn。以此类推。
另外,在实际环境中,网站的备份往往可能时网站域名的压缩包。
1.3 Banner识别
Banner信息(服务器对外显示的一些基础信息)对解题有着十分重要的作用,选手往往可以通过Banner信息来获的解题思路。
如,得知网站使用ThinkPHP的Web框架编写时,那么测试上传漏洞时可以根据windows 的特性进行尝试。
1. 自行搜集指纹库
GitHub上有大量成型且公开的CMS指纹库,读者可以自行查找,同时可以简介一些成型扫描器对网站进行识别。
2. 使用已有工具
我们可以利用Wappalyzer工具
3.总结经验
在进行服务器的Banner信息探测时,除了通过上述两种常见的识别方式,我们还可以尝试随意输入一些URL,有时可以通过4-4页面和302跳转页面发现一些信息。例如,开启了debug选项的ThinkPHP网站会在一些错误页面显示ThinkPHP的版本。
总结
针对windows服务器,大概率意味着我们去寻找找CMS在其上的一些漏洞。
在不知道密码和无法充值的七年工况下,通过CMS网站本身的特性,结合目录遍历来实现最后的RCE(Remote Command/Code Execute, 远程命令/代码执行)。