H0e4a0r1t的小屋

WFUZZ

字数统计: 2.2k阅读时长: 9 min
2019/05/05 Share

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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
Usage:    wfuzz [options] -z payload,params <url>
FUZZ, ..., FUZnZ payload占位符,wfuzz会用指定的payload代替相应的占位符,n代表数字.
FUZZ{baseline_value} FUZZ 会被 baseline_value替换,并将此作为测试过程中第一个请求来测试,可用来作为过滤的一个基础。
Options:
-h/--help : 帮助文档
--help : 高级帮助文档
--version : Wfuzz详细版本信息
-e <type> : 显示可用的encoders/payloads/iterators/printers/scripts列表
--recipe <filename> : 从文件中读取参数
--dump-recipe <filename> : 打印当前的参数并保存成文档
--oF <filename> : 将测试结果保存到文件,这些结果可被wfuzz payload 处理
-c : 彩色化输出
-v : 详细输出
-f filename,printer : 将结果以printer的方式保存到filename (默认为raw printer).
-o printer : 输出特定printer的输出结果
--interact : (测试功能) 如果启用,所有的按键将会被捕获,这使得你能够与程序交互
--dry-run : 打印测试结果,而并不发送HTTP请求
--prev : 打印之前的HTTP请求(仅当使用payloads来生成测试结果时使用)
-p addr : 使用代理,格式 ip:port:type. 可设置多个代理,type可取的值为SOCKS4,SOCKS5 or HTTP(默认)
-t N : 指定连接的并发数,默认为10
-s N : 指定请求的间隔时间,默认为0
-R depth : 递归路径探测,depth指定最大递归数量
-L,--follow : 跟随HTTP重定向
-Z : 扫描模式 (连接错误将被忽视).
--req-delay N : 设置发送请求允许的最大时间,默认为 90,单位为秒.
--conn-delay N : 设置连接等待的最大时间,默认为 90,单位为秒.
-A : 是 --script=default -v -c 的简写
--script= : 与 --script=default 等价
--script=<plugins> : 进行脚本扫描, <plugins> 是一个以逗号分开的插件或插件分类列表
--script-help=<plugins> : 显示脚本的帮助
--script-args n1=v1,... : 给脚本传递参数. ie. --script-args grep.regex="<A href=\"(.*?)\">"
-u url : 指定请求的URL
-m iterator : 指定一个处理payloads的迭代器 (默认为product)
-z payload : 为每一个占位符指定一个payload,格式为 name[,parameter][,encoder].
编码可以是一个列表, 如 md5-sha1. 还可以串联起来, 如. md5@sha1.
还可使用编码各类名,如 url
使用help作为payload来显示payload的详细帮助信息,还可使用--slice进行过滤
--zP <params> : 给指定的payload设置参数。必须跟在 -z 或-w 参数后面
--slice <filter> : 以指定的表达式过滤payload的信息,必须跟在-z 参数后面
-w wordlist : 指定一个wordlist文件,等同于 -z file,wordlist
-V alltype : 暴力测试所有GET/POST参数,无需指定占位符
-X method : 指定一个发送请求的HTTP方法,如HEAD或FUZZ
-b cookie : 指定请求的cookie参数,可指定多个cookie
-d postdata : 设置用于测试的POST data (ex: "id=FUZZ&catalogue=1")
-H header : 设置用于测试请求的HEADER (ex:"Cookie:id=1312321&user=FUZZ"). 可指定多个HEADER.
--basic/ntlm/digest auth : 格式为 "user:pass" or "FUZZ:FUZZ" or "domain\FUZ2Z:FUZZ"
--hc/hl/hw/hh N[,N]+ : 以指定的返回码/行数/字数/字符数作为判断条件隐藏返回结果 (用 BBB 来接收 baseline)
--sc/sl/sw/sh N[,N]+ : 以指定的返回码/行数/字数/字符数作为判断条件显示返回结果 (用 BBB 来接收 baseline)
--ss/hs regex : 显示或隐藏返回结果中符合指定正则表达式的返回结果
--filter <filter> : 显示或隐藏符合指定filter表达式的返回结果 (用 BBB 来接收 baseline)
--prefilter <filter> : 用指定的filter表达式在测试之前过滤某些测试条目

遍历枚举参数值

遍历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
2
3
4
5
raw       | `Raw` output format
json | Results in `json` format
csv | `CSV` printer ftw
magictree | Prints results in `magictree` format
html | Prints results in `html` format

将结果以json格式输出到文件的命令如下:

1
$ wfuzz -f outfile,json -w wordlist URL/FUZZ

使用-f参数,指定值的格式为输出文件位置,输出格式

CATALOG
  1. 1. WFUZZ(爆破谁就FUZZ谁)
    1. 1.1. wfuzz占位符 https://www.baidu.com/FUZZ
    2. 1.2. 隐藏响应结果:
    3. 1.3. 显示响应结果:
    4. 1.4. 使用Baseline(基准线)
    5. 1.5. 使用正则表达式过滤
    6. 1.6. wfuzz中文命令帮助
    7. 1.7. 遍历枚举参数值
    8. 1.8. POST请求测试
    9. 1.9. Cookie测试
    10. 1.10. HTTP Headers测试
    11. 1.11. 测试HTTP请求方法(Method)
    12. 1.12. 使用代理
    13. 1.13. 认证
    14. 1.14. 递归测试
    15. 1.15. 并发和间隔
    16. 1.16. 保存测试结果