FFUF进阶使用指南

前言

​ 虽然很多人都熟悉使用 ffuf的基本使用,但真正了解的人却寥寥无几。本文介绍了ffuf的更多使用方法,旨在提升你的ffuf使用水平,从而帮助你发现那些别人可能会忽略的漏洞。

​ 文末付上ffuf使用笔记在线网站

为什么要用 ffuf?

​ ffuf 是一款功能强大、高效的fuzz工具,可以对参数、目录、子域等进行暴力破解。它的速度和灵活性使其成为很多人最喜欢使用的fuzz工具之一。

自定义字典和递归测试:

  • 问题:普通字典经常会遗漏一些东西或目录。
  • 解决方案:使用针对目标环境定制的字典。将其与fuzz相结合,爆破嵌套的目录。例如
1
ffuf -w /path/to/custom-wordlist.txt -u https://target.com/FUZZ -recursion -recursion-depth 3 -e .php,.asp,.html
  • 可以使用 Cewl (自动字典生成,kali自带)等工具或通过分析目标网站的独特关键词、目录名称和文件扩展名来生成自定义字典。

处理其他 HTTP 方法:

  • 问题:大多数人只使用 GET 和 POST 方法进行测试,而忽略了其他 HTTP 方法中的潜在漏洞。
  • 解决方案:ffuf 可以对可能暴露敏感功能的不常用 HTTP 方法(如 PUT、DELETE、PATCH)进行处理。
1
ffuf -w /path/to/wordlist.txt -X PUT -u https://target.com/FUZZ -b 'session=abcdef'
  • 使用 TRACEOPTIONSCONNECT 等方法,查找潜在的错误配置或者功能

利用基于参数的漏洞:

  • 问题:传统的处理方法经常会漏掉基于参数的漏洞,尤其是在复杂的测试环境中。
  • 解决方案:利用 ffuf 同时测试多个参数。
1
ffuf -w params.txt:PARAM -u https://target.com/page?PARAM=value
  • 将 ffuf 与 ParamSpider 或 Arjun 等工具结合使用,可发现隐藏参数并创建有效的测试策略。

使用 ffuf 的 DNS 模式爆破子域:

  • 问题:子域枚举通常仅限于常用工具,遗漏了一些子域。
  • 解决方案:ffuf 的 DNS 模式允许枚举子域,从而发现容易被遗漏的子域。
1
ffuf -w /path/to/subdomains.txt -u https://FUZZ.target.com -H "Host: FUZZ.target.com"
  • 使用将常用子域与潜在通配符或排列组合相结合的字典,以发现更多子域。

利用 Burp 进行复杂fuzz:

  • 问题:有些目标需要复杂的身份验证,或受到 WAF 的保护。
  • 解决方案:将 ffuf 与 Burp Suite 集成,用于高级测试场景,利用 Burp 的强大功能绕过 WAF 并处理会话。
  • 使用 Burp 的 Collaborator 或 Intruder 捕捉和重放会话,通过 ffuf 发送这些请求,以进行精确fuzz。
  • 将 ffuf 与 Burp 的宏功能相结合,可处理复杂的多步骤身份验证流程,确保即使在受保护的环境中也能有效进行fuzz。

API 和 WebSockets:

  • 问题:API 和 WebSockets 需要专门的fuzz,而许多人都没有做。
  • 解决方案:通过制作包含必要header、令牌和 JSON 主体的自定义请求,为 API 端点调整 ffuf。
1
ffuf -w /path/to/wordlist.txt -X POST -d '{"param":"FUZZ"}' -H 'Content-Type: application/json' -u https://api.target.com/endpoint

🛠️ ffuf 高级手册 🛠️

HTTP 选项:

自定义Header:

  • -H "Custom-Header:FUZZ"- 对自定义标头进行测试处理,以发现隐藏功能。
  • 例如 ffuf -w headers.txt -u https://target.com/ -H "X-Custom-Header: FUZZ"

