Wfuzz详细指南|模糊测试工具使用方法

Wfuzz详细指南|模糊测试工具使用方法

介绍

已经开发了许多创建 HTTP 请求并允许用户修改其内容的工具。模糊测试的工作方式相同。用户可以多次向服务器发送类似的请求,但请求的某个部分已更改。当某个部分被列表或目录中的变量替换时,它被称为模糊测试。

在本文中,我们将学习如何使用 wfuzz,它表示“Web Application Fuzzer”,这是一个有趣的开源 Web 模糊测试工具。自发布以来,许多人都被 wfuzz 所吸引,尤其是在 bug 赏金方案中。那么,让我们深入了解这个学习过程。

Wfuzz 简介

Wfuzz 是一个 Python 编码的应用程序,用于模糊测试 Web 应用程序。它提供了各种过滤器,通过将简单的 Web 请求替换为变量“FUZZ”,可以将其替换为所需的字典列表。

设置

要使用 pip 安装 wfuzz,我们可以使用如下命令:

pip3 install wfuzz
Wfuzz详细指南|模糊测试工具使用方法

同样可以通过使用 git 从源代码来实现安装。

git clone https://github.com/xmendez/wfuzz.git
Wfuzz详细指南|模糊测试工具使用方法

查看所有工作选项的帮助菜单如下:

wfuzz -h
wfuzz --help
Wfuzz详细指南|模糊测试工具使用方法

您可以使用“-z”来使用模块

Wfpayload 和 Wfencode

当您从源代码安装该工具时,可以使用名为 wfpayload 和 wfencode 的已编译可执行文件。这些负责有效载荷的生成和编码。它们可以单独使用。例如,生成 0 到 15 的数字的命令如下:

./wfpayload -z range,0-15
Wfuzz详细指南|模糊测试工具使用方法

如您所见,存在 pycurl 错误。它可以像这样让错误消失:

apt --purge remove python3-pycurl && apt install libcurl4-openssl-dev libssl-dev
Wfuzz详细指南|模糊测试工具使用方法

现在,当您运行 wfencode(一个使用哈希算法对提供的输入进行编码的模块)时,现在没有 pycurl 错误。

./wfencode -e md5 ignite
Wfuzz详细指南|模糊测试工具使用方法

Docker 运行 wfuzz

Wfuzz 也可以使用 repo ghcr.io 通过以下方式使用 docker 启动。可以通过替换最后一个变量 wfuzz 来运行相应的命令。

docker run -v $(pwd)/wordlist:/wordlist/ -it ghcr.io/xmendez/wfuzz wfuzz
Wfuzz详细指南|模糊测试工具使用方法

有效载荷

Wfuzz 中的有效负载是输入数据的来源。可以通过执行以下命令列出可用的有效负载:

wfuzz -e payloads
Wfuzz详细指南|模糊测试工具使用方法

也可以使用切片过滤器查看详细视图:

wfuzz -z help --slice "list"
Wfuzz详细指南|模糊测试工具使用方法

子域模糊测试

子域发现在渗透测试场景中非常有用。通常,攻击者对子域而不是主域发起攻击,它可以像这样被模糊测试:

在这里,-c 对输出响应代码进行颜色编码
-Z 指定要在扫描模式下输入的 URL,并忽略任何连接错误
-w 指定在子域暴力破解时使用的密码字典列表。

wfuzz -c -Z -w subdomains.txt http://FUZZ.vulnweb.com
Wfuzz详细指南|模糊测试工具使用方法

同样可以通过提供内联子域列表来实现。只有有效载荷(-z 选项)应与“list”一起提供作为输入。该列表以 ITEM1-ITEM2-ITEM3 格式提供,如下所示:

wfuzz -z list,CVS-testphp-admin-svn http://testphp.vulnweb.com/FUZZ
wfuzz -z list,CVS-testphp-admin-svn http://FUZZ.vulnweb.com/
Wfuzz详细指南|模糊测试工具使用方法

目录模糊测试

可以使用 wfuzz 枚举目录,就像使用提供的 wordlist 使用 gobuster 一样。这可以使用 -w 标志并输入密码字典列表的路径来完成:

wfuzz -w wordlist/general/common.txt http://testphp.vulnweb.com/FUZZ
Wfuzz详细指南|模糊测试工具使用方法

