ffuf-快速Web模糊测试器 dast-ffuf

ffuf 是一个用 Go 语言编写的快速 Web 模糊测试器,用于发现 Web 应用程序中的隐藏资源、测试参数和进行全面的 Web 应用程序侦察。

渗透测试 0 次安装 0 次浏览 更新于 2/27/2026

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 应用程序上发现隐藏资源:

  1. 从常见的目录词库开始:
    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
    
  2. 审查发现的目录(关注 200, 403 状态码)
  3. 在发现的目录中枚举文件:
    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
    
  4. 使用递归模式进行深度枚举:
    ffuf -u https://target.com/FUZZ \
      -w wordlist.txt \
      -recursion -recursion-depth 2 \
      -e .php,.html \
      -v
    
  5. 记录发现结果并测试发现的端点

工作流程 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: 虚拟主机和子域名发现

用于识别虚拟主机和子域名:

  1. 准备子域名词库(或使用 SecLists)
  2. 运行 vhost 模糊测试:
    ffuf -u https://target.com \
      -H "Host: FUZZ.target.com" \
      -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt \
      -fs 0  # 通过响应大小识别有效的 vhosts
    
  3. 通过比较响应大小/单词过滤结果
  4. 手动验证发现的 vhosts
  5. 在每个 vhost 上枚举目录
  6. 记录 vhost 配置和暴露的服务

工作流程 4: 认证端点模糊测试

用于测试登录表单和认证机制:

  1. 确定认证端点
  2. 模糊用户名:
    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"  # 匹配响应表示有效用户
    
  3. 对于确定的用户,模糊密码:
    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  # 过滤失败尝试
    
  4. 使用 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: 备份和敏感文件发现

用于发现暴露的备份文件和敏感数据:

  1. 创建常见备份模式的词库
  2. 模糊测试备份文件:
    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
    
  3. 测试常见敏感文件位置:
    ffuf -u https://target.com/FUZZ \
      -w /usr/share/seclists/Discovery/Web-Content/sensitive-files.txt \
      -mc 200,403
    
  4. 下载并分析发现的文件
  5. 按严重性分类报告发现结果

模糊测试模式

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 条件。从小词库开始,然后逐步扩大

集成点

侦察工作流程

  1. 子域名枚举(amass, subfinder)
  2. 端口扫描(nmap)
  3. 服务识别
  4. ffuf 目录/文件枚举
  5. 内容发现和分析
  6. 漏洞扫描

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 套件集成

  1. 使用 Burp 确定目标端点
  2. 导出有趣的请求
  3. 转换为 ffuf 命令以进行自动化模糊测试
  4. 将 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:测试存储跨站脚本

参考资料