梦幻的彼岸 发表于 2021-11-25 18:04:15

[原创][翻译]ffuf综合指南

本帖最后由 梦幻的彼岸 于 2021-11-26 10:07 编辑

原文信息
原文标题:Comprehensive Guide on ffuf
发布日期:March 28, 2021
作者:Raj Chandel
地址:https://www.hackingarticles.in/comprehensive-guide-on-ffuf/
备注:感觉不错的文章,故翻译分享,欢迎留言反馈问题

在这篇文章中,我们将学习如何使用ffuf,它表示为 “Fuzz Faster U Fool”, 这是一个有趣的开源网络模糊测试工具。自从它发布以来,许多人都倾向于使用ffuf,特别是在bug赏金的情况下。因此,让我们深入了解一下这个学习过程。目录
[*]ffuf简介
[*]设置
[*]输入选项:

[*]简易攻击
[*]多个Wordlist
[*]忽略Wordlist列表注释并保持沉默
[*]扩展
[*]请求 | 请求-原型 | 模式
[*]匹配选项:

[*]匹配HTTP代码
[*]匹配行
[*]匹配字数
[*]匹配大小
[*]匹配正则表达式
[*]过滤器选项:

[*]过滤代码
[*]过滤行
[*]过滤大小
[*]过滤字数
[*]过滤正则表达式
[*]一般选项

[*]自定义自动校准
[*]颜色
[*]任务最长时间
[*]作业最长时间
[*]延迟
[*]请求率
[*]误差功能
[*]审阅模式
[*]输出选项:

[*]HTML输出格式
[*]CSV输出格式
[*]所有输出格式
[*]HTTP 选项

[*]超时
[*]主机头
[*]递归
[*]利用Cookie进行攻击
[*]Burp suite代理
[*]总结
ffuf简介这是一种专业的命令行方法,用于在网络服务器上进行网络模糊测试,并归功于作者(@joohoi). 自FFUF发布以来,许多人都倾向于FFUF,尤其是在bug赏金领域。虽然这种转变的大部分可能归因于“羊群心态”,但由于FFUF的节奏、多功能性以及与外部工具轻松合并的能力,该群体的很大一部分人已经做出了转换。设置它是一个命令行程序,可以在Linux终端或Windows命令提示符下运行。从源码升级并不比从源码编译更难,除了要加入 -u flag.go get -u github.com/ffuf/ffuf由于我们使用的是Kali Linux,我们会在apt软件库中找到ffuf,允许我们通过运行简单的命令来安装。apt install ffuf安装这个工具后,为了获得其工作参数和选项,我们只需要使用 [-h] 帮助选项的参数ffuf -h
输入选项这些参数可以帮助我们在世界列表的帮助下,在一个URL上提供网络模糊的所需数据。1. 简易攻击对于默认的攻击,我们需要使用参数 [-u] 为目标URL和 [-w] 来加载一个词表,如图所示:ffuf -u <a href="http://testphp.vulnweb.com/FUZZ/" target="_blank">http://testphp.vulnweb.com/FUZZ/</a> -w dict.txt运行该命令后,让我们关注一下结果
[*]首先我们注意到,它默认运行在 HTTP method GET.
[*]接下来要做的事情是 response code status [200, 204, 301, 302, 307, 401, 403, 405}; 它还显示了我们攻击的进展。在进展的最后,我们得到了我们的结果。

