前言:  做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. 进击的 Java ,云原生时代的蜕变

    作者| 易立 阿里云资深技术专家 导读:云原生时代的来临,与Java 开发者到底有什么联系?有人说,云原生压根不是为了 Java 存在的.然而,本文的作者却认为云原生时代,Java 依然可以胜任&qu ...

  2. Winform应用程序简介

    1.winform应用程序是一种智能客户端技术,我们可以使用winform应用程序帮助我们获得信息或传输信息等. WPF技术——XAML美化界面. 2.  F4快速属性 (1)Name:在后台要获得前 ...

  3. 通过js获取tinymce4.x的值

    问题的引出: 在使用过程中,用传统的js的方法判断tinymce所选textarea(下面直接称textarea)的值是会出现这样的问题的: 在已有输入内容时,首次提交的时候,依然会弹出js写的警告提 ...

  4. PythonI/O进阶学习笔记_6.对象引用,可变性和垃圾回收

    前言: 没有前言了- -......这系列是整理的以前的笔记上传的,有些我自己都忘记我当时记笔记的关联关系了. 记住以后 笔记记了就是用来复习的!!!不看不就啥用没了吗!!! content: 1.p ...

  5. Set集合、List集合

    集合体系:Collection.Map接口 存储数量不等的多个对象,不能存储基本数据类型,如存储基本数据类型会自动装箱 ======================================== ...

  6. 一套基于SpringBoot+Vue+Shiro 前后端分离 开发的代码生成器

    一.前言 最近花了一个月时间完成了一套基于Spring Boot+Vue+Shiro前后端分离的代码生成器,目前项目代码已基本完成 止步传统CRUD,进阶代码优化: 该项目可根据数据库字段动态生成 c ...

  7. centos赋予访问权限

    chmod u+x *.sh (代表授权现在所处的文件目录下的所有以:.sh的文件 启动tomcat:/usr/local/tomcat9/bin/shutdown.sh 关闭tomcat:/usr/ ...

  8. [C++] 重载new和delete——控制内存分配

      1.new和delete表达式的工作机理      1)new表达式实际执行了三步 string *sp=new string("aaaa"); ];//string采用默认初 ...

  9. 公开的免费WebService接口分享,用于做接口练习

    本文转载于 https://cloud.tencent.com/developer/article/1349603 天气预报Web服务,数据来源于中国气象局 Endpoint http://www.w ...

  10. [技术栈]C#利用Luhn算法(模10算法)对IMEI校验

    1.Luhn算法(模10算法) 通过查看ISO/IEC 7812-1:2017文件可以看到对于luhn算法的解释,如下图: 算法主要分为三步: 第一步:从右边第一位(最低位)开始隔位乘2: 第二步:把 ...