https://github.com/xmendez/wfuzz
Wfuzz: The Web fuzzer — Wfuzz 2.1.4 documentatio
n
一、wfuzz介绍
WFuzz是基于Python开发的
Web安全模糊测试工具。可以将其理解为Fuzz一款暴力破解工具。根据用户提供的字典,获取web站点的敏感目录和信息。
Wfuzz 提供了一个框架来自动化 Web 应用程序安全评估,并可以帮助您通过查找和利用 Web 应用程序漏洞来保护 Web 应用程序。
kali默认安装。
工作原理:
基于一个简单的概念:它将对 FUZZ 关键字的任何引用替换为给定有效负载的值(数据源)。
这个简单的概念
允许将任何输入注入HTTP请求的任何字段中,允许在不同的Web应用程序组件中执行复杂的Web安全攻击,例如:参数,身份验证,表单,目录/文件,标头等。
Wfuzz不仅仅是一个网页内容扫描器:
-
Wfuzz 可以通过查找和利用 Web 应用程序漏洞来帮助您保护 Web 应用程序。插件支持Wfuzz的Web应用程序漏洞扫描程序。
-
Wfuzz是一个完全 模块化的框架,即使是最新的Python开发人员也可以轻松做出贡献。构建插件很简单,只需几分钟。
-
Wfuzz 向之前使用 Wfuzz 或其他工具(如 Burp)执行的 HTTP 请求/响应公开了一个简单的语言界面。这允许您在完整的上下文和对操作的理解下 执行手动和半自动测试,而无需依赖 Web 应用程序扫描程序底层实现。
它的创建是为了促进Web应用程序评估中的任务,它是渗透测试人员为渗透测试人员提供的工具;
测试的漏洞类型主要包括:未授权访问、注入漏洞(目录遍历、SQL 注入、XSS、XXE)、暴力破解登录口令 等
。
二、安装
$ pip3 install wfuzz
或者
$ git clone git://github.com/xmendez/wfuzz.git && python setup.py install
或者
$ docker run -v $(pwd)/wordlist:/wordlist/ -it ghcr.io/xmendez/wfuzz wfuzz
kali上自带wfuzz:
包路径:/usr/lib/python3/dist-packages/wfuzz (pip3 show wfuzz得到)
字典路径:/usr/share/wfuzz/wordlist/*
三、用法
用法:wfuzz [options] -z payload,params <url>
Options:
-
-h:帮助
-
--help:高级帮助
-
--version:Wfuzz版本详细信息使用
-
-e <type>:列出可用的encoders/payloads/iterators/printers/scripts。wfuzz -e <<category>> 开关检查可用的模块
-
-c:带颜色的输出
-
-v:详细信息
-
--interact:(beta)如果选中,则捕获所有按键。这允许您与程序交互。
-
-p addr:使用ip:port:type格式的代理。重复使用各种代理的选项。如果省略,类型可以是SOCKS4、SOCKS5或HTTP。多个-p参数同时使用多个代理:-p localhost:2222:SOCKS5 -p localhost:8080
-
-t N:指定并发连接数(默认值为10)
-
-s N:指定请求之间的时间延迟(默认值为0)
-
-R depth:递归路径发现深度为最大递归级别(默认值为0)
-
-D depth:最大链接深度级别(默认值为4)
-
-L、 --follow:遵循HTTP重定向
-
-u url:指定请求的url。
-
-z payload:以类型、参数和编码器的形式为每个FUZZ关键字指定有效载荷。可以使用编码器列表,即md5-sha1。编码器可以是链式的,即。md5@sha1.可以使用编码器类别。即url使用帮助作为有效负载来显示有效负载插件的详细信息(您可以使用--slice进行过滤)wfuzz -z help查看支持哪些payload
-
-w wordlist:指定wordlist文件(等同于-z file,wordlist)。
-
-V alltype:所有参数brutforming(allvars和allpost)。不需要FUZZ关键字。
-
-X method:指定请求的HTTP方法,即HEAD或FUZZ
-
-b cookie:为请求指定cookie
-
-d postdata:使用postdata(例如:“id=FUZZ&catalog=1”)
-
-H header:使用头(例如:“Cookie:id=1312321&user=FUZZ”)
-
--basic/ntlm/digest auth:格式为"user:pass"或"FUZZ:FUZZ"或 "domain\FUZ2Z:FUZZ"。wfuzz -z list,"username-password" --basic FUZZ:FUZZ URL
-
--hc/hl/hw/hh N[,N]+:隐藏具有指定代码/行/字/字符的响应(使用BBB从基线获取值)
-
--sc/sl/sw/sh N[,N]+:显示具有指定代码/行/字/字符的响应(使用BBB获取基线值)
-
--ss/hs regex:显示/隐藏内容中具有指定正则表达式的响应
Examples:
wfuzz -c -z file,users.txt -z file,pass.txt --sc 200 http://www.site.com/log.asp?user=FUZZ&pass=FUZZ
wfuzz -c -z range,1-10 --hc=BBB http://www.site.com/FUZZ{something not there}
wfuzz --script=robots -z list,robots.txt http://www.webscantest.com/FUZZ
wfuzz本身自带字典:
┌──(root㉿kali)-[/usr/share/wfuzz/wordlist]
└─# tree
.
├── general
│ ├── admin-panels.txt
│ ├── big.txt
│ ├── catala.txt
│ ├── common.txt
│ ├── euskera.txt
│ ├── extensions_common.txt
│ ├── http_methods.txt
│ ├── medium.txt
│ ├── megabeast.txt
│ ├── mutations_common.txt
│ ├── spanish.txt
│ └── test.txt
├── Injections
│ ├── All_attack.txt
│ ├── bad_chars.txt
│ ├── SQL.txt
│ ├── Traversal.txt
│ ├── XML.txt
│ └── XSS.txt
├── others
│ ├── common_pass.txt
│ └── names.txt
├── stress
│ ├── alphanum_case_extra.txt
│ ├── alphanum_case.txt
│ ├── char.txt
│ ├── doble_uri_hex.txt
│ ├── test_ext.txt
│ └── uri_hex.txt
├── vulns
│ ├── apache.txt
│ ├── cgis.txt
│ ├── coldfusion.txt
│ ├── dirTraversal-nix.txt
│ ├── dirTraversal.txt
│ ├── dirTraversal-win.txt
│ ├── domino.txt
│ ├── fatwire_pagenames.txt
│ ├── fatwire.txt
│ ├── frontpage.txt
│ ├── iis.txt
│ ├── iplanet.txt
│ ├── jrun.txt
│ ├── netware.txt
│ ├── oracle9i.txt
│ ├── sharepoint.txt
│ ├── sql_inj.txt
│ ├── sunas.txt
│ ├── tests.txt
│ ├── tomcat.txt
│ ├── vignette.txt
│ ├── weblogic.txt
│ └── websphere.txt
└── webservices
├── ws-dirs.txt
└── ws-files.txt
6 directories, 51 files
wfuzz框架中包含的其他工具:
Wfuzz有效载荷生成器:$ wfpayload -z range,0-10
模糊编码器/解码器:$ wfencode -e md5 test
四、使用
wfuzz -w 字典 http://testphp.vulnweb.com/FUZZ
如上命令使用-w参数指定字典位置,然后跟上一个要测试的地址,所列的例子中有一个FUZZ单词,这个单词可以理解是一个占位符,这样就大概了解了wfuzz的基本运行原理。
# 使用文件有效负载别名时的简短方法:
$ wfuzz -w wordlist/general/common.txt http://testphp.vulnweb.com/FUZZ
# 使用外部单词列表生成器时可以使用 stdin 有效负载:
crunch 2 2 ab | wfuzz -z stdin http://testphp.vulnweb.com/FUZZ
# 多个有效负载
wfuzz -w wordlist/general/common.txt -w wordlist/general/common.txt -w wordlist/general/extensions_common.txt --hc 404 http://testphp.vulnweb.com/FUZZ/FUZ2ZFUZ3Z
# 显示响应 –sc, –sl, –sw, –sh
wfuzz -w wordlist/general/common.txt --sc 404,403 http://testphp.vulnweb.com/FUZZ
# 隐藏响应 –hc, –hl, –hw, –hh
wfuzz -w wordlist/general/common.txt --hc 404,403 --hh 8972 http://datalayer.io/FUZZ
# 使用基线 前面使用 –hh 开关过滤“未找到”资源的命令可以使用以下命令完成:
wfuzz -w wordlist/general/common.txt --hh BBB http://datalayer.io/FUZZ{notthere}
# 正则表达式过滤 参数 “–ss” 和 “–hs” 允许使用正则表达式针对返回的内容过滤响应
wfuzz -H "User-Agent: () { :;}; echo; echo vulnerable" --ss vulnerable -w wordlist/vulns/cgis.txt http://localhost:8000/FUZZ # 允许查找易受“shellshock”攻击的Web服务器
五、dvwa环境演示
5.1、Wfuzz爆破文件
在测试时最常用了,可以得到站点的管理地址,或者其他文件等等
wfuzz -c -w /root/桌面/file.txt -u http://192.168.11.45/FUZZ.php -b "PHPSESSID=v987sdefja03nhp0i9il4te3c7; security=low"
从左往右看,依次是
编号、响应状态码、响应报文行数、响应报文单词数、响应报文字符数、测试使用的Payload。
在上述测试中,响应为404的则意味着不存在该文件,200则存在该文件。
5.2、Wfuzz爆破目录
wfuzz -c -w /root/桌面/dir.txt -u http://192.168.11.45/vulnerabilities/FUZZ -b "PHPSESSID=v987sdefja03nhp0i9il4te3c7; security=low"
5.3、针对登录功能的暴力破解
随便输入账号密码 admin/password 来抓取数据包看看:
看请求是通过 GET 请求将用户名和密码作为参数进行验证,由于访问 DVWA 的漏洞页面需要认证,所以需要指定 Cookie,然后尝试使用下面的命令对密码进行 FUZZ:
wfuzz -c -w /usr/share/wfuzz/wordlist/general/medium.txt -u "http://192.168.11.45/vulnerabilities/brute/?username=admin&password=FUZZ&Login=Login" -b "PHPSESSID=b6kqi0cagcn636r6u4o5hg4v73; security=low"
结果:
从图中可以看到第一行,密码为 password 时,Word 和 Chars 与其他不一样,说明,这个密码可能是正确的,然后用这个密码去测试即可。
5.4、针对参数进行SQL注入检测
针对参数中的id进行Fuzz,命令如下:
结果中有一些 payload 获得的返回包不太一样,可以猜测其存在安全风险,其实 Fuzz 的过程就是触发异常,然后针对异常进行深入测试。
六、python使用wfuzz
Python 库 — Wfuzz 2.1.4 文档