2. 多个Wordlist
有时,一个词表并不足以显示我们想要的结果。在这种情况下,我们可以同时使用多个词表来获得更好的结果。只有fff有能力根据我们的需要运行多个词表来进行攻击。
这里我提供了两个字典dict.txt作为W1和W2作为Dns.txt,fuf会同时读取这两个字典。
ffuf -u <a href="https://ignitetechnologies.in/W2/W1/" target="_blank">https://ignitetechnologies.in/W2/W1/</a> -w dict.txt:W1 -w dns_dict.txt:W23. 忽略Wordlist列表注释并保持沉默:一般来说,默认的 wordlist 可能有一些注释,会影响我们的结果的准确性。在这种情况下,我们可以使用 [-ic] 参数,可以帮助我们摆脱这种评论。有时我们需要更专注于攻击而不是工具标志,对于这种准确性,我们需要 [-s] 参数,该参数有权力删除工具标志。ffuf -u <a href="http://testphp.vulnweb.com/FUZZ/" target="_blank">http://testphp.vulnweb.com/FUZZ/</a> -w dict.txt我们可以清楚地看到,当我们运行上述命令时,结果中列出了一些评论,在下一个命令中使用[-s]和[-ic]参数后,注释和标志被删除。ffuf -u <a href="http://testphp.vulnweb.com/FUZZ/" target="_blank">http://testphp.vulnweb.com/FUZZ/</a> -w dict.txt -ic -s
4. 扩展:我们可以在[-e]参数的帮助下在网络服务器上搜索一个特定的扩展文件,我们只需要在[-e]参数中指定扩展文件。为了得到这些结果,我们只需要按照命令来做。ffuf -u <a href="http://192.168.1.12/dvwa/FUZZ/" target="_blank">http://192.168.1.12/dvwa/FUZZ/</a> -w dict.txt -e .php
5. 请求 | 请求-原型 | 模式:Burpsuite​套件是一个先进的框架,用于进行网络应用程序安全监控。它的不同工具一致行动,帮助整个测试过程。cluster bomb是一种使用几个payload集的功能。对于每个给定的位置,都有一个不同的payload。攻击会逐一通过每个payload,检查所有潜在的payload变化。
这个工具有各种参数,可以帮助我们使用这个方案。如[-request]参数,它可以在攻击中使用我们的请求,[-request-proto]参数,我们可以通过它定义我们的参数,[-mode]参数帮助我们定义攻击的模式。

首先,我们在目标URL页面上使用随机凭证,并设置代理,在Burpsuite上以拦截模式捕获其请求。

现在在Burpsuite的拦截标签中,用HFUZZ和WFUZZ改变我们提供的凭证。把HFUZZ放在uname前面,WFUZZ放在pass前面。然后把这个请求复制粘贴到一个文本中,并按你的愿望命名。在我们的例子中,我们将其命名为brute.txt。现在开始进行主要攻击,其中[-request]参数持有我们的请求文本文件。[-request-proto] 帮助我们得出http原型 [-mode] 帮助我们得出cluster bomb攻击。我们在这些(users.txt和pass.txt)中使用的词表包括SQL注入。按照这个命令开始使用这些参数进行攻击。ffuf -request brute.txt -request-proto http -mode clusterbomb -w users.txt:HFUZZ -w pass.txt:WFUZZ -mc 200正如我们在攻击结果中看到的,我们已经成功地发现了在该特定目标上工作的SQL注入。
匹配选项如果我们想让ffuf只显示我们的网络模糊测试数据中的重要数据。那么它将帮助我们只展示与之相匹配的参数。例如。HTTP代码、行数、字数、大小和正则表达式。1. 匹配HTTP代码:为了了解这个参数,我们需要考虑一个简单的攻击,我们可以看到哪些HTTP代码出现在我们的结果中。ffuf -u <a href="http://192.168.1.12/dvwa/FUZZ/" target="_blank">http://192.168.1.12/dvwa/FUZZ/</a> -w dict.txt
我们可以清楚地看到,它显示一些302 HTTP代码与200 HTTP代码。如果只需要成功的结果,如200的HTTP代码,我们只需要使用[-mc]参数,以及我们的具体HTTP代码。要使用这个参数,只需按照命令。ffuf -u <a href="http://192.168.1.12/dvwa/FUZZ/" target="_blank">http://192.168.1.12/dvwa/FUZZ/</a> -w dict.txt -mc 200
2. 匹配行:就像我们前面讨论的匹配代码一样,它在[-ml]参数的帮助下给我们提供文件中特定行的结果。我们可以使用这个[-ml]参数来指定我们需要的文件中的行。ffuf -u <a href="http://192.168.1.12/dvwa/FUZZ/" target="_blank">http://192.168.1.12/dvwa/FUZZ/</a> -w dict.txt -ml 15
3. 匹配字数:同样,正如上述功能的匹配功能,它可以为我们提供一个具有特定字数的结果。为了得到这个结果,我们需要在结果中使用[-mw]参数和我们想要的具体字数。ffuf -u <a href="http://192.168.1.12/dvwa/FUZZ/" target="_blank">http://192.168.1.12/dvwa/FUZZ/</a> -w dict.txt -mw 53
4. 匹配大小:同样地,正如上述功能的匹配函数,它可以为我们提供一个带有文件大小的结果。我们可以在结果中使用[-ms]参数和我们想要的特定大小计数。ffuf -u <a href="http://192.168.1.12/dvwa/FUZZ/" target="_blank">http://192.168.1.12/dvwa/FUZZ/</a> -w dict.txt -ms 2929
5.匹配正则表达式:它是这个工具中所有匹配函数中的最后一个。我们将对LFI进行模糊处理,对给定的字典进行 "root:x "模式的匹配。
我们使用一个可以实现这一功能的URL,通过使用[-mr]参数,我们定义了匹配字符串 "root:x"。

