本文已在丁牛网安实验室FreeBuf专栏DigApis安全中首发!引用转发请注明 “原文来自:DigApis安全 m0nst3r”字样,谢谢!
wfuzz教程
这个教程主要内容是来自wfuzz官方文档。之所以写这个,是因为大多数的国内文章并没有对这个工具进行详细的说明。个人英文还算可以,所以抖胆翻译一下,加上自己的一些操作,一方面加深下自己对这个工具的熟练程度,另一方面方便广大初学者学习。
感觉这个工具比平时使用的御剑灵活很多(如果参数都弄明白的话),总之,作为渗透测试信息收集的一个环节,它还是有用武之地的。
这个教程本来想弄一篇文章,但是实在是太多了,所以借鉴了一下官方文档的分节,把这个教程做成了一个系列,一共四个部分,分别是:
初识wfuzz:看完这个,你应该可以使用比较简单的命令来做一些任务了。
wfuzz 基本用法:看完这个的话,你应该可以从容使用wfuzz来做一些常用扫描器做不了的活,而且觉得wfuzz是个好东西。
wfuzz 高级用法:看完这个,你应该就可以玩弄wfuzz于手掌之中,各种小姿势让你在别人扫不成的时候装装X。
wfuzz 库:看完这个,不,能去仔细学习这个的同学,我就不说了,此类人圈内统称”大婊哥“,小弟在这只是抛砖引玉了。
简介
wfuzz 是一款Python开发的Web安全测试工具
wfuzz不仅仅是一个web扫描器:
wfuzz能够通过发现并利用网站弱点/漏洞的方式帮助你使网站更加安全。wfuzz的漏洞扫描功能由插件支持。
wfuzz是一个完全模块化的框架,这使得即使是Python初学者也能够进行开发和贡献代码。开发一个wfuzz插件是一件非常简单的事,通常只需几分钟。
wfuzz提供了简洁的编程语言接口来处理wfuzz或Burpsuite获取到的HTTP请求和响应。这使得你能够在一个良好的上下文环境中进行手工测试或半自动化的测试,而不需要依赖web形式的扫描器。
初识wfuzz
最简单命令
一个典型的wfuzz命令只需要指定一个字典和一个要测试的URL即可,如下:
wfuzz的输出使我们能够分析web server的响应,还可根据获得的HTTP响应信息过滤出我们想要的结果,比如过滤响应码/响应长度等等。
每一行输出给我们提供了以下信息:
ID:测试时的请求序号
Response:HTTP响应吗
Lines:响应信息中的行数
Word:响应信息中的字数
Chars:响应信息中的字符数
Payload:当前使用的payload
获取帮助信息
使用和参数来获取基本帮助信息和详细帮助信息。
wfuzz是一个完全模块化的模式,你可以使用参数查看其中可用的模块,例如:
可用的categories包括:,,,和。
Payloads
wfuzz基于一个非常简单的概念:它用一个给定的payload来替换相应的FUZZ关键词的值,我们称FUZZ这样的关键词为,这样更容易理解。一个wfuzz中的payload就是一个输入的源。
要想得到所有可用的payload列表,可以执行如下命令:
关于payloads的更详细的信息可以通过以下命令获取:
上面这个命令还可以使用参数来对输出结果进行过滤:
指定一个payload
每个FUZZ占位符都必须为它指定相应的payload。指定一个payload时有几种方法:
命令比较长的方式是显式的定义payload的参数:
另一个不太长的方式是只提供payload所需的默认参数:
最后,短的方式是使用别名:
这个payload可以在使用一些外部字典生成工具时很方便:
使用多个payloads
使用 或 参数可以同时指定多个payloads,这时相应的占位符应设置为 FUZZ, … , FUZnZ, 其中代表了payload的序号。比如下面的例子,我们同时暴破文件,后缀和目录:
过滤器
对wfuzz的结果时行过滤是非常重要的:
非常大的字典文件可以生成非常庞大的输出,并且把我们想要的结果淹没
对HTTP响应的一些分类在实际攻击时是非常重要的,例如,为了查检一个SQLi的漏洞是否存在,我们必须能够将合理的响应和错误/不同的响应区分开。
wfuzz可根据HTTP响应码和收到的响应的长度(字数,字符数或行数)来过滤。还可以用正则表达式。
过滤的方法有两种:隐藏或显示符合过滤条件的结果。
隐藏响应结果
通过,,,参数可以隐藏某些HTTP响应。
隐藏无法找到的页面的响应如下:
可指定多个需要隐藏的条件,如,想要加上隐藏禁止访问的响应:
用行数,字数,字符数来指定过滤规则,在当HTTP返回码相同的时候比较方便。比如,网站一般会指定一个自定义的错误页面,返回码是200,但实际上起到了一个404页面的作用,我们称之为软404。
下面是一个例子:
仔细观察上面的结果,我们很容易推断出所有”not found”的返回信息中都有 51个行,138个字,962个字符。因此,我们需要改进一下我们的过滤条件(增加多个过滤条件):
显示响应结果
显示响应结果的使用方法跟隐藏时的原理一样,只不过参数变为了:,,,。
使用Baseline
习惯上称Baseline为”基准线“。过滤器可以是某个HTTP响应的引用,这样的引用我们称为Baseline。
之前的使用进行过滤的例子中,还可以使用下面的命令代替:
这里,来指定HTTP请求时用来替换的值,其响应将被标记为,并用于过滤条件中。
使用正则表达式过滤
在命令行中,参数和可以接受正则表达式来对返回的结果时行过滤。
详细例子请参考http://edge-security.blogspot.co.uk/2014/10/scan-for-shellshock-with-wfuzz.html
重要关键词
payload
payload为wfuzz生成的用于测试的特定字符串,一般情况下,会替代被测试URL中的FUZZ占位符。
当前版本中的wfuzz中可用payloads列表如下:
encoder
encoder的作用是将payload进行编码或加密。
wfuzz的encoder列表如下:
iterator
wfuzz的iterator提供了针对多个payload的处理方式。
itorators的列表如下:
printer
wfuzz的printers用于控制输出打印。
printers列表如下:
scripts
暂时不知道怎么使用
scripts列表如下:
内置工具
wfencode 工具
这是wfuzz自带的一个加密/解密(编码/反编码)工具,目前支持内建的encoders的加/解密。
wfpayload工具
wfpayload是payload生成工具
wxfuzz 工具
这个看源码是一个wxPython化的wfuzz,也就是GUI图形界面的wfuzz。目前需要wxPython最新版本才能使用,但是在ParrotOS和Kali上都无法正常安装成功,问题已在GitHub提交Issue,期待开发者的回复中…
wfuzz命令中文帮助
这是wfuzz的主工具,我们平时使用的时候就是用这个。
先来看看帮助文档:
领取专属 10元无门槛券
私享最新 技术干货