前言
虽然很多人都熟悉使用 ffuf的基本使用,但真正了解的人却寥寥无几。本文介绍了ffuf的更多使用方法,旨在提升你的ffuf使用水平,从而帮助你发现那些别人可能会忽略的漏洞。
文末付上ffuf使用笔记在线网站
为什么要用 ffuf?
ffuf 是一款功能强大、高效的fuzz工具,可以对参数、目录、子域等进行暴力破解。它的速度和灵活性使其成为很多人最喜欢使用的fuzz工具之一。
1.自定义字典和递归测试:
- 问题:普通字典经常会遗漏一些东西或目录。
- 解决方案:使用针对目标环境定制的字典。将其与fuzz相结合,爆破嵌套的目录。例如
ffuf -w /path/to/custom-wordlist.txt -u https://target.com/FUZZ -recursion -recursion-depth 3 -e .php,.asp,.html
- 可以使用 Cewl (自动字典生成,kali自带)等工具或通过分析目标网站的独特关键词、目录名称和文件扩展名来生成自定义字典。
2.处理其他 HTTP 方法:
- 问题:大多数人只使用 GET 和 POST 方法进行测试,而忽略了其他 HTTP 方法中的潜在漏洞。
- 解决方案:ffuf 可以对可能暴露敏感功能的不常用 HTTP 方法(如 PUT、DELETE、PATCH)进行处理。
ffuf -w /path/to/wordlist.txt -X PUT -u https://target.com/FUZZ -b 'session=abcdef'
- 使用 TRACE、OPTIONS 和 CONNECT 等方法,查找潜在的错误配置或者功能。
3.利用基于参数的漏洞:
- 问题:传统的处理方法经常会漏掉基于参数的漏洞,尤其是在复杂的测试环境中。
- 解决方案:利用 ffuf 同时测试多个参数。
ffuf -w params.txt:PARAM -u https://target.com/page?PARAM=value
- 将 ffuf 与 ParamSpider 或 Arjun 等工具结合使用,可发现隐藏参数并创建有效的测试策略。
4.使用 ffuf 的 DNS 模式爆破子域:
- 问题:子域枚举通常仅限于常用工具,遗漏了一些子域。
- 解决方案:ffuf 的 DNS 模式允许枚举子域,从而发现容易被遗漏的子域。
ffuf -w /path/to/subdomains.txt -u https://FUZZ.target.com -H "Host: FUZZ.target.com"
- 使用将常用子域与潜在通配符或排列组合相结合的字典,以发现更多子域。
5.利用 Burp 进行复杂fuzz:
- 问题:有些目标需要复杂的身份验证,或受到 WAF 的保护。
- 解决方案:将 ffuf 与 Burp Suite 集成,用于高级测试场景,利用 Burp 的强大功能绕过 WAF 并处理会话。
- 使用 Burp 的 Collaborator 或 Intruder 捕捉和重放会话,通过 ffuf 发送这些请求,以进行精确fuzz。
- 将 ffuf 与 Burp 的宏功能相结合,可处理复杂的多步骤身份验证流程,确保即使在受保护的环境中也能有效进行fuzz。
6.API 和 WebSockets:
- 问题:API 和 WebSockets 需要专门的fuzz,而许多人都没有做。
- 解决方案:通过制作包含必要header、令牌和 JSON 主体的自定义请求,为 API 端点调整 ffuf。
ffuf -w /path/to/wordlist.txt -X POST -d '{"param":"FUZZ"}' -H 'Content-Type: application/json' -u https://api.target.com/endpoint
- 将 ffuf与 Postman 集合或 Swagger 文档结合使用,可自动执行并定制 API fuzz工作。
🛠️ ffuf 高级手册 🛠️
1.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`
2.代理和重放:
重放代理:
-
`-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](http://127.0.0.1:8080/)`
3.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 重放。
4.性能调整:
提高效率:
-
`-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`
**
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 服务进行测试处理:
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
6.多个字典
ffuf 可以使用多个字典同时测试 URL 或数据字段的多个部分。你不仅可以测试 URL 路径,还可以测试参数或查询字符串。在测试需要多个变量的 API 或端点时,该功能非常有用。
在ffuf
中使用多个字典进行fuzz是一种强大的技术,可用于测试网络应用程序的不同部分。在ffuf
中,有三种主要模式可用于处理多个字典:clusterbomb、pitchfork和sniper。每种模式都有不同的用途,具体取决于你在fuzz过程中如何组合字典。
下面举例说明如何使用每种模式:
clusterbomb模式
clusterbomb模式会尝试多个字典中每种值的组合。当你需要测试输入参数的所有可能组合,比如同时尝试不同的用户名和密码。
例如
ffuf -w users.txt:USER -w passwords.txt:PASS -u https://example.com/login?username=USER&password=PASS --mode clusterbomb
在此模式下,ffuf
会尝试用户名和密码的所有可能组合,确保涵盖所有配对。适用于爆破账号密码或同时测试多个字段。
你可以对 JSON 请求的多个部分进行测试处理:
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
或者对目录名和文件名都进行测试处理,从而增加发现嵌套路径中隐藏路径的机会:
ffuf -w dirs.txt:DIR -w files.txt:FILE -u https://example.com/DIR/FILE
Pitchfork模式
Pitchfork模式以一对一的映射方式同时处理每个字典。它从第一个字典中提取第一个项目,从第二个字典中提取第一个项目,然后将它们配对在一起。这种模式非常适合测试匹配的输入对,例如用户名-密码对。
例如
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模式用于使用单个字典一次测试一个参数,而其他参数保持不变。该模式非常适合用于发现不同输入对请求特定部分的影响。
例如
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:每次使用单个字典测试一个参数,其他参数保持不变。
这些模式你可以自行灵活使用。
7.匹配返回特征
下面是一些使用 ffuf 匹配返回特征选项的示例:
匹配状态码
ffuf 匹配器的一个基本用法是使用-mc
查找具有特定状态代码的响应。例如,如果要查找返回200
状态代码的页面,可以使用
ffuf -u https://example.com/FUZZ -w wordlist.txt -mc 200
这只会显示状态代码为 200 的响应,过滤掉所有其他响应。
匹配响应大小
如果要根据响应的大小进行匹配,使用-ms
。例如你的目标响应大小正好是 1000 字节:
ffuf -u https://example.com/FUZZ -w wordlist.txt -ms 1000
你还可以匹配一个范围内的内容长度:
ffuf -u https://example.com/FUZZ -w wordlist.txt -ms 900-1100
该命令将匹配 900 至 1100 字节的响应。
字数匹配
你可以使用-mw
根据正文中的字数过滤回包。例如,如果你要查找字数正好为 50 的回包:
ffuf -u https://example.com/FUZZ -w wordlist.txt -mw 50
按响应行匹配
根据回包的行数进行匹配。使用-ml
选项可根据行数过滤回包。例如,如果你要查找行数正好为 10 行的回包:
ffuf -u https://example.com/FUZZ -w wordlist.txt -ml 10
通过这些匹配器选项,你可以对fuzz进行微调,以过滤掉不相关的结果,并专注于特定的响应模式。
Regex 匹配
有时,仅根据状态代码或大小进行过滤是不够的。ffuf 提供了 regex 匹配功能,让你只需要关注包含特定内容的响应。
ffuf -w /path/to/wordlist.txt -u https://example.com/FUZZ -mr "success|welcome"
此命令显示内容包含 "success "或 "welcome "的响应。当某些关键字典示有效或有漏洞的页面时,Regex 匹配就很有用了。
要匹配包含/...*/
等模式的响应(可识别隐藏文件或目录),可以使用
ffuf -u https://example.com/FUZZ -w wordlist.txt -mr '/..*/'
此命令将搜索包含句号和任意字符的响应。
8.速度限制
如果你正在对带有访问速度限制或时间限制的网络应用程序进行fuzz,那么 ffuf 的超时和速度限制选项可以帮助你管理请求而不被阻止。
ffuf -w /path/to/wordlist.txt -u https://example.com/FUZZ -rate 50 -timeout 5
在这种情况下,ffuf 将每秒最多发送 50 个请求,并最多等待 5 秒以获得响应。这对于规避有访问速度限制的目标的安全保护特别有用。
延迟
ffuf 可以调整发送请求的速度,以避免触发速度限制:
ffuf -w wordlist.txt -u https://example.com/FUZZ -t 2 -p 1
该命令将线程数 (-t) 设置为 2,并在请求之间引入 1 秒的延迟 (-p)。这样可以减少被防护的几率。
9.对 POST 请求进行fuzz
GET 请求是 ffuf 的默认设置,而测试 POST 请求则有助于测试表单和 API 端点。你可以使用-X
和-d
标志对 POST 请求的正文进行fuzz。
简单的 POST 数据fuzz
例如,测试登录表单中的用户名值:
ffuf -w usernames.txt -u https://example.com/login -X POST -d "username=FUZZ&password=admin"
该命令测试不同的用户名,同时保持密码不变,类似内网渗透中的密码喷洒,很有用。
测试 JSON POST 数据
如果目标使用基于 JSON 的 API,你可以在payload中加入 FUZZ 关键字,对 JSON 数据进行测试:
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:
ffuf -w tokens.txt -H "Authorization: Bearer FUZZ" -u https://example.com/api/resource
这将对不同的鉴权参数进行fuzz。
另一个例子--用于识别 X-Forwarded-For 或 User-Agent 等标头中的漏洞。
ffuf -w /path/to/wordlist.txt -u http://example.com -H "X-Forwarded-For: FUZZ"
该命令将 FUZZ 替换为页眉中字典的每个值,使你能够发现可能绕过安全检查或泄露内部细节的变化。
10.输出选项
完成fuzz后,把结果存下来以便日后分析或者其他操作。ffuf 允许以各种格式(如 JSON 或 CSV)输出。
ffuf -w /path/to/wordlist.txt -u https://example.com/FUZZ -o results.json -of json
这将以 JSON 格式存储输出,然后就可以用其他工具继续利用或进行手工测试。
你还可以 CSV 或 HTML 格式记录:
ffuf -w wordlist.txt -u https://example.com/FUZZ -o results.csv -of csv
要将输出保存为所有支持的格式,请使用
ffuf -w wordlist.txt -u https://example.com/FUZZ -o results -of all
在线参考:
这里还有一份在线参考:
https://www.mhtsec.com/tool/ffuf/
原文始发于微信公众号(棉花糖fans):啊?学姐,你这个工具还有更多玩法?
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论