正如您在上面的屏幕截图中看到的那样,所有结果(包括未找到的页面)都已被转储,这使得通过结果和大海捞针变得乏味。因此,为了整理结果,我们可以看到显示代码标志 (-sc)。其他此类标志是:

  • –hc/sc CODE #隐藏/显示响应代码
  • –hl/sl NUM #ide/按响应行数显示
  • –hw/sw NUM #ide/按响应的字数显示
  • –hc/sc NUM #ide/按响应的字符数显示
wfuzz -w wordlist/general/common.txt --sc 200,301 http://testphp.vulnweb.com/FUZZ
Wfuzz详细指南|模糊测试工具使用方法

保存模糊测试输出结果

Wfuzz 输出也可以使用 -f 选项以多种格式保存。

-f 选项允许用户输入文件路径并在逗号后指定打印(格式化输出)。

wfuzz -w wordlist/general/common.txt -f /tmp/output,csv --sc 200,301 http://testphp.vulnweb.com/FUZZ
cat /tmp/output
Wfuzz详细指南|模糊测试工具使用方法

代替 csv,您可以指定任何一种输出结果

wfuzz -e printers
Wfuzz详细指南|模糊测试工具使用方法

基本密码字典列表过滤器

某些子参数可以在 -z 或 -w 过滤器之前进行更多操作。这些过滤器是:

–zP <params>:指定有效负载的参数

-zD <default>:指定payload的默认参数

–zE <encoder>:指定有效载荷的编码器

因此,要使用有效负载指定一个密码字典,我们可以这样做:

wfuzz -z file --zD wordlist/general/common.txt --sc 200,301 http://testphp.vulnweb.com/FUZZ
Wfuzz详细指南|模糊测试工具使用方法

要隐藏 HTTP 响应代码 404,可以像这样获得相同的结果:

wfuzz -z file --zD wordlist/general/common.txt --hc 404 http://testphp.vulnweb.com/FUZZ
Wfuzz详细指南|模糊测试工具使用方法

双重模糊测试

就像可以使用关键字“FUZZ”对有效载荷中的参数进行模糊测试一样,也可以通过指定关键字进行多次模糊测试:

  • FUZ2Z – 第二个参数
  • FUZ3Z – 第三个参数
  • FUZ4Z – 第 4 个参数

并且可以为每个参数分配自己的密码字典。第一个“-w”代表第一个 FUZZ。第二个“-w”适用于第二个 FUZ2Z,依此类推。

wfuzz -w wordlist/general/common.txt -w wordlist/general/common.txt --hc 404 http://testphp.vulnweb.com/FUZZ/FUZ2Z
Wfuzz详细指南|模糊测试工具使用方法

登录蛮力破解

HTTP 响应可以使用 wfuzz 进行暴力破解。例如,testphp 的网站向后端发出 POST 请求,并将“uname”和“pass”作为参数传递给页面 userinfo.php

Wfuzz详细指南|模糊测试工具使用方法

同样可以使用 wfuzz 来实现,如下所示:

-d 参数指定要与请求一起发送的 post 数据

wfuzz -z file,wordlist/others/common_pass.txt -d "uname=FUZZ&pass=FUZZ"  --hc 302 http://testphp.vulnweb.com/userinfo.php
Wfuzz详细指南|模糊测试工具使用方法

如您所见,已找到正确的凭据“test-test”。我们为用户名和密码使用了一个通用文件。同样可以通过为用户名和密码提供不同的文件来完成,如下所示:

-c 是对可以跳过的输出响应进行颜色编码。

wfuzz -z file,users.txt -z file,pass.txt --sc 200 -d "uname=FUZZ&pass=FUZ2Z" http://testphp.vulnweb.com/userinfo.php
Wfuzz详细指南|模糊测试工具使用方法

Cookie 模糊测试

要将自定义 cookie 与请求一起发送到不同的模糊目录,我们可以使用“-b”插件。这会在发送的 HTTP 请求中添加一个 cookie。

以下场景有用:

  • cookie中毒
  • 会话劫持
  • 权限提升
wfuzz -z file,wordlist/general/common.txt -b cookie=secureadmin -b cookie2=value2 --hc 404 http://testphp.vulnweb.com/FUZZ
Wfuzz详细指南|模糊测试工具使用方法

在上述场景中,我们在多个目录中添加了 2 个静态 cookie。现在,我们也可以像这样对 cookie 参数进行模糊测试:

