FFUF网络模糊测试技能Skill ffuf-web-fuzzing

FFUF网络模糊测试技能提供使用FFUF工具进行渗透测试的专家级指导,涵盖目录发现、子域名枚举、参数模糊测试、POST数据模糊测试等,强调自动校准和认证测试,以提高Web安全评估效率。关键词:FFUF, 网络模糊测试, 渗透测试, Web安全, 自动校准, 认证测试, 漏洞挖掘。

渗透测试 0 次安装 0 次浏览 更新于 3/16/2026

名称: ffuf-web-fuzzing 描述: 在渗透测试中使用ffuf进行web模糊测试的专家指导,包括使用原始请求进行认证模糊测试、自动校准和结果分析

FFUF(更快模糊测试)技能

概述

FFUF是一个用Go编写的快速web模糊测试工具,设计用于在渗透测试中发现隐藏内容、目录、文件、子域名和测试漏洞。它比传统工具如dirb或dirbuster快得多。

安装

# 使用Go
go install github.com/ffuf/ffuf/v2@latest

# 使用Homebrew(macOS)
brew install ffuf

# 二进制下载
# 从下载:https://github.com/ffuf/ffuf/releases/latest

核心概念

FUZZ关键词

FUZZ关键词用作占位符,被来自您的单词列表的条目替换。您可以将其放置在任何位置:

  • 网址:https://target.com/FUZZ
  • 头部:-H "Host: FUZZ"
  • POST数据:-d "username=admin&password=FUZZ"
  • 使用自定义关键词的多个位置:-w wordlist.txt:CUSTOM 然后使用 CUSTOM 代替 FUZZ

多单词列表模式

  • clusterbomb:测试所有组合(默认)- 笛卡尔积
  • pitchfork:并行遍历单词列表(1对1匹配)
  • sniper:一次测试一个位置(用于多个FUZZ位置)

常见用例

1. 目录和文件发现

# 基本目录模糊测试
ffuf -w /path/to/wordlist.txt -u https://target.com/FUZZ

# 带有文件扩展名
ffuf -w /path/to/wordlist.txt -u https://target.com/FUZZ -e .php,.html,.txt,.pdf

# 彩色和详细输出
ffuf -w /path/to/wordlist.txt -u https://target.com/FUZZ -c -v

# 带有递归(查找嵌套目录)
ffuf -w /path/to/wordlist.txt -u https://target.com/FUZZ -recursion -recursion-depth 2

2. 子域名枚举

# 虚拟主机发现
ffuf -w /path/to/subdomains.txt -u https://target.com -H "Host: FUZZ.target.com" -fs 4242

# 注意:-fs 4242过滤大小为4242的响应(根据默认响应大小调整)

3. 参数模糊测试

# GET参数名称
ffuf -w /path/to/params.txt -u https://target.com/script.php?FUZZ=test_value -fs 4242

# GET参数值
ffuf -w /path/to/values.txt -u https://target.com/script.php?id=FUZZ -fc 401

# 多个参数
ffuf -w params.txt:PARAM -w values.txt:VAL -u https://target.com/?PARAM=VAL -mode clusterbomb

4. POST数据模糊测试

# 基本POST模糊测试
ffuf -w /path/to/passwords.txt -X POST -d "username=admin&password=FUZZ" -u https://target.com/login.php -fc 401

# JSON POST数据
ffuf -w entries.txt -u https://target.com/api -X POST -H "Content-Type: application/json" -d '{"name": "FUZZ", "key": "value"}' -fr "error"

# 模糊测试多个POST字段
ffuf -w users.txt:USER -w passes.txt:PASS -X POST -d "username=USER&password=PASS" -u https://target.com/login -mode pitchfork

5. 头部模糊测试

# 自定义头部
ffuf -w /path/to/wordlist.txt -u https://target.com -H "X-Custom-Header: FUZZ"

# 多个头部
ffuf -w /path/to/wordlist.txt -u https://target.com -H "User-Agent: FUZZ" -H "X-Forwarded-For: 127.0.0.1"

过滤和匹配

匹配器(包含结果)

  • -mc:匹配状态码(默认:200-299,301,302,307,401,403,405,500)
  • -ml:匹配行数
  • -mr:匹配正则表达式
  • -ms:匹配响应大小
  • -mt:匹配响应时间(例如,>100<100 毫秒)
  • -mw:匹配单词数

