目录/文件fuzz是渗透测试中的重要部分,各SRC中因为.svn/.git
文件泄露源码而被攻破的案例很常见,同时也是CTF中经常出现的需求。
> “据我长期观察,50%的CTF题目打开都是一个登陆页面,而其中又有60%的可以用各种方式拿到源码。” ——P神
用过的一些相关工具
字典复用是枚举类工具的一个特性,把存在变化的字段(如文件后缀名)交给用户来指定,为爆破节约了工作量。
如:字典里写的是
index.[EXT]
如果用户输入的extension是-e php,jsp,asp
,那么[EXT]
部分最终会被替换为以下三种情况。
index.php
index.jsp
index.asp
当工具爆破出/admin/
目录时,应当以该目录为起点继续向下探测二级目录,dirsearch已经实现了这个功能,不过二级目录的字典没必要向一级目录那样仔细,有待改进。
一些网站定制了404页面,当用户访问不存在的URL时仍然会返回200,此时我们的fuzz工具会产生大量误报,应提供解决方案。
如过滤HTTP响应码、定制HTTP请求、代理、处理重定向、结果的后续操作等框架类功能,可参考这个工具。
之前遇到的问题之前用上述枚举类工具都能解决,直到前些天的ZCTF的第一道WEB题。
那个突破口是fuzz到这个文件:
.index.php.swp
这个是vim编辑器在非正常退出时产生的临时文件,当时用上述工具均未跑出结果。
这个问题如果字典够好是可以跑出来的,但以下情况就是枚举类工具难以胜任的了:
.zctf.php.swp
zctf.php.bak
还有,我在更改配置文件之后也会习惯性的在旧文件的结尾加一个下划线作备份。
xxx.conf_
这种情况下基于字典枚举的fuzz工具是无法猜到zctf
这种特征性很强的路径的,而爬虫可以。
当爬虫爬取到[
](zctf.php)时,基于这个已知信息来构造探测向量,即可完成该任务。
zctf.php.bak
zctf.php.old
.zctf.php.swp
zctf.php~
...
这种对文件的动态fuzz方法在猪猪侠前辈的工具里已有体现
针对这个需求我简单写了个动态fuzz工具。
基于Scrapy构建,全部请求由scrapy.Request
完成,保证了并发的稳定性,同时HTTP请求细节可通过scrapy的项目配置文件直接定制,省了不少代码量。此外还可操控请求速度等细节,毕竟Scrapy配置在。
思路就是通过爬虫获取资源,在其基础上根据字典生成探测向量。
用户输入localhost -> 爬虫发现localhost/test.php -> 探测localhost/test.php.bak
枚举工具无法发现含有特征的文件,爬虫工具无法探测未知情况,利用扫描器可将二者的优点结合起来。
在扫描器中针对每个爬取的链接调用一个简单的爆破模块,如爬取到http://xxx.com/zctf/
,交给爆破模块跑出/zctf/config.php
,再针对config.php
生成config.php~
进行探测。