wfuzz -z file,wordlist/general/common.txt -b cookie=FUZZ http://testphp.vulnweb.com/
Wfuzz详细指南|模糊测试工具使用方法

标头模糊测试

可以在 wfuzz 发出的请求中添加 HTTP 标头。HTTP 标头可以改变整个网页的行为。自定义标头可以在传出请求中进行模糊测试或注入

有用的场景:

  • HTTP 标头注入
  • SQL 注入
  • 主机头注入
wfuzz -z file,wordlist/general/common.txt -H "X-Forwarded-By: 127.0.0.1" -H "User-Agent: Firefox" http://testphp.vulnweb.com/FUZZ
Wfuzz详细指南|模糊测试工具使用方法

HTTP OPTIONS 模糊测试

可以使用“-X”标志指定各种可用的 HTTP 请求/选项方法。在以下示例中,我们在名为 options.txt 的文本文件中插入了以下选项

  • GET
  • HEAD
  • POST
  • PUT
  • DELETE
  • CONNECT
  • OPTIONS
  • TRACE
  • PATCH
wfuzz -c -w options.txt --sc 200 -X FUZZ “http://testphp.vulnweb.com”
Wfuzz详细指南|模糊测试工具使用方法

如您所见,三个有效选项返回了 200 响应代码。

可以使用“list”有效负载内联输入相同的内容,如下所示:

wfuzz -z list,GET-HEAD-POST-TRACE-OPTIONS -X FUZZ http://testphp.vulnweb.com/
Wfuzz详细指南|模糊测试工具使用方法

通过代理进行模糊测试

Wfuzz 还可以通过代理路由请求。在以下示例中,Burp 代理在端口 8080 上处于活动状态,并且您可以看到在 burp 拦截中拦截的请求。

wfuzz -z file,wordlist/general/common.txt -p localhost:8080 http://testphp.vulnweb.com/FUZZ
Wfuzz详细指南|模糊测试工具使用方法

使用 SOCKS 代理也可以实现相同的功能,如下所示:

wfuzz -z file,wordlist/general/common.txt -p localhost:9500:SOCKS5 http://testphp.vulnweb.com/FUZZ
Wfuzz详细指南|模糊测试工具使用方法

身份验证模糊

Wfuzz 还可以设置身份验证标头并提供通过 HTTP 请求进行身份验证的方法。

标志:

  • –basic:提供基本的用户名和密码验证
  • –ntlm:Windows 身份验证
  • –digest:通过摘要访问进行网络服务器协商

在下面的示例中,我提供了一个内联的列表,其中包含两个变量和 -basic 输入以暴力破解网站 httpwatch.com

wfuzz -z list,nonvalid-httpwatch --basic FUZZ:FUZZ https://www.httpwatch.com/httpgallery/authentication/authenticatedimage/default.aspx
Wfuzz详细指南|模糊测试工具使用方法

递归模糊

-R 开关可以在模糊测试目录或参数时指定递归级别。简单来说,递归意味着在多个不同级别的目录上进行模糊测试,例如 /dir/dir/dir 等

在下面的例子中,我们在第 1 层递归,内联列表包含 3 个目录:admin、CVS 和 cgi-bin。请注意如何以内联方式提供名称中带有 – 的目录

wfuzz -z list,"admin-CVS-cgi\-bin" -R1 http://testphp.vulnweb.com/FUZZ
Wfuzz详细指南|模糊测试工具使用方法

打印和输出

wfuzz 中的打印是指可以处理有效负载输出的所有格式。可以使用 -e 通过打印参数成功查看。此外,“-o”标志也可以指定输出的格式

wfuzz -e printers
wfuzz -o json -w wordlist/general/common.txt http://testphp.vulnweb.com/FUZZ
Wfuzz详细指南|模糊测试工具使用方法

编码器

wfuzz 中提供了各种编码器。我们之前看到的一种这样的编码器是 md5。其他编码器可以通过使用带有编码器参数的“-e”标志来查看。

wfuzz -e encoders
Wfuzz详细指南|模糊测试工具使用方法

可以使用 MD5 输出来模糊测试网站的目录,如下所示:

wfuzz -z file,wordlist/general/common.txt,md5 http://testphp.vulnweb.com/FUZZ
Wfuzz详细指南|模糊测试工具使用方法

从配方中存储和恢复fuzz

