ffuf - 快速Web模糊测试器
概述
ffuf 是一个用 Go 语言编写的快速 Web 模糊测试器,旨在发现隐藏资源、测试参数和执行全面的 Web 应用程序侦察。它使用 FUZZ 关键词作为词库条目的占位符,支持高级过滤、多种模糊测试模式和递归扫描,以进行彻底的安全评估。
安装
# 使用 Go
go install github.com/ffuf/ffuf/v2@latest
# 使用包管理器
# Debian/Ubuntu
apt install ffuf
# macOS
brew install ffuf
# 或从 GitHub 发布版下载预编译的二进制文件
快速开始
基本目录模糊测试:
# 目录发现
ffuf -u https://example.com/FUZZ -w /usr/share/wordlists/dirb/common.txt
# 文件发现与扩展名
ffuf -u https://example.com/FUZZ -w wordlist.txt -e .php,.html,.txt
# 虚拟主机发现
ffuf -u https://example.com -H "Host: FUZZ.example.com" -w subdomains.txt
核心工作流程
工作流程 1: 目录和文件枚举
用于在 Web 应用程序上发现隐藏资源:
- 从常见的目录词库开始:
ffuf -u https://target.com/FUZZ \ -w /usr/share/seclists/Discovery/Web-Content/common.txt \ -mc 200,204,301,302,307,401,403 \ -o results.json - 审查发现的目录(关注 200, 403 状态码)
- 在发现的目录中枚举文件:
ffuf -u https://target.com/admin/FUZZ \ -w /usr/share/seclists/Discovery/Web-Content/raft-small-files.txt \ -e .php,.bak,.txt,.zip \ -mc all -fc 404 - 使用递归模式进行深度枚举:
ffuf -u https://target.com/FUZZ \ -w wordlist.txt \ -recursion -recursion-depth 2 \ -e .php,.html \ -v - 记录发现结果并测试发现的端点
工作流程 2: 参数模糊测试(GET/POST)
进度: [ ] 1. 确定参数测试的目标端点 [ ] 2. 模糊 GET 参数名称以发现隐藏参数 [ ] 3. 模糊参数值以发现注入漏洞 [ ] 4. 使用 JSON/表单数据测试 POST 参数 [ ] 5. 应用适当的过滤器以减少误报 [ ] 6. 分析响应以发现异常和漏洞 [ ] 7. 手动验证发现结果 [ ] 8. 记录易受攻击的参数和有效载荷
系统地完成每个步骤。检查完成的项目。
GET 参数名称模糊测试:
ffuf -u https://target.com/api?FUZZ=test \
-w /usr/share/seclists/Discovery/Web-Content/burp-parameter-names.txt \
-fs 0 # 根据空响应过滤
GET 参数值模糊测试:
ffuf -u https://target.com/api?id=FUZZ \
-w payloads.txt \
-mc all
POST 数据模糊测试:
# 表单数据
ffuf -u https://target.com/login \
-X POST \
-d "username=admin&password=FUZZ" \
-w passwords.txt \
-H "Content-Type: application/x-www-form-urlencoded"
# JSON 数据
ffuf -u https://target.com/api/login \
-X POST \
-d '{"username":"admin","password":"FUZZ"}' \
-w passwords.txt \
-H "Content-Type: application/json"
工作流程 3: 虚拟主机和子域名发现
用于识别虚拟主机和子域名:
- 准备子域名词库(或使用 SecLists)
- 运行 vhost 模糊测试:
ffuf -u https://target.com \ -H "Host: FUZZ.target.com" \ -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt \ -fs 0 # 通过响应大小识别有效的 vhosts - 通过比较响应大小/单词过滤结果
- 手动验证发现的 vhosts
- 在每个 vhost 上枚举目录
- 记录 vhost 配置和暴露的服务
工作流程 4: 认证端点模糊测试
用于测试登录表单和认证机制:
- 确定认证端点
- 模糊用户名:
ffuf -u https://target.com/login \ -X POST \ -d "username=FUZZ&password=test123" \ -w usernames.txt \ -H "Content-Type: application/x-www-form-urlencoded" \ -mr "Invalid password|Incorrect password" # 匹配响应表示有效用户 - 对于确定的用户,模糊密码:
ffuf -u https://target.com/login \ -X POST \ -d "username=admin&password=FUZZ" \ -w /usr/share/seclists/Passwords/Common-Credentials/10-million-password-list-top-1000.txt \ -H "Content-Type: application/x-www-form-urlencoded" \ -fc 401,403 # 过滤失败尝试 - 使用 clusterbomb 模式进行组合用户名/密码模糊测试:
ffuf -u https://target.com/login \ -X POST \ -d "username=FUZZ1&password=FUZZ2" \ -w usernames.txt:FUZZ1 \ -w passwords.txt:FUZZ2 \ -mode clusterbomb
工作流程 5: 备份和敏感文件发现
用于发现暴露的备份文件和敏感数据:
- 创建常见备份模式的词库
- 模糊测试备份文件:
ffuf -u https://target.com/FUZZ \ -w backup-files.txt \ -e .bak,.backup,.old,.zip,.tar.gz,.sql,.7z \ -mc 200 \ -o backup-files.json - 测试常见敏感文件位置:
ffuf -u https://target.com/FUZZ \ -w /usr/share/seclists/Discovery/Web-Content/sensitive-files.txt \ -mc 200,403 - 下载并分析发现的文件
- 按严重性分类报告发现结果
模糊测试模式
ffuf 支持多种模糊测试模式,以适应不同的攻击场景:
Clusterbomb 模式 - 所有词库的笛卡尔积(默认):
ffuf -u https://target.com/FUZZ1/FUZZ2 \
-w dirs.txt:FUZZ1 \
-w files.txt:FUZZ2 \
-mode clusterbomb
测试每种组合:dir1/file1, dir1/file2, dir2/file1, dir2/file2
Pitchfork 模式 - 词库的并行迭代:
ffuf -u https://target.com/login \
-X POST \
-d "username=FUZZ1&password=FUZZ2" \
-w users.txt:FUZZ1 \
-w passwords.txt:FUZZ2 \
-mode pitchfork
测试配对:user1/pass1, user2/pass2(在最短词库停止)
Sniper 模式 - 一个词库,多个位置:
ffuf -u https://target.com/FUZZ \
-w wordlist.txt \
-mode sniper
标准单词库模糊测试。
过滤和匹配
有效的过滤对于减少噪声至关重要:
匹配过滤器(仅显示匹配的):
-mc 200,301- 匹配 HTTP 状态码-ms 1234- 匹配响应大小-mw 100- 匹配单词数量-ml 50- 匹配行数-mr "success|admin"- 匹配响应中的正则表达式模式
过滤选项(排除匹配的):
-fc 404,403- 过滤状态码-fs 0,1234- 过滤响应大小-fw 0- 过滤单词数量-fl 0- 过滤行数-fr "error|not found"- 过滤正则表达式模式
自动校准:
# 自动过滤基线响应
ffuf -u https://target.com/FUZZ -w wordlist.txt -ac
常见模式
模式 1: API 端点发现
发现 REST API 端点:
# 枚举 API 路径
ffuf -u https://api.target.com/v1/FUZZ \
-w /usr/share/seclists/Discovery/Web-Content/api/api-endpoints.txt \
-mc 200,201,401,403 \
-o api-endpoints.json
# 模糊测试 API 版本
ffuf -u https://api.target.com/FUZZ/users \
-w <(seq 1 10 | sed 's/^/v/') \
-mc 200
模式 2: 扩展名模糊测试
测试多个文件扩展名:
# 在已知文件上暴力扩展名
ffuf -u https://target.com/admin.FUZZ \
-w /usr/share/seclists/Discovery/Web-Content/web-extensions.txt \
-mc 200
# 或使用 -e 标志进行多个扩展名
ffuf -u https://target.com/FUZZ \
-w filenames.txt \
-e .php,.asp,.aspx,.jsp,.html,.bak,.txt
模式 3: 限速模糊测试
尊重速率限制,避免检测:
# 在请求之间添加延迟
ffuf -u https://target.com/FUZZ \
-w wordlist.txt \
-p 0.5-1.0 # 随机延迟 0.5-1.0 秒
# 限制并发请求
ffuf -u https://target.com/FUZZ \
-w wordlist.txt \
-t 5 # 仅 5 个并发线程
模式 4: 自定义头部模糊测试
模糊 HTTP 头部以发现安全配置错误:
# 模糊自定义头部
ffuf -u https://target.com/admin \
-w headers.txt:HEADER \
-H "HEADER: true" \
-mc all
# 模糊头部值
ffuf -u https://target.com/admin \
-H "X-Forwarded-For: FUZZ" \
-w /usr/share/seclists/Fuzzing/IPs.txt \
-mc 200
模式 5: Cookie 模糊测试
测试基于 cookie 的认证和会话管理:
# 模糊 cookie 值
ffuf -u https://target.com/dashboard \
-b "session=FUZZ" \
-w session-tokens.txt \
-mc 200
# 模糊 cookie 名称
ffuf -u https://target.com/admin \
-b "FUZZ=admin" \
-w cookie-names.txt
输出格式
保存结果为多种格式:
# JSON 输出(推荐用于解析)
ffuf -u https://target.com/FUZZ -w wordlist.txt -o results.json -of json
# CSV 输出
ffuf -u https://target.com/FUZZ -w wordlist.txt -o results.csv -of csv
# HTML 报告
ffuf -u https://target.com/FUZZ -w wordlist.txt -o results.html -of html
# 所有格式
ffuf -u https://target.com/FUZZ -w wordlist.txt -o results -of all
安全考虑
- 敏感数据处理:发现的文件可能包含凭据、API 密钥或 PII。安全地处理发现结果,并负责任地报告
- 访问控制:仅在获得适当授权的情况下对应用程序进行模糊测试。在测试第三方系统之前获得书面许可
- 审计日志:记录所有模糊测试活动,包括目标、使用的词库和发现结果,以符合合规性和审计跟踪
- 合规性:确保模糊测试活动符合漏洞赏金计划规则、渗透测试协议和法律要求
- 安全默认值:使用合理的速率限制以避免 DoS 条件。从小词库开始,然后逐步扩大
集成点
侦察工作流程
- 子域名枚举(amass, subfinder)
- 端口扫描(nmap)
- 服务识别
- ffuf 目录/文件枚举
- 内容发现和分析
- 漏洞扫描
CI/CD 安全测试
将 ffuf 集成到自动化安全管道中:
# CI/CD 脚本
#!/bin/bash
set -e
# 运行目录枚举
ffuf -u https://staging.example.com/FUZZ \
-w /wordlists/common.txt \
-mc 200,403 \
-o ffuf-results.json \
-of json
# 解析结果,如果发现敏感文件则失败
if grep -q "/.git/\|/backup/" ffuf-results.json; then
echo "ERROR: Sensitive files exposed!"
exit 1
fi
与 Burp 套件集成
- 使用 Burp 确定目标端点
- 导出有趣的请求
- 转换为 ffuf 命令以进行自动化模糊测试
- 将 ffuf 结果导入回 Burp 进行手动测试
故障排除
问题:太多误报
解决方案:使用自动校准或手动过滤:
# 自动校准
ffuf -u https://target.com/FUZZ -w wordlist.txt -ac
# 通过大小手动过滤
ffuf -u https://target.com/FUZZ -w wordlist.txt -fs 1234,5678
问题:速率限制或阻止
解决方案:减少并发并添加延迟:
ffuf -u https://target.com/FUZZ \
-w wordlist.txt \
-t 1 \
-p 2.0 \
-H "User-Agent: Mozilla/5.0..."
问题:大词库耗时太长
解决方案:从小的、针对性的词库开始:
# 使用前 1000 而不是完整列表
head -1000 /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt > small.txt
ffuf -u https://target.com/FUZZ -w small.txt
问题:遗漏发现内容
解决方案:使用多个扩展名进行测试,并匹配代码:
ffuf -u https://target.com/FUZZ \
-w wordlist.txt \
-e .php,.html,.txt,.asp,.aspx,.jsp \
-mc all \
-fc 404
OWASP 测试集成
将 ffuf 使用映射到 OWASP 测试指南类别:
- WSTG-CONF-04:审查旧备份和未引用文件
- WSTG-CONF-05:枚举基础设施和应用程序管理界面
- WSTG-CONF-06:测试 HTTP 方法
- WSTG-IDENT-01:测试角色定义(目录枚举)
- WSTG-ATHZ-01:测试目录遍历/文件包含
- WSTG-INPVAL-01:测试反射跨站脚本
- WSTG-INPVAL-02:测试存储跨站脚本