Web安全 --Wfuzz 使用大全
前言: 做web渗透大多数时候bp来fuzz 偶尔会有觉得要求达不到的时候 wfuzz就很有用了这时候
用了很久了这点来整理一次

wfuzz 是一款Python开发的Web安全模糊测试工具。
下载地址
https://github.com/xmendez/wfuzz
官方手册
https://wfuzz.readthedocs.io/en/latest/
简而言之就是wfuzz可以用在做请求参数参数类的模糊测试,也可以用来做Web目录扫描等操作。
0x01 简单使用
pip install wfuzz

使用:
wfuzz -w 字典 地址
wfuzz -w qing.txt https://www.cnblogs.com/-qing-/FUZZ

使用字典:
wfuzz -z file --zP fn=wordlist https://www.cnblogs.com/-qing-/FUZZ wfuzz -z file,wordlist https://www.cnblogs.com/-qing-/FUZZ
-z file使用模块,这个模块需要一个参数fn --zP fn=wordlist是定义fn参数的值
第二条命令简写了第一条命令的赋值
-z 或-w 参数可以同时指定多个字典。
wfuzz -w 字典1 -w 字典2 -w 字典3 URL/FUZZ/FUZ2Z.FUZ3Z
通过返回结果我们要关注的就是ID、Response、 Lines、Word、Chars、Payload
编号、响应状态码、响应报文行数、响应报文字数、响应报文正字符数、Payload。
看看wfuzz一共的参数

0x02 常用参数使用
--hc,--hl,--hw,--hh参数可以隐藏某些HTTP响应。
--hc
根据响应报文状态码进行隐藏(hide code)
wfuzz -w wordlist --hc https://www.cnblogs.com/-qing-/FUZZ wfuzz -w wordlist --hc , https://www.cnblogs.com/-qing-/FUZZ
--hl
根据响应报文行数进行隐藏(hide lines)
--hw
根据响应报文字数进行隐藏(hide word)
--hh
根据响应报文字符数进行隐藏
wfuzz -w wordlist/general/common.txt --hc http://datalayer.io/FUZZ ******************************************************** * Wfuzz 2.2 - The Web Fuzzer * ******************************************************** Target: http://datalayer.io/FUZZ Total requests: ================================================================== ID Response Lines Word Chars Request ================================================================== : C= L W Ch "W3SVC3" : C= L W Ch "Log" : C= L W Ch " : C= L W Ch " : C= L W Ch " ... : C= L W Ch "about" ...
仔细查看以上结果,可以很容易地确定所有“未找到”资源的共同点是279行,635个单词和8972个字符。因此,我们可以使用以下信息来改进“ –hc 404”过滤器(可以组合使用各种过滤器):
$ wfuzz -w wordlist/general/common.txt --hc --hh http://datalayer.io/FUZZ : C= L W Ch "about" : C= L W Ch "blog" : C= L W Ch "css" ... : C= L W Ch "service" : C= L W Ch "store" : C= L W Ch "text" : C= L W Ch "template"
关于自定义wfuzz中的Baseline(基准线)
可以根据参考HTTP响应(称为“基准”)构建过滤器。例如,先前的使用–hh开关过滤“未找到”资源的命令可以通过以下命令完成:
$ wfuzz -w wordlist/general/common.txt --hh BBB http://datalayer.io/FUZZ{notthere}
...
: C= L W Ch "notthere"
: C= L W Ch "about"
: C= L W Ch "service"
...
这里的{}定义了此第一个HTTP请求的FUZZ字的值,然后可以使用将“ BBB”指定为过滤器值的响应。
而这第一个请求被标记为BBB(BBB不能换成别的)基准线;--hh,这里就是以BBB这条请求中的Chars为基准,其他请求的Chars值与BBB相同则隐藏。
基准线基本使用就是这个意思