为了简化扫描,wfuzz 可以使用“–dump-recipe”和“–recipe”标志保存和恢复会话。

wfuzz -w wordlist/general/common.txt --dump-recipe /tmp/recipe --sc 200,301 http://testphp.vulnweb.com/FUZZ
wfuzz --recipe /tmp/recipe
Wfuzz详细指南|模糊测试工具使用方法

忽略异常和错误

通常在进行模糊测试时,网站可能会抛出各种错误和异常。“-Z”选项可以让wfuzz忽略这些错误和异常。首先,我们运行一个普通的子域模糊测试程序,然后使用 -Z 选项:

wfuzz -z list,support-web-none http://FUZZ.google.com/
wfuzz -z list,support-web-none -Z http://FUZZ.google.com/

如您所见, -Z 忽略了底部的错误。此外,任何无效响应也可以像这样隐藏:

wfuzz -z list,support-web-none -Z --hc “XXX” http://FUZZ.google.com/
Wfuzz详细指南|模糊测试工具使用方法

过滤结果

有许多过滤器可用于操作有效负载或输出。

wfuzz --filter-help
Wfuzz详细指南|模糊测试工具使用方法

这些可以使用“–filter、–slice、–field 和–efield”参数进行操作。

例如,要查看发送的有效负载的原始响应和发出的完整 HTTP 请求,您可以使用“–efield r”选项

wfuzz -z range --zD 0-1 -u http://testphp.vulnweb.com/artists.php?artist=FUZZ --efield r
Wfuzz详细指南|模糊测试工具使用方法

但是,如果只需要预期的 URL,可以通过提供 –efield url 输入来实现。

wfuzz -z range --zD 0-1 -u http://testphp.vulnweb.com/artists.php?artist=FUZZ --efield url --efield h
Wfuzz详细指南|模糊测试工具使用方法

同样,要根据响应代码和页面长度(大于 97 行)过滤掉结果,您可以这样做

wfuzz -z range,0-10 --filter "c=200 and l>97" http://testphp.vulnweb.com/listproducts.php?cat=FUZZ
Wfuzz详细指南|模糊测试工具使用方法

可以在此处找到有效负载的所有过滤器的详细表格。

wfuzz 中的会话

wfuzz 中的会话是一个临时文件,可以保存并在以后拾取、重新处理和后处理。这在保存的一个结果已经需要更改或分析人员需要在结果中查找某些内容的情况下很有帮助。“-oF”过滤器可以将会话输出保存到文件中。

wfuzz --oF /tmp/session -z range,0-10 http://testphp.vulnweb.com/listproducts.php?cat=FUZZ
Wfuzz详细指南|模糊测试工具使用方法

现在可以使用“wfuzzp”有效负载再次打开并使用此会话文件,如下所示:

wfuzz -z wfuzzp,/tmp/session FUZZ
Wfuzz详细指南|模糊测试工具使用方法

从先前保存的会话中过滤的一个这样的示例如下所示,其中我们通过使用 Python 正则表达式来发现 SQL 注入漏洞,该 Python 正则表达式旨在通过添加撇号 (‘) 并再次进行模糊测试来在请求修改参数后读取响应。“-A”显示详细输出。

正则表达式 r.params.get=+’\’ 在 get 参数中添加撇号 (‘)。r 代表原始响应。

wfuzz -z range,1-5 --oF /tmp/session http://testphp.vulnweb.com/artists.php?artist=FUZZ
wfuzz -z wfuzzp,/tmp/session --prefilter "r.params.get=+'\''" -A FUZZ
Wfuzz详细指南|模糊测试工具使用方法

如您所见,请求号 4 引发 SQL 错误,表明 SQL 注入。有关更多正则表达式操作,请参阅此处

结论

Wfuzz 是一个多功能工具,它不仅可以执行目录枚举,还可以真正帮助渗透测试者进行分析。它是一种快速扫描仪,易于使用,并以 python 编码以实现可移植性。希望你喜欢这篇文章。谢谢阅读。

更多关于wfuzz的知识可参考如下链接:

转载请注明出处及链接

One comment

  1. 讲的很细,这款工具和ffuf工具,在目录fuzz方面很强大,感觉市面上很多五花八门的工具,但是wfuzz在调用线程方面总能把我卡死,或者说爆破速度有点快吧😂

Leave a Reply

您的电子邮箱地址不会被公开。 必填项已用 * 标注