WFUZZ(爆破谁就FUZZ谁)
wfuzz占位符 https://www.baidu.com/FUZZ
使用字典: wfuzz -w 字典路径(绝对路径) URL/FUZZ
wfuzz -w 目录字典路径 -w 文件名字典路径 -w 后缀名字典路径 URL/FUZZ/FUZ2Z.FUZ3Z
隐藏响应结果:
1.–hc 根据响应报文状态码进行隐藏(hide code)
2.–hl根据响应报文行数进行隐藏(hide lines)
3.–hw根据响应报文字数进行隐藏(hide word)
4.–hh根据响应报文字符数进行隐藏(hide chars 这里因为code和chars首字母都是c,–hc参数已经有了,所以hide chars的参数就变成了–hh)
显示响应结果:
–sc(show code),–sl(show lines),–sw(show word),–sh (show chars)
使用Baseline(基准线)
wfuzz -w wordlist –hh BBB https://www.baidu.com/FUZZ{404there}
https://www.baidu.com/FUZZ{404there}的意思,这里代表wfuzz第一个请求是请求https://www.baidu.com/404there这个网址,在{ }内的值用来指定wfuzz第一个请求中的FUZZ占位符,而这第一个请求被标记为BBB(BBB不能换成别的)基准线;其次这里使用的参数是–hh,也就是以BBB这条请求中的Chars为基准,其他请求的Chars值与BBB相同则隐藏。
使用正则表达式过滤
wfuzz参数–ss和–hs可以使用正则表达式来对返回的结果过滤
wfuzz -w wordlist –hs “Not Found” http://127.0.0.1/FUZZ 过滤掉返回页面中有not found的
wfuzz -w wordlist –hs 正则表达式 URL/FUZZ #隐藏
wfuzz -w wordlist –ss 正则表达式 URL/FUZZ #显示
wfuzz中文命令帮助
1 | Usage: wfuzz [options] -z payload,params <url> |
遍历枚举参数值
遍历id:wfuzz -z range,000-999 http://127.0.0.1/getuser.php?uid=FUZZ 使用range模块
POST请求测试
请求地址为:http://127.0.0.1/login.php POST请求正文为:username=&password=
爆破用户账户:wfuzz -w userlist -w passlist -d “username=FUZZ&password=FUZ2Z” http://127.0.0.1/login.php (-d传递post参数)
Cookie测试
1 | wfuzz -z range,000-999 -b session=session -b cookie=cookie http://127.0.0.1/getuser.php?uid=FUZZ |
-b 参数指定Cookie,多个Cookie需要指定多次,也可以对Cookie进行测试,仍然使用FUZZ占位符即可
HTTP Headers测试
需要伪造XFF头(IP)可达到刷票的效果,投票的请求为GET类型,地址为:http://127.0.0.1/get.php?userid=666。给userid为666的朋友刷票
1 | wfuzz -z range,0000-9999 -H "X-Forwarded-For: FUZZ" http://127.0.0.1/get.php?userid=666 |
-H 指定HTTP头,多个需要指定多次(同Cookie的-b参数)
测试HTTP请求方法(Method)
想测试一个网站(http://127.0.0.1/)支持哪些HTTP请求方法
1 | wfuzz -z list,"GET-POST-HEAD-PUT" -X FUZZ http://127.0.0.1/ |
这条命了中多了 -z list 和 -X 参数, -z list 可以自定义一个字典列表(在命令中体现),以 - 分割; -X 参数是指定HTTP请求方法类型,因为这里要测试HTTP请求方法,后面的值为FUZZ占位符
使用代理
1 | wfuzz -w wordlist -p proxtHost:proxyPort:TYPE URL/FUZZ |
-p 参数指定主机:端口:代理类型,例如我想使用ssr的,可以使用如下命令
1 | wfuzz -w wordlist -p 127.0.0.1:1087:SOCKS5 URL/FUZZ |
多个代理可使用多个 -p 参数同时指定,wfuzz每次请求都会选取不同的代理进行
认证
想要测试一个需要HTTP Basic Auth保护的内容可使用如下命令:
1 | wfuzz -z list,"username-password" --basic FUZZ:FUZZ URL |
wfuzz可以通过--basec --ntml --digest来设置认证头,使用方法都一样:
1 | --basec/ntml/digest username:password |
递归测试
使用-R参数可以指定一个payload被递归的深度(数字)。例如:爆破目录时,我们想使用相同的payload对已发现的目录进行测试,可以使用如下命令:
1 | wfuzz -z list,"admin-login.php-test-dorabox" -R 1 http://127.0.0.1/FUZZ |
递归深度为1也就是说当发现某一个目录存在的时候,在存在目录下再递归一次字典(深入爆破目录)
并发和间隔
wfuzz提供了一些参数可以用来调节HTTP请求的线程
e.g. 你想测试一个网站的转账请求是否存在HTTP并发漏洞(条件竞争)
请求地址:http://127.0.0.1/dorabox/race_condition/pay.php
POST请求正文:money=1
使用如下命令:
1 | wfuzz -z range,0-20 -t 20 -d "money=1" http://127.0.0.1/dorabox/race_condition/pay.php?FUZZ |
测试并发要控制请求次数,在这里为使用range模块生成0-20,然后将FUZZ占位符放在URL的参数后不影响测试即可,主要是用-t参数设置并发请求,该参数默认设置都是10。
另外使用-s参数可以调节每次发送HTTP的时间间隔。
保存测试结果
wfuzz通过printers模块来将结果以不同格式保存到文档中,一共有如下几种格式:
1 | raw | `Raw` output format |
将结果以json格式输出到文件的命令如下:
1 | $ wfuzz -f outfile,json -w wordlist URL/FUZZ |
使用-f参数,指定值的格式为输出文件位置,输出格式