史上最详[ZI]细[DUO]的wfuzz中文教程(二)——wfuzz 基本用法
时间:2018-02-28
内容目录:
- wfuzz 基本用法
- 暴破文件和路径
- 测试URL中的参数
- 测试POST请求
- 测试Cookies
- 测试自定义请求头
- 测试HTTP请求方法(动词)
- 使用代理
- 认证
- 递归测试
- 测试速度与效率
- 输出到文件
- 不同的输出
wfuzz 基本用法
暴破文件和路径
wfuzz可以用来查找一个web server中的隐藏的文件和路径,来扩大攻击面。值得注意的是,这种测试的成功与否很大程度上要依赖于使用的字典。
但是,一个web server的平台是有限的,还有一些是默认安装,再加上一些已知的资源比如日志文件,管理路径等等,我们还是可以在猜测到发现很多东西。因此,暴破文件的路径还是可行的。
wfuzz自带一些字典文件,更多的字典可以参考下面两个开放的git:
使用wfuzz暴力猜测目录的命令如下:$ wfuzz -w /usr/share/wfuzz/wordlist/general/common.txt http://testphp.vulnweb.com/FUZZ
使用wfuzz暴力猜测文件的命令如下:$ wfuzz -w /usr/share/wfuzz/wordlist/general/common.txt http://testphp.vulnweb.com/FUZZ.php
测试URL中的参数
通过在URL中在?
后面设置FUZZ占位符,我们就可以使用wfuzz来测试URL传入的参数:$ wfuzz -z range,0-10 --hl 97 http://testphp.vulnweb.com/listproducts.php?cat=FUZZ
测试POST请求
如果想使用wfuzz测试form-encoded
的数据,比如 HTML表单那样的,只需要传入-d
参数即可:
┌─[michael@parrot]─[/usr/share/wfuzz/wordlist]
└──╼ $wfuzz -z file,/usr/share/wfuzz/wordlist/others/common_pass.txt -d "uname=FUZZ cookie2=value2
User-Agent: Wfuzz/2.2
Connection: close
测试cookie字段的话,可以使用下面的命令:$ wfuzz -z file,/usr/share/wfuzz/wordlist/general/common.txt -b cookie=FUZZ http://testphp.vulnweb.com/
测试自定义请求头
使用-H
参数来指定HTTP请求的请求头,多次指定多次使用。$ wfuzz -z file,/usr/share/wfuzz/wordlist/general/common.txt -H "myheader: headervalue" -H "myheader2: headervalue2" http://testphp.vulnweb.com/FUZZ
生成的HTTP请求如下:
GET /agent HTTP/1.1
Host: testphp.vulnweb.com
Accept: */*
Myheader2: headervalue2
Myheader: headervalue
Content-Type: application/x-www-form-urlencoded
User-Agent: Wfuzz/2.2
Connection: close
我们还可以修改存在的请求头,比如修改User-Agent头:$ wfuzz -z file,/usr/share/wfuzz/wordlist/general/common.txt -H "myheader: headervalue" -H "User-Agent: Googlebot-News" http://testphp.vulnweb.com/FUZZ
生成的HTTP请求如下:
GET /asp HTTP/1.1
Host: testphp.vulnweb.com
Accept: */*
Myheader: headervalue
Content-Type: application/x-www-form-urlencoded
User-Agent: Googlebot-News
Connection: close
Headers也可以被测试:wfuzz -z file,/usr/share/wfuzz/wordlist/general/common.txt -H "User-Agent: FUZZ" http://testphp.vulnweb.com/
测试HTTP请求方法(动词)
HTTP请求方法的测试可通过指定-X
参数指定:
┌─[michael@parrot]─[/usr/share/wfuzz/wordlist]
└──╼ $wfuzz -z list,GET-HEAD-POST-TRACE-OPTIONS -X FUZZ http://testphp.vulnweb.com/
********************************************************
* Wfuzz 2.2.9 - The Web Fuzzer *
********************************************************
Target: http://testphp.vulnweb.com/
Total requests: 5
==================================================================
ID Response Lines Word Chars Request
==================================================================
00002: C=200 0 L 0 W 0 Ch "HEAD"
00004: C=405 7 L 12 W 172 Ch "TRACE"
00005: C=405 7 L 12 W 172 Ch "OPTIONS"
00001: C=200 104 L 296 W 4096 Ch "GET"
00003: C=200 104 L 296 W 4096 Ch "POST"
Total time: 1.030354
Processed Requests: 5
Filtered Requests: 0
Requests/sec.: 4.852696
如果在测试时要指定请求使用的HTTP方法(动词),同样可以使用-X
参数指定。相当于御剑中的GET/HEAD。HEAD方法要快一些。
使用代理
如果在测试时想要使用代理的话,只需要传入-p
参数即可:$ wfuzz -z file,/usr/share/wfuzz/wordlist/general/common.txt -p localhost:8080 http://testphp.vulnweb.com/FUZZ
【不支持外链图片,请上传图片或单独粘贴图片】
多个代理可使用多个-p
参数同时指定:$ wfuzz -z file,/usr/share/wfuzz/wordlist/general/common.txt -p localhost:8080 -p localhost:9090 http://testphp.vulnweb.com/FUZZ
这样每次请求都会选取不同的代理进行。
认证
wfuzz可以通过--basec/ntml/digest
来设置认证头。
例如,想要测试一个需要HTTP Basic Auth保护的内容可使用如下命令:
┌─[michael@parrot]─[/usr/share/wfuzz/wordlist]
└──╼ $wfuzz -z list,nonvalid-httpwatch --basic FUZZ:FUZZ https://www.httpwatch.com/httpgallery/authentication/authenticatedimage/default.aspx
********************************************************
* Wfuzz 2.2.9 - The Web Fuzzer *
********************************************************
Target: https://www.httpwatch.com/httpgallery/authentication/authenticatedimage/default.aspx
Total requests: 2
==================================================================
ID Response Lines Word Chars Payload
==================================================================
000001: C=401 0 L 11 W 58 Ch "nonvalid"
000002: C=200 20 L 91 W 5294 Ch "httpwatch"
Total time: 1.332051
Processed Requests: 2
Filtered Requests: 0
Requests/sec.: 1.501443
想测试经过认证之后的资源,我们可以通过指定--basic user:pass
的方式来测试。
递归测试
使用-R
参数可以指定一个payload被递归的深度。例如,暴破目录时,我们想使用相同的payload对已发现的目录进行测试,可以使用如下命令:
┌─[michael@parrot]─[/usr/share/wfuzz/wordlist]
└──╼ $wfuzz -z list,"admin-CVS-cgi\-bin" -R 1 http://testphp.vulnweb.com/FUZZ
********************************************************
* Wfuzz 2.2.9 - The Web Fuzzer *
********************************************************
Target: http://testphp.vulnweb.com/FUZZ
Total requests: 3
==================================================================
ID Response Lines Word Chars Payload
==================================================================
000002: C=301 7 L 12 W 184 Ch "CVS"
|_ Enqueued response for recursion (level=1)
000001: C=301 7 L 12 W 184 Ch "admin"
|_ Enqueued response for recursion (level=1)
000003: C=403 10 L 29 W 263 Ch "cgi-bin"
000005: C=404 7 L 12 W 168 Ch "CVS - CVS"
000006: C=404 7 L 12 W 168 Ch "CVS - cgi-bin"
000004: C=404 7 L 12 W 168 Ch "CVS - admin"
000007: C=404 7 L 12 W 168 Ch "admin - admin"
000008: C=404 7 L 12 W 168 Ch "admin - CVS"
000009: C=404 7 L 12 W 168 Ch "admin - cgi-bin"
Total time: 1.584295
Processed Requests: 9
Filtered Requests: 0
Requests/sec.: 5.680760
测试速度与效率
根据对目标的影响和自身的承受能力及带宽,wfuzz提供了一些参数可以用来调节HTTP请求引擎。
使用-t
参数可以增加或减少同时发送HTTP请求的数量。
使用-s
参数可以调节每次发送HTTP的时间间隔。
输出到文件
wfuzz通过printers
插件来将结果以不同格式保存到文档中,可用的printers
参考上面的重要关键词
。
将结果以json
格式输出到文件的命令如下:$ wfuzz -f /tmp/outfile,json -w /usr/share/wfuzz/wordlist/general/common.txt http://testphp.vulnweb.com/FUZZ