前言:  做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种类型分别是:payloadsencodersiteratorsprintersscripts

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

    使用Encodersmd5加密。

  • 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自带的迭代器有三个:zipchainproduct,如果不指定迭代器,默认为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 使用大全的更多相关文章

  1. web前端知识体系大全【转载】

    自己总结的web前端知识体系大全[欢迎补充]   1. 前言 大约在几个月之前,让我看完了<webkit技术内幕>这本书的时候,突然有了一个想法.想把整个web前端开发所需要的知识都之中在 ...

  2. asp.net中web.config配置节点大全详解

    最近网上找了一些关于Web.config配置节点的文章,发现很多都写的都比较零散,而且很少有说明各个配置节点的作用和用法.搜索了一下发现有一篇写的不错,这里引用一下 原文地址 http://www.c ...

  3. 自己总结的web前端知识体系大全【欢迎补充】

    1. 前言 大约在几个月之前,让我看完了<webkit技术内幕>这本书的时候,突然有了一个想法.想把整个web前端开发所需要的知识都之中在一个视图中,形成一个完整的web前端知识体系,目的 ...

  4. web前端知识体系大全

    1. 前言 大约在几个月之前,让我看完了<webkit技术内幕>这本书的时候,突然有了一个想法.想把整个web前端开发所需要的知识都之中在一个视图中,形成一个完整的web前端知识体系,目的 ...

  5. asp.net中web.config配置节点大全详解【转】

    web.config 文件查找规则: (1)如果在当前页面所在目录下存在web.config文件,查看是否存在所要查找的结点名称,如果存在返回结果并停止查找. (2)如果当前页面所在目录下不存在web ...

  6. js打印WEB页面内容代码大全

    第一种方法:指定不打印区域 使用CSS,定义一个.noprint的class,将不打印的内容放入这个class内. 详细如下: <style media=print type="tex ...

  7. web前端技术体系大全

    一.前端技术框架 1.Vue.js 官网:https://cn.vuejs.org/ Vue CLI:https://cli.vuejs.org/ 菜鸟教程:http://www.runoob.com ...

  8. web前端知识体系大全【欢迎补充】

    大约在几个月之前,让我看完了<webkit技术内幕>这本书的时候,突然有了一个想法.想把整个web前端开发所需要的知识都之中在一个视图中,形成一个完整的web前端知识体系,目的是想要颠覆人 ...

  9. Web前端技术体系大全搜索

    一.前端技术框架 1.Vue.js 官网:https://cn.vuejs.org/ Vue CLI:https://cli.vuejs.org/ 菜鸟教程:http://www.runoob.com ...

随机推荐

  1. GC判断哪些内存需要回收

    GC的问题,主要分为:1.哪些内存需要回收?2.什么时候回收?3.如何回收?这里主要讲第一个问题. 1.哪些内存需要回收? 垃圾收集器在对堆进行回收前,第一件事情就是要确定这些对象之中哪些还“存活”, ...

  2. HTML定位——绝对定位和相对定位、固定定位

    1.绝对定位 绝对定位指的是通过规定HTML元素在水平和垂直方向上的位置来固定元素,基于绝对定位的元素不会占据空间. 绝对定位的位置声明是相对于已定位的并且包含关系最近的祖先元素.如果当前需要被定为的 ...

  3. 02 (H5*) Vue第二天

    目录: 1:全局过滤器的使用 2:局部过滤器 3:自定义键盘码 4:自定义指令 5:自定义私有指令 6:Vue生命周期. 7:网络请求 1:全局过滤器的使用 Vue.filter("msgF ...

  4. .netCore+Vue 搭建的简捷开发框架

    话不多说,上图: 整体项目结构如图所示,我的设计初衷是基于.netCore + DI + Vue 打造一个适合初学者的简捷开发框架. 架构模型采用基于RESTful API风格的前后台分离框架,总体分 ...

  5. Asp.Net Core2.2 源码阅读系列——控制台日志源码解析

      为了让我们第一时间知道程序的运行状态,Asp.Net Core 添加了默认的日志输出服务.这看起来并没有什么问题,对于开发人员也相当友好,但如果不了解日志输出的细节,也有可能因为错误的日志级别配置 ...

  6. [Leetcode] 第290题 单词模式

    一.题目描述 给定一种 pattern(模式) 和一个字符串 str ,判断 str 是否遵循相同的模式. 这里的遵循指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非空单词 ...

  7. 前端基础-BOM和DOM学习

    JavaScript分为 ECMAScript,BOM,DOM. BOM:是指浏览器对象模型,使JavaScript有能力与浏览器进行对象. DOM:是指文档对象模型,通过它,可以访问HTML文档的所 ...

  8. 制定一个学习liunx的目标

        制定一个学习liunx的目标       学习目标方法 1.在这五个月的学习时间里,制定一套自己的学习方式. 2.养成做笔记以及写博客的习惯 . 3.坚持上课前预习,自习时间总结 . 4.紧跟 ...

  9. 知名大厂如何搭建大数据平台&架构

    今天我们来看一下淘宝.美团和滴滴的大数据平台,一方面进一步学习大厂大数据平台的架构,另一方面也学习大厂的工程师如何画架构图.通过大厂的这些架构图,你就会发现,不但这些知名大厂的大数据平台设计方案大同小 ...

  10. CAS详细登录流程(转)

    转:https://www.cnblogs.com/lihuidu/p/6495247.html 4.CAS的详细登录流程 上图是3个登录场景,分别为:第一次访问www.qiandu.com.第二次访 ...