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 releases下载预编译的二进制文件
快速开始
基本目录模糊测试:
# 目录发现
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/form数据测试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:测试存储型跨站脚本攻击