这就是我们的特殊wordlist的样子。
通过使用这个wordlist,按照下面的命令,在攻击场景中使用[-mr]参数。ffuf -u <a href="http://testphp.vulnweb.com/showimage.php?file=FUZZ" target="_blank">http://testphp.vulnweb.com/showimage.php?file=FUZZ</a> -w dict2.txt -mr "root:x"
在这里,我们得到了HTTP对/etc/passwd给出的wordlist的200响应。过滤选项过滤选项与匹配选项完全相反。我们可以使用这些选项,从我们的网络模糊测试中删除不需要的东西。例如。HTTP代码、行、字、大小、正则表达式。1.过滤代码:参数[-fc]需要我们从结果中删除特定的HTTP状态代码。ffuf -u <a href="http://192.168.1.12/dvwa/FUZZ/" target="_blank">http://192.168.1.12/dvwa/FUZZ/</a> -w dict.txt -fc 302
2. 过滤行:[-fl]参数有能力从我们的结果中删除一个特定的长度,或者我们可以从我们的攻击中过滤掉它。ffuf -u <a href="http://192.168.1.12/dvwa/FUZZ/" target="_blank">http://192.168.1.12/dvwa/FUZZ/</a> -w dict.txt -fl 26
3. 过滤大小:参数[-fs]具有过滤掉指定尺寸的能力,是我们在攻击的命令中描述的。ffuf -u <a href="http://192.168.1.12/dvwa/FUZZ/" target="_blank">http://192.168.1.12/dvwa/FUZZ/</a> -w dict.txt -fs 2929
4. 过滤字数[-fw]参数有能力从我们想删除的结果中过滤出字数。ffuf -u <a href="http://192.168.1.12/dvwa/FUZZ/" target="_blank">http://192.168.1.12/dvwa/FUZZ/</a> -w dict.txt -fw 83
5. 过滤正则表达式:参数[-fr]我们可以删除一个特定的正则表达式,这里我们尝试将日志文件从输出结果中排除。ffuf -u <a href="http://192.168.1.12/dvwa/FUZZ/" target="_blank">http://192.168.1.12/dvwa/FUZZ/</a> -w dict.txt -fr "log"
常规选项这些是这个工具的一般参数,围绕着它在网络模糊测试方面的常规工作。1. 自定义自动校准:我们知道,计算机或机器自动校准自身的能力被称为自动校准。校准是为测量仪器提供它所需要的信息以了解它将被使用的环境的过程。在收集数据时,校准计算机可以确保其准确性。
我们可以在[-acc]参数的帮助下,根据我们的需要定制这一功能。如果没有[-ac]参数的定制,就不能使用该功能。
ffuf -u <a href="http://192.168.1.12/dvwa/FUZZ/" target="_blank">http://192.168.1.12/dvwa/FUZZ/</a> -w dict.txt -acc -ac -fl 26 -ac -fs 2929 -ac -fw 54
2. 颜色:有时,颜色的分离会让人对结果中的所有细节产生额外的关注。这个[-c]参数有助于创建色彩分离。ffuf -u <a href="http://192.168.1.12/dvwa/FUZZ/" target="_blank">http://192.168.1.12/dvwa/FUZZ/</a> -w dict.txt -c
3. 任务最长时间:如果你想在有限的时间内进行模糊处理,那么你可以选择[-maxtime]参数。按照命令提供一个时间段。ffuf -u <a href="http://192.168.1.12/dvwa/FUZZ/" target="_blank">http://192.168.1.12/dvwa/FUZZ/</a> -w dict.txt -maxtime 5
4, 作业最长时间:在[-maxtime-job]参数的帮助下,我们可以为一个特定的作业设置一个时间限制。通过使用这个命令,我们试图限制每个作业或请求的执行时间。ffuf -u <a href="http://192.168.1.12/dvwa/FUZZ/" target="_blank">http://192.168.1.12/dvwa/FUZZ/</a> -w dict.txt -maxtime-job 2

