Web Fuzz的艺术
web fuzz的意义,以及我为什么要开发fastfuzz的初衷。
漏洞扫描器的弊端——不可知的黑箱状态
当前的渗透测试工程师们普遍愿意挂一个漏洞扫描工具,比如Xray或者是Wapiti去扫描漏洞,这能够快速地帮助安全人员们去识别和发现漏洞。
毫无疑问的,这可以帮助我们快速的进行资产评估和简单漏洞挖掘,很多人做基础安全检查就是使用nuclei快速覆盖高危漏洞,精细化的扫描器去探测一遍有没有明显的owasp top 10,然后就放手了。
可是扫描器真的每个接口都测试了吗?它的payload覆盖全了吗?你不知道,我也不知道,不是吗?什么是Fuzz:向 Web 请求的各个位置批量发送正常、边界、畸形、随机或变异后的数据,观察服务器响应差异,从中发现潜在漏洞或异常行为。
所以这就是Web Fuzz的意义。让数据真的由人来操控。
在国外的安全圈里面,Web Fuzz的技术是很火的
国外有很多web fuzz工具,比如经典的wfuzz,外国佬常用的ffuf,以及更友好的gobuster。
但是这些工具有一个共同的问题,他们不支持中文对国内用户并不友好,可视化效果也差,不能帮人看清具体是不是成功了,另外对动态页面的支持不好。所以我开发了fastfuzz这款网络安全web fuzz工具。
他对人类更友好,对国内语言环境也更友好。
但是首先,我们要使用gospider或者是katana这种爬虫去拿到相关的uri和接口,然后快速使用正则表达式过滤传参点(get的)
然后用正则表达式做成fuzz的模板
这些带有FUZZ模板的url就可以帮助我们来进行快速的初步FUZZ,我们可以先用国外的工具ffuf来看:
或者是gobuster:
因为本身就是英文,所以看起来也没有中文舒服,看着还乱,要自己一个一个核对。
这是,人类友好,中文友好的fastfuzz就有了用武之地(项目地址:https://github.com/guaidao2/fastfuzz)。
这个工具由golang编写,所以我们可以很轻松的将单一二进制放在Kali Linux的/usr/local/bin目录下,然后就可以直接调用了,我们在里面内置了好几个字典:
首先fuzz有一个很大的问题,页面是动态的怎么办?fastfuzz 与其它工具最本质的区别就是可以智能识别:
首先原生中文就是一大特色:
可以通过--table参数获得优雅的视图:
还可以通过-e参数编码解码,--reflect detect来找反射型的漏洞,比如反射型xss
那么说回这里,这和扫描器到底有什么不同?
这个的每一个payload都是你控制的,举个例子,wapiti的爬虫有没有gospider和katana的全,参数有arjun他们fuzz的全吗?它也不能像fuzz工具那样自己知道每个payload究竟有没有反应。我们可以通过每个payload的参数,去分析waf的规则,而且也更轻松就能拿到真实的信息。
这就是fuzz的艺术,可以穿透黑箱状态,直取核心。
这样每个接口和参数都去进行手工fuzz,我们就可以拿到更真实的waf防御地图和更真实的每个回显到底有没有可能有漏洞。