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 ...
随机推荐
- 进击的 Java ,云原生时代的蜕变
作者| 易立 阿里云资深技术专家 导读:云原生时代的来临,与Java 开发者到底有什么联系?有人说,云原生压根不是为了 Java 存在的.然而,本文的作者却认为云原生时代,Java 依然可以胜任&qu ...
- Winform应用程序简介
1.winform应用程序是一种智能客户端技术,我们可以使用winform应用程序帮助我们获得信息或传输信息等. WPF技术——XAML美化界面. 2. F4快速属性 (1)Name:在后台要获得前 ...
- 通过js获取tinymce4.x的值
问题的引出: 在使用过程中,用传统的js的方法判断tinymce所选textarea(下面直接称textarea)的值是会出现这样的问题的: 在已有输入内容时,首次提交的时候,依然会弹出js写的警告提 ...
- PythonI/O进阶学习笔记_6.对象引用,可变性和垃圾回收
前言: 没有前言了- -......这系列是整理的以前的笔记上传的,有些我自己都忘记我当时记笔记的关联关系了. 记住以后 笔记记了就是用来复习的!!!不看不就啥用没了吗!!! content: 1.p ...
- Set集合、List集合
集合体系:Collection.Map接口 存储数量不等的多个对象,不能存储基本数据类型,如存储基本数据类型会自动装箱 ======================================== ...
- 一套基于SpringBoot+Vue+Shiro 前后端分离 开发的代码生成器
一.前言 最近花了一个月时间完成了一套基于Spring Boot+Vue+Shiro前后端分离的代码生成器,目前项目代码已基本完成 止步传统CRUD,进阶代码优化: 该项目可根据数据库字段动态生成 c ...
- centos赋予访问权限
chmod u+x *.sh (代表授权现在所处的文件目录下的所有以:.sh的文件 启动tomcat:/usr/local/tomcat9/bin/shutdown.sh 关闭tomcat:/usr/ ...
- [C++] 重载new和delete——控制内存分配
1.new和delete表达式的工作机理 1)new表达式实际执行了三步 string *sp=new string("aaaa"); ];//string采用默认初 ...
- 公开的免费WebService接口分享,用于做接口练习
本文转载于 https://cloud.tencent.com/developer/article/1349603 天气预报Web服务,数据来源于中国气象局 Endpoint http://www.w ...
- [技术栈]C#利用Luhn算法(模10算法)对IMEI校验
1.Luhn算法(模10算法) 通过查看ISO/IEC 7812-1:2017文件可以看到对于luhn算法的解释,如下图: 算法主要分为三步: 第一步:从右边第一位(最低位)开始隔位乘2: 第二步:把 ...