关于 ffuf-web-fuzzing
ffuf-web-fuzzing 为获授权的渗透测试人员提供 ffuf 使用指导,用于发现网页路径、子域名、API 端点及参数行为。内容涵盖认证请求、扫描控制和 JSON 结果分析,并强调授权确认与生产环境限速。
主要功能
- 01指导目录和文件发现
- 02子域名与 API 端点模糊测试
- 03使用原始请求进行认证测试
- 04字典、过滤与限速建议
- 05分析 JSON 结果及异常
- 06扫描前确认授权
适用场景
- 01发现授权目标上的网页路径
- 02使用 Bearer token 测试 API 端点
- 03通过捕获的会话测试认证请求
- 04检查保存结果中的异常响应
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ trailofbits/ skills-curated --skill ffuf-web-fuzzing安装后在 Claude Code 中输入/ffuf-web-fuzzing确认已加载。
附带文件references/request-templates.mdreferences/wordlists.md
详细介绍
FFUF Web 模糊测试
在获得授权的渗透测试中有效使用 ffuf(Fuzz Faster U Fool)的指南。
前提条件
必须安装 ffuf:brew install ffuf(macOS)或 go install github.com/ffuf/ffuf/v2@latest
适用场景
- 对 Web 目标进行目录、文件或子域名发现
- 对 API 端点、参数或 POST 数据进行模糊测试
- 使用原始 HTTP 请求进行经过身份验证的模糊测试
- 分析 ffuf JSON 输出,查找异常和有趣的发现
- 制定模糊测试策略(词表选择、过滤、速率限制)
- 使用经过身份验证的会话进行 IDOR 测试
不适用场景
- 目标系统不在授权范围内,或授权情况不明确
- 被动侦察更合适(请改用 OSINT 工具)
- 目标是生产系统,且尚未配置速率限制
- 需要完整的漏洞扫描器(请使用 Burp Suite、Nuclei 等)
- 测试需要多步交互的逻辑缺陷
应当拒绝的理由
- “自动校准是可选的”——
-ac是必需的。没有它,结果会被误报淹没,分析工作也会白费。 - “线程越多,结果越快”——使用
-t 200猛烈攻击目标会触发 WAF、导致你被封锁,还可能使预发布环境崩溃。针对生产目标,请从-t 10 -rate 2开始。 - “我之后再过滤”——扫描前就应设置过滤条件。使用 22 万条词表运行扫描,却不设过滤条件,然后再试图从噪声中 grep 出结果,这完全本末倒置。
- “默认词表就够了”——词表选择是最重要的决定。通用词表会漏掉特定技术对应的路径。请参阅 references/wordlists.md。
- “原始请求太麻烦了”——进行经过身份验证的模糊测试时,
--request req.txt比串联使用-H和-b标志更简单可靠。捕获一次,多次进行模糊测试。
关键规则
- 始终使用
-ac(自动校准),除非有具体且记录在案的理由不使用 - 始终保存输出,使用
-o results.json以便后续分析 - 对生产目标进行速率限制,使用
-rate和-t标志 - 进行身份验证时使用
--request——原始请求文件优于命令行标头串联 - 先确认授权——运行任何扫描前,确认用户拥有针对该目标的书面许可。如不明确,请先询问。
核心概念
FUZZ 关键字
# In URL path
ffuf -w wordlist.txt -u https://target.com/FUZZ -ac
# In headers
ffuf -w wordlist.txt -u https://target.com -H "Host: FUZZ.target.com" -ac
# In POST body
ffuf -w wordlist.txt -X POST -d "user=admin&pass=FUZZ" -u https://target.com/login -ac
# Multiple positions with custom keywords
ffuf -w endpoints.txt:EP -w ids.txt:ID -u https://target.com/EP/ID -mode pitchfork -ac
自动校准
-ac 会自动检测并过滤重复出现的误报响应。它会根据目标的特定行为进行调整,并去除动态内容带来的噪声。
ffuf -w wordlist.txt -u https://target.com/FUZZ -ac # Standard
ffuf -w wordlist.txt -u https://target.com/FUZZ -ach # Per-host (multi-host scans)
ffuf -w wordlist.txt -u https://target.com/FUZZ -acc "404" # Custom calibration string
常见模式
目录发现
ffuf -w /opt/SecLists/Discovery/Web-Content/raft-large-directories.txt \
-u https://target.com/FUZZ -e .php,.html,.txt,.bak \
-ac -c -v -o results.json
子域名枚举
ffuf -w /opt/SecLists/Discovery/DNS/subdomains-top1million-5000.txt \
-u https://FUZZ.target.com -ac -c -v -o results.json
API 端点发现
ffuf -w /opt/SecLists/Discovery/Web-Content/api/api-endpoints.txt \
-u https://api.target.com/v1/FUZZ \
-H "Authorization: Bearer YOUR_TOKEN_HERE" -mc 200,201 -ac -c
使用原始请求进行经过身份验证的模糊测试
捕获完整的经过身份验证的请求,保存为 req.txt,并插入 FUZZ:
POST /api/v1/users/FUZZ HTTP/1.1
Host: target.com
Authorization: Bearer YOUR_TOKEN_HERE
Cookie: session=YOUR_SESSION_ID
Content-Type: application/json
{"action":"view","id":"1"}
ffuf --request req.txt -w wordlist.txt -ac -o results.json
有关涵盖 Bearer 令牌、会话 Cookie、API 密钥和 GraphQL 的预构建模板,请参阅 references/request-templates.md。
经过身份验证的模糊测试:Agent 工作流
经过身份验证的模糊测试需要真实凭据,Agent 无法独立获取这些凭据。用户提出经过身份验证的模糊测试时:
- 请用户提供以下其中一项:
- 已包含身份验证标头的原始 HTTP 请求文件(
req.txt) - 来自浏览器 DevTools 的 curl 命令(将其转换为
req.txt格式) - 单独的凭据(Bearer 令牌、会话 Cookie、API 密钥)
- 已包含身份验证标头的原始 HTTP 请求文件(
- 如果用户提供 curl 命令,请将其转换为原始 HTTP 请求格式并写入
req.txt - 如果用户提供单独的凭据,请使用 references/request-templates.md 中的模板,并替换为真实值
- 切勿伪造或猜测身份验证令牌
IDOR 测试
ffuf --request req.txt -w <(seq 1 10000) -ac -mc 200 -o idor_results.json
速率限制
| 环境 | 标志 | 说明 |
|---|---|---|
| 生产环境(隐蔽模式) | -rate 2 -t 10 | 避免触发 WAF |
| 生产环境(普通模式) | -rate 10 -t 20 | 平衡配置 |
| 预发布/开发环境 | -rate 50 -t 40 | 速度更快 |
| 本地/实验室 | 无限制,-t 100 | 最高速度 |
分析结果
将输出保存为 JSON(-o results.json),然后读取文件并重点关注:
- 异常状态码 —— 除基准状态码 404/403 外的任何状态码
- 大小异常值 —— 响应大小明显大于或小于平均值
- URL 中的有趣关键词 —— admin、api、backup、config、.git、.env
- 时间异常 —— 响应缓慢可能表示存在 SQL 注入或繁重的处理操作
- 后续目标 —— 有趣的发现值得进行更深入的模糊测试
当自动校准不足以满足需求时,使用 -fs 按响应大小筛选,并使用 -fc 按状态码筛选。运行 ffuf -h 查看完整的匹配/筛选标志列表。
参考资料
评论
支持 Markdown