过滤器(排除结果)

  • -fc:过滤状态码(例如,-fc 404,403,401
  • -fl:过滤行数
  • -fr:过滤正则表达式(例如,-fr "error"
  • -fs:过滤响应大小(例如,-fs 42,4242
  • -ft:过滤响应时间
  • -fw:过滤单词数

自动校准(默认使用!)

关键: 除非有特定原因,否则始终使用 -ac。这在使用Claude分析结果时尤为重要,因为它大大减少噪音和误报。

# 自动校准 - 始终使用此选项
ffuf -w /path/to/wordlist.txt -u https://target.com/FUZZ -ac

# 每主机自动校准(对多个主机有用)
ffuf -w /path/to/wordlist.txt -u https://target.com/FUZZ -ach

# 自定义自动校准字符串(针对特定模式)
ffuf -w /path/to/wordlist.txt -u https://target.com/FUZZ -acc "404NotFound"

为什么 -ac 是必不可少的:

  • 自动检测并过滤重复的误报响应
  • 移除具有随机内容的动态网站的噪音
  • 使结果分析对人类和Claude都更容易
  • 防止数千个相同的404/403响应扰乱输出
  • 适应目标的特定行为

当Claude分析您的ffuf结果时,-ac 是强制性的 - 没有它,Claude将浪费时间筛选数千个误报,而不是找到有趣的异常。

速率限制和计时

速率控制

# 限制为每秒2个请求(隐身模式)
ffuf -w /path/to/wordlist.txt -u https://target.com/FUZZ -rate 2

# 添加请求之间的延迟(0.1到2秒随机)
ffuf -w /path/to/wordlist.txt -u https://target.com/FUZZ -p 0.1-2.0

# 设置并发线程数(默认:40)
ffuf -w /path/to/wordlist.txt -u https://target.com/FUZZ -t 10

时间限制

# 最大总执行时间(60秒)
ffuf -w /path/to/wordlist.txt -u https://target.com/FUZZ -maxtime 60

# 每个作业的最大时间(与递归一起使用有用)
ffuf -w /path/to/wordlist.txt -u https://target.com/FUZZ -maxtime-job 60 -recursion

输出选项

输出格式

# JSON输出
ffuf -w /path/to/wordlist.txt -u https://target.com/FUZZ -o results.json

# HTML输出
ffuf -w /path/to/wordlist.txt -u https://target.com/FUZZ -of html -o results.html

# CSV输出
ffuf -w /path/to/wordlist.txt -u https://target.com/FUZZ -of csv -o results.csv

# 所有格式
ffuf -w /path/to/wordlist.txt -u https://target.com/FUZZ -of all -o results

# 静默模式(无进度,仅结果)
ffuf -w /path/to/wordlist.txt -u https://target.com/FUZZ -s

# 使用tee管道到文件
ffuf -w /path/to/wordlist.txt -u https://target.com/FUZZ -s | tee results.txt

高级技术

使用原始HTTP请求(认证模糊测试的关键)

这是ffuf最强大的功能之一,特别是对于具有复杂头部、cookies或令牌的认证请求。

工作流程:

  1. 捕获完整的认证请求(来自Burp Suite、浏览器DevTools等)
  2. 将其保存到文件(例如,req.txt
  3. FUZZ 关键词替换您想要模糊测试的值
  4. 使用 --request 标志
# 从包含原始HTTP请求的文件
ffuf --request req.txt -w /path/to/wordlist.txt -ac

示例req.txt文件:

POST /api/v1/users/FUZZ HTTP/1.1
Host: target.com
User-Agent: Mozilla/5.0
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
Cookie: session=abc123xyz; csrftoken=def456
Content-Type: application/json
Content-Length: 27

{"action":"view","id":"1"}

用例:

  • 模糊测试具有复杂认证头部的认证端点
  • 测试带有JWT令牌的API端点
  • 使用CSRF令牌、会话cookies和自定义头部进行模糊测试
  • 测试需要特定User-Agent或Accept头部的端点
  • 带有认证的POST/PUT/DELETE请求

专业提示:

  • 您可以在多个位置放置FUZZ:URL路径、头部、主体
  • 如果需要,使用 -request-proto https(默认为https)
  • 始终使用 -ac 过滤认证的“未找到”或错误响应
  • 适用于IDOR测试:在认证上下文中模糊测试用户ID、文档ID等
# 常见认证模糊测试模式
ffuf --request req.txt -w user_ids.txt -ac -mc 200 -o results.json

# 使用自定义关键词的多个FUZZ位置
ffuf --request req.txt -w endpoints.txt:ENDPOINT -w ids.txt:ID -mode pitchfork -ac

代理使用

# HTTP代理(对Burp Suite有用)
ffuf -w /path/to/wordlist.txt -u https://target.com/FUZZ -x http://127.0.0.1:8080

# SOCKS5代理
ffuf -w /path/to/wordlist.txt -u https://target.com/FUZZ -x socks5://127.0.0.1:1080

# 通过代理重放匹配的请求
ffuf -w /path/to/wordlist.txt -u https://target.com/FUZZ -replay-proxy http://127.0.0.1:8080

Cookie和认证

# 使用cookies
ffuf -w /path/to/wordlist.txt -u https://target.com/FUZZ -b "sessionid=abc123; token=xyz789"

# 客户端证书认证
ffuf -w /path/to/wordlist.txt -u https://target.com/FUZZ -cc client.crt -ck client.key

编码

# URL编码
ffuf -w /path/to/wordlist.txt -u https://target.com/FUZZ -enc 'FUZZ:urlencode'

# 多个编码
ffuf -w /path/to/wordlist.txt -u https://target.com/FUZZ -enc 'FUZZ:urlencode b64encode'

测试漏洞

# SQL注入测试
ffuf -w sqli_payloads.txt -u https://target.com/page.php?id=FUZZ -fs 1234

# XSS测试
ffuf -w xss_payloads.txt -u https://target.com/search?q=FUZZ -mr "<script>"

# 命令注入
ffuf -w cmdi_payloads.txt -u https://target.com/execute?cmd=FUZZ -fr "error"

批量处理多个目标

# 处理多个URL
cat targets.txt | xargs -I@ sh -c 'ffuf -w wordlist.txt -u @/FUZZ -ac'

# 循环处理多个目标并保存结果
for url in $(cat targets.txt); do 
    ffuf -w wordlist.txt -u $url/FUZZ -ac -o "results_$(echo $url | md5sum | cut -d' ' -f1).json"
done

最佳实践

1. 始终使用自动校准

默认对每次扫描使用 -ac。这对于高效渗透测试是必须的:

ffuf -w wordlist.txt -u https://target.com/FUZZ -ac

2. 对认证使用原始请求

不要为复杂认证而挣扎于命令行标志。捕获完整请求并使用 --request

# 1. 从Burp/DevTools捕获认证请求
# 2. 保存到req.txt,并用FUZZ关键词替换
# 3. 使用-ac运行
ffuf --request req.txt -w wordlist.txt -ac -o results.json

3. 使用合适的单词列表

  • 目录发现:SecLists Discovery/Web-Content(raft-large-directories.txt, directory-list-2.3-medium.txt)
  • 子域名:SecLists Discovery/DNS(subdomains-top1million-5000.txt)
  • 参数:SecLists Discovery/Web-Content(burp-parameter-names.txt)
  • 用户名:SecLists Usernames
  • 密码:SecLists Passwords
  • 来源:https://github.com/danielmiessler/SecLists

4. 为隐身使用速率限制

使用 -rate 避免触发WAF/IDS或压垮服务器:

ffuf -w wordlist.txt -u https://target.com/FUZZ -rate 2 -t 10

5. 策略性过滤

  • 首先检查默认响应以识别常见响应大小、状态码或模式
  • 使用 -fs 按大小过滤或 -fc 按状态码过滤
  • 组合过滤器:-fc 403,404 -fs 1234

6. 适当保存结果

始终将结果保存到文件以供后续分析:

ffuf -w wordlist.txt -u https://target.com/FUZZ -o results.json -of json

7. 使用交互模式

在执行过程中按ENTER键进入交互模式,您可以在其中:

  • 动态调整过滤器
  • 保存当前结果
  • 重新启动扫描
  • 管理队列

8. 递归深度

小心递归深度以避免陷入无限循环或压垮服务器:

ffuf -w wordlist.txt -u https://target.com/FUZZ -recursion -recursion-depth 2 -maxtime-job 120

常见模式和单行命令

快速目录扫描

ffuf -w ~/wordlists/common.txt -u https://target.com/FUZZ -mc 200,301,302,403 -ac -c -v

带有扩展名的全面扫描

ffuf -w ~/wordlists/raft-large-directories.txt -u https://target.com/FUZZ -e .php,.html,.txt,.bak,.old -ac -c -v -o results.json

认证模糊测试(原始请求)

# 1. 将您的认证请求保存到req.txt,并使用FUZZ关键词
# 2. 运行:
ffuf --request req.txt -w ~/wordlists/api-endpoints.txt -ac -o results.json -of json

API端点发现

ffuf -w ~/wordlists/api-endpoints.txt -u https://api.target.com/v1/FUZZ -H "Authorization: Bearer TOKEN" -mc 200,201 -ac -c

带有自动校准的子域名发现

ffuf -w ~/wordlists/subdomains-top5000.txt -u https://FUZZ.target.com -ac -c -v

POST登录暴力破解

ffuf -w ~/wordlists/passwords.txt -X POST -d "username=admin&password=FUZZ" -u https://target.com/login -fc 401 -rate 5 -ac

带有认证的IDOR测试

# 使用req.txt,带有认证头部和FUZZ在ID参数中
ffuf --request req.txt -w numbers.txt -ac -mc 200 -fw 100-200

配置文件

创建 ~/.config/ffuf/ffufrc 用于默认设置:

[http]
headers = ["User-Agent: Mozilla/5.0"]
timeout = 10

[general]
colors = true
threads = 40

[matcher]
status = "200-299,301,302,307,401,403,405,500"

故障排除

太多误报

  • 使用 -ac 进行自动校准
  • 检查默认响应并使用 -fs 按大小过滤
  • 使用正则表达式过滤 -fr

太慢

  • 增加线程:-t 100
  • 减少单词列表大小
  • 如果不需要响应内容,使用 -ignore-body

被阻止

  • 降低速率:-rate 2
  • 添加延迟:-p 0.5-1.5
  • 减少线程:-t 10
  • 随机化User-Agent
  • 使用代理轮换

缺失结果

  • 检查是否过滤太激进
  • 使用 -mc all 查看所有响应
  • 暂时禁用自动校准
  • 使用详细模式 -v 查看正在发生什么

资源

快速参考卡

任务 命令模板
目录发现 ffuf -w wordlist.txt -u https://target.com/FUZZ -ac
子域名发现 ffuf -w subdomains.txt -u https://FUZZ.target.com -ac
参数模糊测试 ffuf -w params.txt -u https://target.com/page?FUZZ=value -ac
POST数据模糊测试 ffuf -w wordlist.txt -X POST -d "param=FUZZ" -u https://target.com/endpoint
带有扩展名 添加 -e .php,.html,.txt
过滤状态 添加 -fc 404,403
过滤大小 添加 -fs 1234
速率限制 添加 -rate 2
保存输出 添加 -o results.json
详细 添加 -c -v
递归 添加 -recursion -recursion-depth 2
通过代理 添加 -x http://127.0.0.1:8080

附加资源

本技能在 resources/ 目录中包含补充材料:

资源文件

  • WORDLISTS.md:SecLists单词列表的全面指南,针对不同场景的推荐列表、文件扩展名和快速参考模式
  • REQUEST_TEMPLATES.md:针对常见认证场景(JWT、OAuth、会话cookies、API密钥等)的预构建req.txt模板,带有使用示例

辅助脚本

  • ffuf_helper.py:Python脚本,用于帮助:
    • 分析ffuf JSON结果以发现异常和有趣发现
    • 从命令行参数创建req.txt模板文件
    • 为IDOR测试生成基于数字的单词列表

辅助脚本使用:

# 分析结果以找到有趣的异常
python3 ffuf_helper.py analyze results.json

# 创建认证请求模板
python3 ffuf_helper.py create-req -o req.txt -m POST -u "https://api.target.com/users" \
    -H "Authorization: Bearer TOKEN" -d '{"action":"FUZZ"}'

# 生成IDOR测试单词列表
python3 ffuf_helper.py wordlist -o ids.txt -t numbers -s 1 -e 10000

何时使用资源:

  • 用户需要单词列表推荐 → 参考WORDLISTS.md
  • 用户需要帮助处理认证请求 → 参考REQUEST_TEMPLATES.md
  • 用户想分析结果 → 使用ffuf_helper.py analyze
  • 用户需要生成req.txt → 使用ffuf_helper.py create-req
  • 用户需要IDOR的数字范围 → 使用ffuf_helper.py wordlist

给Claude的笔记

当帮助用户使用ffuf时:

  1. 始终在每个命令中包含 -ac - 这是高效渗透测试和结果分析必须的
  2. 当用户提到认证模糊测试或提供认证令牌/cookies时:
    • 建议创建一个 req.txt 文件,包含完整的HTTP请求
    • 展示如何在他们想要模糊测试的位置插入FUZZ
    • 使用 ffuf --request req.txt -w wordlist.txt -ac
  3. 始终推荐从 -ac 开始自动校准
  4. 根据任务建议从SecLists选择合适的单词列表
  5. 提醒用户对生产目标使用速率限制(-rate
  6. 鼓励将输出保存到文件以供文档:-o results.json
  7. 建议基于初始侦察的过滤策略
  8. 始终使用FUZZ关键词(区分大小写)
  9. 考虑隐身:降低线程、速率限制和延迟以保护敏感目标
  10. 对于渗透测试报告,使用 -of html-of csv 以提供客户友好的格式
  11. 当为用户分析ffuf结果时:
    • 假设他们使用了 -ac(如果没有,结果会太嘈杂)
    • 专注于异常:不同的状态码、响应大小、时间
    • 寻找有趣的端点:admin、api、backup、config、.git等
    • 标记潜在漏洞:错误消息、堆栈跟踪、版本信息
    • 建议对有趣发现进行后续模糊测试