身份验证:

  • -cc-ck -使用客户端证书和密钥在安全端点后面进行测试处理。
  • 例如 ffuf -w wordlist.txt -u https://securetarget.com/FUZZ -cc client.crt -ck client.key

HTTP 方法fuzz

  • -X FUZZ- 测试不常见的 HTTP 方法,如 PUT、DELETE 等。
  • 例如 ffuf -w methods.txt -X FUZZ -u [https://target.com/resource](https://target.com/resource)

递归fuzz

  • -recursion- 在目录内自动递归测试。
  • -recursion-depth - 控制递归深度,避免过多层级。
  • 例如 ffuf -w dirs.txt -u https://target.com/FUZZ -recursion -recursion-depth 3

超时调整:

  • -timeout 30- 增加反应慢的目标的超时。
  • 例如 ffuf -w wordlist.txt -u https://slowtarget.com/FUZZ -timeout 30

代理和重放:

代理:

  • http代理
    • ffuf -x http://127.0.0.1:8080 -w wordlist.txt -u https://host.name/FUZZ
  • socks代理
    • ffuf -x socks5://127.0.0.1:1080 -w wordlist.txt -u https://host.name/FUZZ

重放代理:

  • -replay-proxy http://127.0.0.1:8080 - 通过代理重放匹配的请求。
  • 例如 ffuf -w wordlist.txt -u https://target.com/FUZZ -replay-proxy [http://127.0.0.1:8080](http://127.0.0.1:8080/)

与 Burp 集成:

  • -x http://127.0.0.1:8080- 通过 Burp Suite 发送请求以进行被动fuzz。
  • 例如 ffuf -w wordlist.txt -u https://target.com/FUZZ -x [http://127.0.0.1:8080]

API Fuzzing & WebSockets:

测试 API 接口

  • -H "Content-Type: application/json" - 测试基于 JSON 的 API 接口。
  • 例如 ffuf -w params.txt -u https://api.target.com/endpoint -X POST -d '{"key":"FUZZ"}'

WebSocket Fuzzing

  • 与 Burp Suite 集成的示例:在 Burp 中捕获 WebSocket 流量并通过 ffuf 重放。

性能调整:

提高效率:

  • -t 100- 增加并发线程数。
  • -rate 1000- 控制每秒请求的速度。
  • 例如 ffuf -w wordlist.txt -u https://target.com/FUZZ -t 100 -rate 1000

规避限速

  • -p 0.1-2.0- 引入随机延迟,以避免速度限制。
  • 例如 ffuf -w wordlist.txt -u https://target.com/FUZZ -p 0.5-1.5

与其他工具联动:

与 Nuclei 联动:

  • 将 ffuf 与 Nuclei 联动,在fuzz过程中扫描漏洞。
  • 例如 ffuf -w wordlist.txt -u https://target.com/FUZZ -of json | nuclei -t nuclei-templates/

与 HTTPx 联动:

  • 在进行测试前,使用 HTTPx 过滤存活主机。
  • 例如 httpx -silent -l targets.txt | ffuf -w wordlist.txt -u [https://FUZZ/](https://fuzz/)

将 ffuf 与 Nmap 结合使用:

另一个强大的组合是将 ffuf 与 nmap 结合使用。例如,你可以使用 nmap 扫描开放端口,然后使用 ffuf 对发现的 HTTP 服务进行测试处理:

1
2
nmap -p- -oG open_ports.txt 192.168.1.1
ffuf -w open_ports.txt -u http://192.168.1.1:FUZZ -o results.html

多个字典:

​ ffuf 可以使用多个字典同时测试 URL 或数据字段的多个部分。你不仅可以测试 URL 路径,还可以测试参数或查询字符串。在测试需要多个变量的 API 或端点时,该功能非常有用。

​ 在ffuf中使用多个字典进行fuzz是一种强大的技术,可用于测试网络应用程序的不同部分。在ffuf中,有三种主要模式可用于处理多个字典:clusterbombpitchforksniper。每种模式都有不同的用途,具体取决于你在fuzz过程中如何组合字典。

​ 下面举例说明如何使用每种模式:

clusterbomb模式

集束炸弹

clusterbomb模式会尝试多个字典中每种值的组合。当你需要测试输入参数的所有可能组合,比如同时尝试不同的用户名和密码。

例如:

1
ffuf -w users.txt:USER -w passwords.txt:PASS -u https://example.com/login?username=USER&password=PASS --mode clusterbomb

​ 在此模式下,ffuf会尝试用户名和密码的所有可能组合,确保涵盖所有配对。适用于爆破账号密码或同时测试多个字段。

​ 你可以对 JSON 请求的多个部分进行测试处理:

1
ffuf -w usernames.txt:U -w passwords.txt:P -X POST -d '{"username":"U","password":"P"}' -H 'Content-Type: application/json' -u https://example.com/api/login

​ 或者对目录名和文件名都进行测试处理,从而增加发现嵌套路径中隐藏路径的机会:

1
ffuf -w dirs.txt:DIR -w files.txt:FILE -u https://example.com/DIR/FILE

Pitchfork模式

一一对应映射

Pitchfork模式以一对一的映射方式同时处理每个字典。它从第一个字典中提取第一个项目,从第二个字典中提取第一个项目,然后将它们配对在一起。这种模式非常适合测试匹配的输入对,例如用户名-密码对。

例如:

1
ffuf -w users.txt:USER -w passwords.txt:PASS -u https://example.com/login?username=USER&password=PASS --mode pitchfork

​ 在这里,ffuf会从users.txt列表中获取第一个用户名,从passwords.txt列表中获取第一个密码,然后一起发送。然后,它将从每个列表中提取第二个项目,依此类推,因此当参数需要按顺序匹配时,这种模式非常有用。


Sniper模式

单个狙击

Sniper模式用于使用单个字典一次测试一个参数,而其他参数保持不变。该模式非常适合用于发现不同输入对请求特定部分的影响。

例如:

1
ffuf -w payloads.txt -u https://example.com/search?query=FUZZ&staticparam=value --mode sniper

​ 在这种情况下,ffuf将使用payloads.txt字典只测试查询参数,而保持staticparam=value不变。Sniper模式适用于一次只针对一个输入字段或参数的集中fuzz。


主要区别

  • clusterbomb:测试多个字典的所有组合
  • Pitchfork:将多个字典中匹配的项目配对。
  • Sniper:每次使用单个字典测试一个参数,其他参数保持不变。

这些模式你可以自行灵活使用。

匹配返回特征:

下面是一些使用 ffuf 匹配返回特征选项的示例:

匹配状态码

ffuf 匹配器的一个基本用法是使用-mc查找具有特定状态代码的响应。例如,如果要查找返回200状态代码的页面,可以使用

1
ffuf -u https://example.com/FUZZ -w wordlist.txt -mc 200

​ 这只会显示状态代码为 200 的响应,过滤掉所有其他响应。

匹配响应大小

​ 如果要根据响应的大小进行匹配,使用-ms。例如你的目标响应大小正好是 1000 字节:

1
ffuf -u https://example.com/FUZZ -w wordlist.txt -ms 1000

​ 你还可以匹配一个范围内的内容长度:

1
ffuf -u https://example.com/FUZZ -w wordlist.txt -ms 900-1100

​ 该命令将匹配 900 至 1100 字节的响应。

字数匹配

​ 你可以使用-mw根据正文中的字数过滤回包。例如,如果你要查找字数正好为 50 的回包:

1
ffuf -u https://example.com/FUZZ -w wordlist.txt -mw 50

按响应行匹配

​ 根据回包的行数进行匹配。使用-ml选项可根据行数过滤回包。例如,如果你要查找行数正好为 10 行的回包:

1
ffuf -u https://example.com/FUZZ -w wordlist.txt -ml 10

​ 通过这些匹配器选项,你可以对fuzz进行微调,以过滤掉不相关的结果,并专注于特定的响应模式。

Regex 匹配

​ 有时,仅根据状态代码或大小进行过滤是不够的。ffuf 提供了 regex 匹配功能,让你只需要关注包含特定内容的响应。

1
ffuf -w /path/to/wordlist.txt -u https://example.com/FUZZ -mr "success|welcome"

​ 此命令显示内容包含 “success “或 “welcome “的响应。当某些关键字典示有效或有漏洞的页面时,Regex 匹配就很有用了。

​ 要匹配包含/\...*/ 等模式的响应(可识别隐藏文件或目录),可以使用

1
ffuf -u https://example.com/FUZZ -w wordlist.txt -mr '/\..*/'

​ 此命令将搜索包含句号和任意字符的响应。

速度限制:

​ 如果你正在对带有访问速度限制或时间限制的网络应用程序进行fuzz,那么 ffuf 的超时和速度限制选项可以帮助你管理请求而不被阻止。

1
ffuf -w /path/to/wordlist.txt -u https://example.com/FUZZ -rate 50 -timeout 5

​ 在这种情况下,ffuf 将每秒最多发送 50 个请求,并最多等待 5 秒以获得响应。这对于规避有访问速度限制的目标的安全保护特别有用。

延迟

​ ffuf 可以调整发送请求的速度,以避免触发速度限制:

1
ffuf -w wordlist.txt -u https://example.com/FUZZ -t 2 -p 1

​ 该命令将线程数 (-t) 设置为 2,并在请求之间引入 1 秒的延迟 (-p)。这样可以减少被防护的几率。

对 POST 请求进行fuzz:

​ 例如,测试登录表单中的用户名值:

1
ffuf -w usernames.txt -u https://example.com/login -X POST -d "username=FUZZ&password=admin"

​ 该命令测试不同的用户名,同时保持密码不变,类似内网渗透中的密码喷洒,很有用。

测试 JSON POST 数据

​ 如果目标使用基于 JSON 的 API,你可以在payload中加入 FUZZ 关键字,对 JSON 数据进行测试:

1
ffuf -X POST -H "Content-Type: application/json" -d '{"username": "admin", "password": "FUZZ"}' -w /path/to/wordlist.txt -u http://example.com/api/login

该命令向指定 URL 发送 JSON 格式的 POST 请求,用单字典中的每个值替换 FUZZ。

​ 这个例子使用鉴权参数值对接口进行fuzz:

1
ffuf -w tokens.txt -H "Authorization: Bearer FUZZ" -u https://example.com/api/resource

这将对不同的鉴权参数进行fuzz。

​ 另一个例子——用于识别 X-Forwarded-For 或 User-Agent 等标头中的漏洞。

1
ffuf -w /path/to/wordlist.txt -u http://example.com -H "X-Forwarded-For: FUZZ"

该命令将 FUZZ 替换为页眉中字典的每个值,使你能够发现可能绕过安全检查或泄露内部细节的变化。

输出选项:

​ 完成fuzz后,把结果存下来以便日后分析或者其他操作。ffuf 允许以各种格式(如 JSON 或 CSV)输出

1
ffuf -w /path/to/wordlist.txt -u https://example.com/FUZZ -o results.json -of json

这将以 JSON 格式存储输出,然后就可以用其他工具继续利用或进行手工测试。

​ 你还可以 CSVHTML 格式记录:

1
ffuf -w wordlist.txt -u https://example.com/FUZZ -o results.csv -of csv

​ 要将输出保存为所有支持的格式,请使用

1
ffuf -w wordlist.txt -u https://example.com/FUZZ -o results -of all

在线参考:

本文参考与棉花糖文章学习

这里有一份在线参考:

https://www.mhtsec.com/tool/ffuf/