5. 延迟:如果我们在攻击所提供的每个请求中创建一个特定的延迟。通过这个功能,一个请求有更好的机会获得更好的结果。[-p]参数帮助我们在这些请求中实现延迟。ffuf -u <a href="http://192.168.1.12/dvwa/FUZZ/" target="_blank">http://192.168.1.12/dvwa/FUZZ/</a> -w dict.txt -p 1
6. 请求率:我们可以在[-rate]参数的帮助下,为我们的每一次攻击创建一个单独的请求率。通过这个参数,我们可以根据我们的攻击需要创建每秒的请求。ffuf -u <a href="http://192.168.1.12/dvwa/FUZZ/" target="_blank">http://192.168.1.12/dvwa/FUZZ/</a> -w dict.txt -rate 500
7. 误差功能:有三个参数支持误差功能。第一个参数是[-se],这是一个虚假的错误。它说明下面的请求是真的还是假的。第二个参数是[-sf],它将在95%以上的请求发生错误时停止我们的攻击。第三个也是最后一个参数是[-sa],它是两个错误参数的组合。
在我们的方案中,我们使用[-se]参数,它将在我们的请求不真实时停止我们的攻击。
ffuf -u <a href="http://ignitetechnologies.in/W2/W1/" target="_blank">http://ignitetechnologies.in/W2/W1/</a> -w dict.txt:W1 -w dns_dict.txt:W2 -se
8. 详细模式:众所周知,详细模式是许多计算机操作系统和编程语言中使用的一种功能,它提供了关于计算机正在做什么以及在初始化时加载哪些驱动程序和应用程序的额外信息。在编程中,它为调试目的产生准确的输出,使程序的调试变得容易。有一个参数叫[-v]参数。ffuf -u <a href="http://192.168.1.12/dvwa/FUZZ/" target="_blank">http://192.168.1.12/dvwa/FUZZ/</a> -w dict.txt -v
9. 线程:参数[-t]用于加快或减慢一个进程。默认情况下,它被设置为40。如果我们想加快进程的速度,我们需要增加它的数量,反之,则要减慢进程。ffuf -u <a href="http://192.168.1.12/dvwa/FUZZ/" target="_blank">http://192.168.1.12/dvwa/FUZZ/</a> -w dict.txt -t 1000
输出选项我们保存我们的攻击性能,是为了保存记录,提高可读性,以及可能的参考。我们使用[-o]参数来保存我们的输出,但我们需要用[-of]参数一起指定其格式。1. HTML输出格式:我们使用[-of]参数,这个定义为HTML格式。通过使用该命令,我们可以用HTML格式创建我们的报告。ffuf -u <a href="http://192.168.1.12/dvwa/FUZZ/" target="_blank">http://192.168.1.12/dvwa/FUZZ/</a> -w dict.txt -o file.html -of html
现在,在完成这个攻击后,我们需要检查我们的输出文件是否达到了这个标准。我们可以看到,我们的文件已经成功创建2. CSV输出格式:同样地,我们只需要将csv格式与[-of]参数一起使用。其中csv是逗号分隔的数值,该文件允许你以表格的形式存储数据。ffuf -u <a href="http://192.168.1.12/dvwa/FUZZ/" target="_blank">http://192.168.1.12/dvwa/FUZZ/</a> -w dict.txt -o file.csv -of csv
现在,在完成这个攻击后,我们需要检查我们的输出文件是否达到了这个标准。我们可以看到,我们的文件已经成功创建。3. 所有输出格式:同样地,如果我们想一次性获得所有的输出格式,只需使用[-of all]参数。比如json, ejson, html, md, csv, ecsv。按照这个命令,可以一次性生成所有报告。ffuf -u <a href="http://192.168.1.12/dvwa/FUZZ/" target="_blank">http://192.168.1.12/dvwa/FUZZ/</a> -w dict.txt -o output/file -of all现在,在完成这一攻击后,我们需要检查我们的输出文件是否达到了标准。我们可以看到,我们的所有文件都被成功创建。HTTP 选项这些选项围绕着HTTP选项移动,有时它需要运行网络模糊的细节,如HTTP请求,Cookie,HTTP头,等等。1. 超时:超时作为事件的最后期限。参数[-timeout]有助于轻松地建立这个功能,请按照这个命令运行这个参数。ffuf -u <a href="http://192.168.1.12/dvwa/FUZZ/" target="_blank">http://192.168.1.12/dvwa/FUZZ/</a> -w dict.txt -timeout 5
2. 主机头:如果我们想对子域进行模糊处理,我们可以在命令中使用[-H]参数和域名词表,如下图所示。ffuf -u <a href="https://google.com" target="_blank">https://google.com</a> -w dns_dict.txt -mc 200 -H "HOST: FUZZ.google.com"
3. 递归:递归是以自我相似的方式重复对象的机制,这一点我们都知道。如果一个程序要求你在另一个函数中访问一个函数,这被称为函数的递归调用。通过使用[-recursion]参数,我们可以在攻击中实现这一功能。ffuf -u "http://testphp.vulnweb.com/FUZZ/" -w dict.txt -recursion
4. 利用Cookie进行攻击:有时网络模糊测试在没有认证的网站上不会显示结果。有一个[-b]参数,我们可以通过提供一个会话cookie来实现你的目标。ffuf -u <a href="http://192.168.1.12/dvwa/FUZZ/" target="_blank">http://192.168.1.12/dvwa/FUZZ/</a> -w dict.txt -b "PHPSESSID:"7aaaa6d88edcf7cd2ea4e3853ebb8bde""
5. Replay-代理:你可能知道,在Burp套件(社区版)的免费版本中,使用Intruder功能时有速度限制。Intruder攻击的速度已经严重减慢,每一个命令都会进一步减慢攻击的速度。

