前言:  做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. 如何让基于.NET 2.0的应用在高版本的系统上运行?

    我们的WinForm项目是基于.NET 2.0开发的,在部署时,发现有些机器没有.NET 2.0,但是即使这些机器有装.NET 2.0 以上的版本,也无法运行我们的程序.这就比较蛋疼了. 我们查了一下 ...

  2. Docker入门到实践——简单操作

    1.对比传统虚拟机总结 特性 容器 虚拟机 启动 秒级 分钟级 硬盘使用 一般为MB 一般为GB 性能 接近原生 弱于 系统支持量 单机支持上千个容器 一般几十个 2.基本概念 Docker包括三个基 ...

  3. 1、单链表的实现(java代码)

    1.创建链结构实体Node /** * 链表结构实体类 */ public class Node { Node next = null; //下一节点 int data; //节点数据 public ...

  4. 《即时消息技术剖析与实战》学习笔记7——IM系统的消息未读

    一.什么是消息未读 消息未读包括会话未读和总未读.前者指的是当前用户和某一聊天方的未读消息数,后者指的是当前用户的所有未读消息数,也就是所有会话未读的和.比如用户A收到用户B的2条消息,还收到用户C的 ...

  5. 即时聊天APP(二) - MainActivity

    主活动包含三个Fragment,分别是会话.联系人和设置,初始布局隐藏所有碎片,然后把应该显示的显示出来: //隐藏所有Fragment private void hideAll(){ Fragmen ...

  6. jqGrid中的formatter,表格中值的格式化

    jqGrid中对列表cell数次那个格式话设置主要通过colModel中formatter,formatoptions来设置. 基本用法: jQuery("#jqGrid_id") ...

  7. Linux下一键安装包的基础上安装SVN及实现nginx web同步更新

    Linux下一键安装包的基础上安装SVN及实现nginx web同步更新 一.安装 1.查看是否安装cvs rpm -qa | grep subversion 2.安装 yum install sub ...

  8. JAVA设计模式-动态代理(Proxy)示例及说明

    在Mybatis源码解析,一步一步从浅入深(五):mapper节点的解析文章的最后部分,我们提到了动态代理的概念,下面我们就简单了解一下动态代理. 一,概念 代理设计模式的目的就是在不直接操作对象的前 ...

  9. 使用uEdit时,在线管理图片功能不可用

    把所有的配置文件都配置好了,uedit的在线管理功能图片还是不可用,看了一下源码: 是的,它在img的src属性后边的图片上加上了参数,那肯定不能用啊,所以修改源文件image.js.直接搜索noCa ...

  10. JQuery对于动态生成的标签绑定事件失效

    JQuery对整个html文档进行dom操作后,我们要想动态绑定事件,有两种方法 1.在进行dom操作时,在标签中写上onclick="afun()" 2.利用document的操 ...