正则表达式过滤器
显示响应:
--sc(show code),--sl(show lines),--sw(show word),--sh (show chars)
--ss和--hs可以使用正则表达式来对返回的结果过滤。
ss是show显示 hs是过滤隐藏
举个例子
wfuzz -H "User-Agent: () { :;}; echo; echo vulnerable" --ss vulnerable -w cgis.txt http://localhost:8000/FUZZ
过滤出有vulnerable字样的返回
除了直接字符串肯定可以正则
Wfuzz扫描的时候出现网络问题,如DNS解析失败,拒绝连接等时,wfuzz会抛出一个异常并停止执行使用
-Z参数即可忽略错误继续执行
参数--conn-delay来设置wfuzz等待服务器响应接连的秒数。 参数--req-delay来设置wfuzz等待响应完成的最大秒数。
0x03 基本使用wfuzz
路径或文件fuzz
$ wfuzz -w wordlist/general/common.txt http://testphp.vulnweb.com/FUZZ $ wfuzz -w wordlist/general/common.txt http://testphp.vulnweb.com/FUZZ.php
url参数中的fuzz
wfuzz -z range,- --hl http://testphp.vulnweb.com/listproducts.php?cat=FUZZ
模糊POST请求
如果您想模糊一些表单编码的数据(例如HTML表单),只需传递-d命令行参数即可:
wfuzz -z file,wordlist/others/common_pass.txt -d http://testphp.vulnweb.com/userinfo.php ******************************************************** * Wfuzz 2.2 - The Web Fuzzer * ******************************************************** Target: http://testphp.vulnweb.com/userinfo.php Total requests: ================================================================== ID Response Lines Word Chars Request ================================================================== : C= L W Ch "test" Total time: 2.140146 Processed Requests: Filtered Requests: Requests/sec.: 24.29739
携带Cookie进行测试
要将自己的cookie发送到服务器,例如,将请求与HTTP会话相关联,可以使用-b参数(对各种cookie重复):
$ wfuzz -z file,wordlist/general/common.txt -b cookie=value1 -b cookie2=value2 http://testphp.vulnweb.com/FUZZ
-b参数指定Cookie,多个Cookie需要指定多次
上面的命令将生成HTTP请求,例如以下请求:
GET /attach HTTP/1.1 Host: testphp.vulnweb.com Accept: */* Content-Type: application/x-www-form-urlencoded Cookie: cookie=value1; cookie2=value2 User-Agent: Wfuzz/2.2 Connection: close
提交请求头
wfuzz -z file,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
cookie和头都是可以fuzz的 不多说了
fuzz HTTP请求方法
wfuzz -z list,"GET-POST-HEAD-PUT" -X FUZZ http://127.0.0.1/
-z list可以自定义一个字典列表(在命令中体现),以-分割;-X参数是指定HTTP请求方法类型
wfuzz -z list,GET-HEAD-POST-TRACE-OPTIONS -X FUZZ http://testphp.vulnweb.com/ ******************************************************** * Wfuzz 2.2 - The Web Fuzzer * ******************************************************** Target: http://testphp.vulnweb.com/ Total requests: ================================================================== ID Response Lines Word Chars Request ================================================================== : C= L W Ch "HEAD" : C= L W Ch "TRACE" : C= L W Ch "OPTIONS" : C= L W Ch "GET" : C= L W Ch "POST" Total time: 1.030354 Processed Requests: Filtered Requests: Requests/sec.: 4.852696
如果要使用特定动词执行请求,则也可以使用“ -X HEAD”。
代理
如果需要使用代理,只需使用-p参数:
做测试的时候想使用代理可以使用如下命令:
wfuzz -w wordlist -p proxtHost:proxyPort:TYPE URL/FUZZ
wfuzz -z file,wordlist/general/common.txt -p localhost:8080 http://testphp.vulnweb.com/FUZZ
-p参数指定主机:端口:代理类型,例如我想使用ssr的,可以使用如下命令:
wfuzz -w wordlist -p :SOCKS5 URL/FUZZ
除了基本的HTTP代理外,Wfuzz还支持使用SOCKS4和SOCKS5协议的代理:
$ wfuzz -z file,wordlist/general/common.txt -p localhost::SOCKS5 http://testphp.vulnweb.com/FUZZ 通过提供各种-p参数,可以同时使用多个代理: $ wfuzz -z file,wordlist/general/common.txt -p localhost: -p localhost: http://testphp.vulnweb.com/FUZZ
每次将使用不同的代理执行每个请求。
多个代理可使用多个-p参数同时指定,wfuzz每次请求都会选取不同的代理进行。
认证
Wfuzz可以使用
–basic / ntlm / digest
命令行开关来设置身份验证标头。
例如,可以使用以下命令对使用基本身份验证的受保护资源进行模糊处理:
HTTP Basic Auth保护的内容可使用如下命令:
wfuzz -z list,nonvalid-httpwatch --basic FUZZ:FUZZ https://www.httpwatch.com/httpgallery/authentication/authenticatedimage/default.aspx ******************************************************** * Wfuzz 2.2 - The Web Fuzzer * ******************************************************** Target: https://www.httpwatch.com/httpgallery/authentication/authenticatedimage/default.aspx Total requests: ================================================================== ID Response Lines Word Chars Request ================================================================== : C= L W Ch "nonvalid" : C= L W Ch "httpwatch" Total time: 0.820029 Processed Requests: Filtered Requests: Requests/sec.: 2.438938
如果您想模糊受保护网站的资源,也可以使用“ –basic user:pass”。
wfuzz可以通过--basec --ntml --digest来设置认证头,方法都一样:
--basec/ntml/digest username:password
关于递归
-R开关可用于指定有效负载递归的深度。例如,如果要搜索现有目录,然后使用相同的有效负载在这些目录中再次进行模糊测试,则可以使用以下命令:
$ wfuzz -z list,"admin-CVS-cgi\-bin" -R1 http://testphp.vulnweb.com/FUZZ ******************************************************** * Wfuzz 2.2 - The Web Fuzzer * ******************************************************** Target: http://testphp.vulnweb.com/FUZZ Total requests: ================================================================== ID Response Lines Word Chars Request ================================================================== : C= L W Ch "cgi-bin" : C= L W Ch "CVS" |_ Enqueued response ) : C= L W Ch "admin" |_ Enqueued response ) : C= L W Ch "admin - CVS" : C= L W Ch "admin - admin" : C= L W Ch "CVS - CVS" : C= L W Ch "CVS - cgi-bin" : C= L W Ch "admin - cgi-bin" : C= L W Ch "CVS - admin"
递归深度为1也就是说当发现某一个目录存在的时候,在存在目录下再递归一次字典。
性能(设置间隔线程)
-t 开关增加或减少并发请求的数量,以使攻击进行得更快或更慢。
-s 参数告诉Wfuzz在执行另一个请求之前停止给定的秒数。
写入文件
Wfuzz支持将结果以其他格式写入文件。
wfuzz通过printers模块来将结果以不同格式保存到文档中,一共有如下几种格
$ wfuzz -e printers
例如,要将结果以JSON格式写入输出文件,请使用以下命令: -f 参数
$ wfuzz -f /tmp/outfile,json -w wordlist/general/common.txt http://testphp.vulnweb.com/FUZZ
使用-f参数,指定值的格式为输出文件位置,输出格式。
不同的输出
Wfuzz支持以各种格式显示结果。这由称为“打印机”的插件执行。可以列出可用的打印机,执行:
$ wfuzz -e printers
例如,要以JSON格式显示结果,请使用以下命令:
$ wfuzz -o json -w wordlist/general/common.txt http://testphp.vulnweb.com/FUZZ
0x04 高级用法 --wfuzz模块
wfuzz默认自带模块5种类型分别是:payloads、encoders、iterators、printers和scripts。
payloads
通过-e参数可以查看指定模块类型中的模块列表:
wfuzz -e payloads

Available payloads: Name | Summary ------------------------------------------------------------------------------------------------------ guitab | 从可视化的标签栏中读取请求 dirwalk | 递归获得本地某个文件夹中的文件名 file | 获取一个文件当中的每个词 autorize | 获取autorize的测试结果Returns fuzz results' from autororize. wfuzzp | 从之前保存的wfuzz会话中获取测试结果的URL ipnet | 获得一个指定网络的IP地址列表 bing | 获得一个使用bing API搜索的URL列表 (需要 api key). stdin | 获得从标准输入中的条目 list | 获得一个列表中的每一个元素,列表用以 - 符号分格 hexrand | 从一个指定的范围中随机获取一个hex值 range | 获得指定范围内的每一个数值 names | 从一个以 - 分隔的列表中,获取以组合方式生成的所有usernames值 burplog | 从BurpSuite的记录中获得测试结果 permutation | 获得一个在指定charset和length时的字符组合 buffer_overflow | 获得一个包含指定个数个A的字符串. hexrange | 获得指定范围内的每一个hex值 iprange | 获得指定IP范围内的IP地址列表 burpstate | 从BurpSuite的状态下获得测试结果
关于payloads的更详细的信息可以通过以下命令获取:
wfuzz -z help
–slice 参数来对输出结果进行过滤:

encoder
encoder将payload进行编码或加密。

Available encoders: Category | Name | Summary ------------------------------------------------------------------------------------------------------------------------ url_safe, url | urlencode | 用`%xx`的方式替换特殊字符, 字母/数字/下划线/半角点/减号不替换 url_safe, url | double urlencode | 用`%25xx`的方式替换特殊字符, 字母/数字/下划线/半角点/减号不替换 url | uri_double_hex | 用`%25xx`的方式将所有字符进行编码 html | html_escape | 将`&`,`<`,`>`转换为HTML安全的字符 html | html_hexadecimal | 用 `&#xx;` 的方式替换所有字符 hashes | base64 | 将给定的字符串中的所有字符进行base64编码 url | doble_nibble_hex | 将所有字符以`%%dd%dd`格式进行编码 db | mssql_char | 将所有字符转换为MsSQL语法的`char(xx)`形式 url | utf8 | 将所有字符以`\u00xx` 格式进行编码 hashes | md5 | 将给定的字符串进行md5加密 default | random_upper | 将字符串中随机字符变为大写 url | first_nibble_hex | 将所有字符以`%%dd?` 格式进行编码 default | hexlify | 每个数据的单个比特转换为两个比特表示的hex表示 url | second_nibble_hex | 将所有字符以`%?%dd` 格式进行编码 url | uri_hex | 将所有字符以`%xx` 格式进行编码 default | none | 不进行任何编码 hashes | sha1 | 将字符串进行sha1加密 url | utf8_binary | 将字符串中的所有字符以 `\uxx` 形式进行编码 url | uri_triple_hex | 将所有字符以`%%xx%xx` 格式进行编码 url | uri_unicode | 将所有字符以`%u00xx` 格式进行编码 html | html_decimal | 将所有字符以 `&#dd; ` 格式进行编码 db | oracle_char | 将所有字符转换为Oracle语法的`chr(xx)`形式 db | mysql_char | 将所有字符转换为MySQL语法的`char(xx)`形式
正常使用:
wfuzz -z file --zP fn=wordlist,encoder=md5 https://www.cnblogs.com/-qing-/FUZZ使用
Encoders的md5加密。wfuzz -z file,wordlist,md5 URL/FUZZ这里简写了第一条命令,一般都使用这条命令来调用Encoders
使用多个Encoder:
多个转换,使用一个
-号分隔的列表来指定wfuzz -z file,dict.txt,md5-base64 https://www.cnblogs.com/-qing-/FUZZ
--zE md5 同样的
wfuzz -z file --zP fn=qing.txt,encoder=md5 https://www.cnblogs.com/-qing-/FUZZ

wfuzz -z file --zP fn=qing.txt,encoder=md5-base64 https://www.cnblogs.com/-qing-/FUZZ

多次转换的话使用一个@号分隔的列表来按照从右往左顺序多次转换
wfuzz -z file --zP fn=qing.txt,encoder=md5@base64 https://www.cnblogs.com/-qing-/FUZZ

iterator
类似bp中的intruder
提供payload的处理方式

使用参数
-m 迭代器
wfuzz自带的迭代器有三个:zip、chain、product,如果不指定迭代器,默认为product迭代器。
zip迭代器的功能:字典数一一对应进行组合
chain迭代器的功能:将所有字典全部整合(不做组合)放在一起然后传入占位符FUZZ中。
product迭代器的功能:payload交叉组合 笛卡尔积 和bp里的炸弹一样的
wfuzz -e iterators
Available iterators:
Name | Summary
----------------------------------------------------------------------------------------------
product | Returns an iterator cartesian product of input iterables.
zip | Returns an iterator that aggregates elements from each of the iterables.
chain | Returns an iterator returns elements from the first iterable until it is exhaust
| ed, then proceeds to the next iterable, until all of the iterables are exhausted
printer

scripts

一般分为两类:
- passive被动:被动脚本分析现有请求和响应,而不执行新请求。
- active主动:主动脚本向应用程序执行新请求,以对其进行漏洞探测。
其他类别是:
- discovery发现:发现插件通过自动将发现的内容排入wfuzz请求的池来帮助爬网网站。
当使用–script参数以及所选插件时,将指示扫描模式。可以按类别或名称选择插件,也可以使用通配符。
-A开关是–script = default的别名。
脚本的详细信息可以使用–scrip-help获得,例如:

使用简单脚本 比如robots脚本插件 解析robots.txt中的目录
wfuzz --script=robots -z list,"robots.txt" https://www.cnblogs.com/-qing-/FUZZ
list是告诉wufzz请求哪个文件
为了不再重复扫描相同的请求(具有相同的参数),有一个缓存,可以使用–no-cache标志禁用缓存。
使用wfuzz可以自己编写wfuzz插件
/.wfuzz/scripts/目录
以参考已有的插件:https://github.com/xmendez/wfuzz/tree/master/src/wfuzz/plugins/scripts
Web安全 --Wfuzz 使用大全的更多相关文章
- web前端知识体系大全【转载】
自己总结的web前端知识体系大全[欢迎补充] 1. 前言 大约在几个月之前,让我看完了<webkit技术内幕>这本书的时候,突然有了一个想法.想把整个web前端开发所需要的知识都之中在 ...
- asp.net中web.config配置节点大全详解
最近网上找了一些关于Web.config配置节点的文章,发现很多都写的都比较零散,而且很少有说明各个配置节点的作用和用法.搜索了一下发现有一篇写的不错,这里引用一下 原文地址 http://www.c ...
- 自己总结的web前端知识体系大全【欢迎补充】
1. 前言 大约在几个月之前,让我看完了<webkit技术内幕>这本书的时候,突然有了一个想法.想把整个web前端开发所需要的知识都之中在一个视图中,形成一个完整的web前端知识体系,目的 ...
- web前端知识体系大全
1. 前言 大约在几个月之前,让我看完了<webkit技术内幕>这本书的时候,突然有了一个想法.想把整个web前端开发所需要的知识都之中在一个视图中,形成一个完整的web前端知识体系,目的 ...
- asp.net中web.config配置节点大全详解【转】
web.config 文件查找规则: (1)如果在当前页面所在目录下存在web.config文件,查看是否存在所要查找的结点名称,如果存在返回结果并停止查找. (2)如果当前页面所在目录下不存在web ...
- js打印WEB页面内容代码大全
第一种方法:指定不打印区域 使用CSS,定义一个.noprint的class,将不打印的内容放入这个class内. 详细如下: <style media=print type="tex ...
- web前端技术体系大全
一.前端技术框架 1.Vue.js 官网:https://cn.vuejs.org/ Vue CLI:https://cli.vuejs.org/ 菜鸟教程:http://www.runoob.com ...
- web前端知识体系大全【欢迎补充】
大约在几个月之前,让我看完了<webkit技术内幕>这本书的时候,突然有了一个想法.想把整个web前端开发所需要的知识都之中在一个视图中,形成一个完整的web前端知识体系,目的是想要颠覆人 ...
- Web前端技术体系大全搜索
一.前端技术框架 1.Vue.js 官网:https://cn.vuejs.org/ Vue CLI:https://cli.vuejs.org/ 菜鸟教程:http://www.runoob.com ...
随机推荐
- elk安装和使用
elk安装和使用 使用的版本都是5.2.0 elasticsearch-5.2.0安装 在官网 下载 elasticsearch tar包 解压安装 tar zxf elasticsearch-5.2 ...
- DDD领域驱动实践记录
虽然很早之前就已经了解过DDD相关的内容了,但一方面网上理论知识太过碎片化导致难以理解,另一方面实践内容太少导致想动手的时候无从下手.于是就渐渐淡忘了这方面实践的念头. 最近重新了解了DDD相关的知识 ...
- Guava的RateLimiter实现接口限流
最近开发需求中有需要对后台接口进行限流处理,整理了一下基本使用方法. 首先添加guava依赖: <dependency> <groupId>com.google.guava&l ...
- ubuntu上vritualbox为系统分配硬盘空间
VBoxManage是virtualbox 在ubuntu上提供的管理virtualbox的命令行命令 VBoxManage modifyhd windowsDevEnv --resize VBoxM ...
- [kuangbin带你飞]专题一 简单搜索 题解报告
又重头开始刷kuangbin,有些题用了和以前不一样的思路解决.全部题解如下 点击每道题的标题即可跳转至VJ题目页面. A-棋盘问题 棋子不能摆在相同行和相同列,所以我们可以依此枚举每一行,然后标记每 ...
- charles 发布Glist
本文参考:charles 发布Glist Publish Gist /发布代码段 选中某个文件,点击Publish Gist,如果你没有github,这个文件将被匿名发布,您也就无法删除它: 当然你可 ...
- Android远程服务AIDL开发过程中容易遇见的两个问题
问题 一 JavaBinder: Uncaught remote exception! (Exceptions are not yet supported across processes.) jav ...
- Android的有序广播和无序广播(解决安卓8.0版本之后有序广播的接收问题)
前言 Google从Android8.0版本开始,对在清单文件中静态注册广播做了限制. *** 特殊广播(动态注册广播接收者) 说:有序广播和无序广播之前,咱们先来说下Android中一些特殊的广播如 ...
- Android嵌入式开发初学者的几个注意点
一:首先你必须了解ARM平台 Android 移植与驱动核心开发,当然也可以是X86和其他的平台,不过其他平台的Android智能终端开发并不是很多. Android嵌入式智能操作系统是基于Linux ...
- koa和exprsss区别
koa和exprsss区别 koa没有内置中间件 express有几个内置的中间件,如express.static()//加载静态资源 koa不再有req,res请求,它是封装在context里面 c ...