在我们的案例中,我们使用Burp套件代理来获得结果,以便在其中进行评估。首先,我们要在8080端口建立一个本地主机代理。

现在使用[-replay-proxy]参数,这有助于我们得出我们的本地主机代理,我们在上一步建立的8080端口与我们的攻击一起。ffuf -u <a href="http://192.168.1.12/dvwa/FUZZ/" target="_blank">http://192.168.1.12/dvwa/FUZZ/</a> -w dict.txt -replay-proxy <a href="http://127.0.0.1:8080" target="_blank">http://127.0.0.1:8080</a> -v -mc 200
这次攻击将显示我们在两个平台上的结果。第一个平台在kali终端,第二个平台在Burp套件的HTTP历史标签。通过这些不同的技术,我们可以更好地了解我们的目标和我们的攻击结果。

总结ffuf经常被比作dirb或dirbuster等工具,虽然在一定程度上是准确的,但并不是一个合理的比喻。虽然FFUF可以用来对文件进行暴力破解,但它的真正优势在于它的简单性,对于FFUF来说,更好的比较工具是像Burp Suite Intruder或Turbo Intruder。作者: Shubham Sharma是一位充满激情的网络安全研究员,请联系 LinkedIn 和 Twitter.


页: [1]
查看完整版本: [原创][翻译]ffuf综合指南