尧图精选

ffuf实战:从目录爆破到Web模糊测试的高效工具指南

🕒 发布时间:2026/9/20 17:36:15 📁 来源:尧图网络
先说结论这几天我把 Kali 里常用的目录爆破工具挨个试了一圈最后留在终端里长期用的就是 ffuf。不是因为跟风而是它解决了我之前用 dirb、gobuster 时最头疼的几个问题跑得慢、输出乱、过滤条件写起来别扭。ffuf 全称 Fuzz Faster U Fool单看名字就知道这工具的性格——它就是把 Web 模糊测试这件事做到又快又利索。不管你是刚开始接触 Kali 的渗透方向新手还是已经在用 dirb/wfuzz 但觉得不够顺手的老手这篇文章都值得你花十分钟看完。今天这篇不是从零开始的工具文档翻译而是我实际使用中的总结ffuf 的爆破指令怎么组织、参数怎么搭配、遇到坑怎么排。我会直接从 Kali 环境讲起把目录爆破、子域名枚举、参数模糊测试这几个最常用的场景都过一遍顺便把我在真实目标上踩过的雷、试错出的经验也一并写进来。1. 为什么我放弃了 dirb 和 gobuster转投 ffuf先说个真实经历。以前我扫目录习惯用 dirb因为 Kali 自带、不用装命令也简单。但用久了就发现一个很烦的问题dirb 遇到 403、404 页面照样往结果里塞扫完几十条结果里真正有用的没几条还得一条条人工筛。后来换了 gobuster速度快了些但它的过滤语法和输出格式还是不够灵活尤其是在做参数发现和子域名枚举这种“不是单纯找路径”的场景时总觉得差口气。ffuf 的出现正好补上了这些缺口。它的核心设计理念其实很纯粹把“模糊测试”这件事拆成“替换点”和“字典”的组合你想测哪里就在 URL 里用FUZZ关键字标出来然后告诉它用什么字典去替换。这种设计带来的直接好处是一个工具能覆盖的场景变得非常多。拿我自己的使用频率来说ffuf 现在主要帮我干这几类活目录扫描跟 dirb/gobuster 一样枚举 Web 根目录下的可访问路径文件爆破配合扩展名字典找备份文件、配置文件、日志文件这类敏感资源子域名枚举通过修改 Host 头来做虚拟主机枚举比直接跑 DNS 字典更贴近真实部署情况参数模糊测试把参数名或参数值作为 FUZZ 点探测 Web 应用是否存在异常响应多关键字组合同时控制多个位置的字典替换排查逻辑漏洞或授权问题。所以你看ffuf 表面上是个“目录爆破工具”实际上它更像一个通用的 Web 模糊测试框架。理解了这一点你就知道为什么学习 ffuf 不能只停留在跑一条ffuf -u http://target/FUZZ -w wordlist.txt上。另外一个让我果断迁移的理由是性能。ffuf 用 Go 写的并发模型天然有优势默认跑起来的请求速率就能把老牌的 dirb 甩开一大截。加上它本身就为速度优化过即使不加一堆花哨参数扫描效率也很可观。对于需要快速摸清目标 Web 资产结构的场景来说时间就是优势这个理由非常现实。2. 先把环境理清楚Kali 里的 ffuf 与基础准备2.1 检查安装状态与版本Kali Linux 的默认软件源里已经收录了 ffuf如果你用的是近两年的完整版镜像大概率系统里已经装好了。不确定的话直接在终端里跑一下版本确认ffuf -V能看到版本号输出就说明已安装。如果提示command not found那就手动装一下过程中需要联网更新软件源sudo apt update sudo apt install ffuf -y装完之后再确认一遍版本。Kali 的软件包版本通常不是最新版但功能上完全够用。2.2 准备字典字典选不好什么都白搭ffuf 本身再快没有好的字典也是巧妇难为无米之炊。系统自带的字典路径通常在/usr/share/wordlists/下最常用的是dirb的 common 字典和dirbuster的目录列表字典。我日常最常用的几个/usr/share/wordlists/dirb/common.txt基础起步路径覆盖日常足够适合快速摸底/usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt量更大适合详细枚举/usr/share/wordlists/dirbuster/directory-list-2.3-small.txt轻量快速适合先打个草稿Kali 还在/usr/share/wordlists/下放了wfuzz目录里面有 inj、vulns 等专项字典做参数测试时可以用得上。如果你的 Kali 是精简安装没有这些字典也可以用一条命令补上sudo apt install wordlists dirb -y这里我多说一句自己的经验字典不是越大越好。刚开始学爆破的时候我也迷信“大字典扫得全”结果小带宽 VPS 上跑一个 200 万的字典扫到一半就想放弃。合理做法是先跑 small 或 common 快速摸一遍掌握目标的目录命名习惯和响应特征后再用 medium 甚至更具体的专项字典做二次深挖。顺序反了效率会低很多。2.3 测试环境的必要性直接对没有授权的站点做爆破是不合适的所以我建议把练习固定在本地靶场或授权测试环境里。Kali 用户最方便的选择是 Docker 部署 DVWA 或 bwapp 这类漏洞靶场。以 DVWA 为例在 Kali 上装好 Docker 后几条命令就能起来本地环境sudo apt install docker.io -y sudo systemctl start docker sudo docker run -dit -p 8080:80 vulnerables/web-dvwa装好之后浏览器访问http://127.0.0.1:8080就能看到登录页。后面我讲到的所有 ffuf 指令都以这样一套本地靶场为测试对象你跟着敲不会出问题。3. 核心爆破指令拆解从一条最基础命令讲起3.1 基础的目录爆破命令ffuf 最基本的用法是把FUZZ关键字放在 URL 里然后指定字典路径再指定输出显示条件。先看一条最常用的目录爆破指令ffuf -u http://127.0.0.1:8080/FUZZ -w /usr/share/wordlists/dirb/common.txt -mc 200,301,302,403这条命令的每个参数作用是什么我拆开说-u指定目标 URL其中FUZZ是占位符ffuf 会用字典里的每一行去替换它-w指定字典文件路径这是替身占位符的数据来源-mc是--match-codes的缩写表示只显示 HTTP 状态码在指定列表里的响应。这条命令跑完后输出结果里会包含状态码、响应大小、重定向地址等内容。通过指定-mc可以把大量 404 结果过滤掉只关注真正回显真实的路径。但这里有个新手容易踩的坑很多站点对不存在的路径统一返回 302 到登录页或者返回一个自定义的“页面不存在”页面。这种情况下单纯按状态码匹配是无效的因为 302 会把所有请求都收录进来。3.2 响应大小过滤fs 参数才是真正的神器在学习 ffuf 的初期我建议你先把-fs参数记住。它代表--filter-size作用是过滤掉响应大小等于指定值的记录。原理很简单如果站点的 404 页面固定是 2KB那么返回 2KB 的请求大概率就是无效请求干脆直接从结果里剔除。举个例子目标靶场对不存在的路径返回 404 页面页面大小恒定为 543 字节。那么这样一条命令就可以把 404 都过滤掉ffuf -u http://127.0.0.1:8080/FUZZ -w /usr/share/wordlists/dirb/common.txt -fs 543这个思路比用-mc更通用因为很多站点的 404 也返回 200 状态码。只看状态码会被骗看响应大小反而更客观。实际使用中我习惯组合用先用-mc 200,204,301,302,307,401,403留住所有可能在状态码层面有价值的记录再加一个-fs过滤掉公共的无效页面。这种组合的好处是既不会漏掉真实存在的路径又不会让结果被无效请求淹没。3.3 常用参数一览这些参数建议死记硬背ffuf 的参数不算少但常用的其实就那十几个。我把日常最高频的整理成一张表方便你查阅参数作用我的使用习惯-u指定目标 URL含 FUZZ 占位符必填占位符个数要与字典个数对应-w指定字典文件可同时指定多个用逗号分隔-mc匹配状态码默认是 200-299,401,403,405我常改成 200,302,401,403-fc过滤状态码用于排除固定响应码-fs过滤响应大小最实用强烈推荐-fw过滤单词数按页面中的单词数量过滤-fl过滤行数按页面行数过滤-t并发线程数默认 40本地靶场可以拉高到 100-s静默模式只显示最终结果不显示进度条-o输出结果到文件支持 json、csv、html 等格式-recursion递归扫描扫描到目录后自动继续深入-e附加扩展名自动尝试 .php、.bak、.txt 等后缀-H自定义请求头用于添加 Cookie、Host 等-X指定请求方法默认 GET可用 POST 等这里特别说明-t参数。线程数并非越大越好尤其对于带宽有限的目标站点过大的并发反而会导致请求超时和漏报。我本机靶场用 100 没问题但扫描公网目标的时候建议从 20 到 40 起步观察延迟再根据实际情况调整。4. 实战动作一用 ffuf 做目录与文件发现4.1 目录发现的标准姿势回到 DVWA 靶场。先跑一遍基础目录扫描确认环境的“正常响应”长什么样ffuf -u http://127.0.0.1:8080/FUZZ -w /usr/share/wordlists/dirb/common.txt -mc 200,301,302,403 -o dvwa_dir.json扫描结果里能看到/config、/docs、/login.php这些真实路径。输出到 json 格式的好处是方便后续用 Python 或 jq 做二次筛选。查看 json 内容可以用cat dvwa_dir.json | jq .results[] | {status, length, url}这样只看状态码、响应大小和完整 URL界面干净很多。如果你觉得每次看输出太乱可以再加个-s静默模式。但目录扫描有个天然问题像/admin这种常见的目录如果字典里没有你再怎么扫都扫不出来。所以目录发现不仅仅是跑一条命令更是一个不断更新字典、不断换思路的过程。4.2 文件发现用-e扩展名参数很多开发人员会把备份文件、配置文件遗留在 Web 目录下比如config.php.bak、db.sql、index.php~。目录爆破时如果没有加扩展名纯路径字典是永远扫不出这些文件的。ffuf 的-e参数就是干这个的它会将每个字典条目与指定后缀进行拼接重试。ffuf -u http://127.0.0.1:8080/FUZZ -w /usr/share/wordlists/dirb/common.txt -e .php,.bak,.sql,.txt -mc 200 -fs 543这条命令会在原有路径基础上附加.php、.bak等后缀重新请求。比如字典里有configffuf 就会依次测试config、config.php、config.bak等。不过这里有个细节要提醒-e .php只是把后缀拼在原始词条后面不会额外处理原本就带.php的条目。如果你字典里本来就既有config又有config.php那么实际请求中会存在重复这是正常现象不影响结果。4.3 递归扫描让他一口气扫完如果目录结构很深一层层手动扫太累。ffuf 提供了-recursion参数它会自动对扫描发现的目录再次发起扫描直到深度耗尽或字典枚举完。ffuf -u http://127.0.0.1:8080/FUZZ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -mc 200,301,401,403 -fs 543 -recursion -recursion-depth 2-recursion-depth 2是指递归两层。比如扫到/admin它会对/admin/FUZZ再扫一次扫到/admin/config可能还会继续但最多只到两层。递归扫描虽然方便但要注意请求量会随着层级指数级增长本来 10 万条字典的任务递归后可能变成 100 万条。所以递归深度建议从 1 开始时间充裕再加深。5. 实战动作二子域名枚举与虚拟主机爆破5.1 为什么用 ffuf 做子域名枚举传统的子域名枚举大多用 DNS 字典爆破也就是拿名字去解析看能不能解析出 IP。但这种方法在目标使用了通配符证书、泛解析或者内网 DNS 时很容易失效或产生大量误报。ffuf 的思路不太一样它不直接解析 DNS而是通过请求目标服务器并判断响应内容是否不同来确认某个子域名实际上更多是虚拟主机是否存在。这种方式在已经拿到服务器 IP、需要做内网或边缘资产梳理时特别有用。5.2 Host 头爆破实战假设你已知目标服务器 IP 为192.168.1.10上面跑着 Nginx你想知道这台服务器上绑定了哪些域名。可以用-H参数修改 Host 头配合子域名字典来枚举ffuf -u http://192.168.1.10/FUZZ -w /usr/share/wordlists/subdomains-top1million-5000.txt -H Host: FUZZ.target.com -fs 10982这里-H Host: FUZZ.target.com让每个请求的 Host 头都不同FUZZ位置会替换成字典里的子域名前缀。如果某个子域名确实配置在服务器上Nginx 会根据 Host 头返回不同的站点页面如果不存在通常会返回默认站点或错误页。通过-fs过滤掉默认错误页的大小就能筛出真实存在的子域名。这里特别注意目标服务器必须有 IP 访问权限或者你直接知道 IP 地址。另外泛解析会干扰判断如果一个不存在的子域名也返回了相同页面需要你额外用不同 Host 值多试几次找到默认页的响应大小再过滤。5.3 vhost 与普通目录爆破的区别很多人会把 vhost 枚举和目录枚举混为一谈其实两者完全不同。目录枚举是在同一 Host 下找不同路径vhost 枚举则是在同一 IP 下找不同 Host。对应到 ffuf 的用法上就是 FUZZ 放的位置不同一个放在 URL 路径里一个放在 Host 头里。理解了这个区别你在做资产收集的时候就不会把两个场景搞混。6. 实战动作三参数模糊测试与 POST 请求爆破6.1 GET 参数名发现很多 Web 应用的隐藏参数比如debug1、admintrue不在页面中直接暴露但后端逻辑里存在对它们的判断。通过 ffuf 对参数名做模糊测试有可能发现一些敏感开关。命令范式ffuf -u http://127.0.0.1:8080/vulnerabilities/exec/?FUZZ1 -w /usr/share/wordlists/wfuzz/general/big.txt -fs 543这里把原来的id参数替换成FUZZ逐个尝试常见参数名。如果某个参数名被后端接受返回的页面内容会明显不同通过响应大小就能看出来。6.2 POST 请求参数值爆破登录表单、接口调用中经常需要枚举参数值比如用户 ID。这时可以用-X POST指定请求方法用-d指定请求体同样用 FUZZ 做占位ffuf -u http://127.0.0.1:8080/api/user/info -X POST -d idFUZZ -H Content-Type: application/x-www-form-urlencoded -w /usr/share/wordlists/wfuzz/general/common.txt -fs 543如果是 JSON 格式接口把-d改成 JSON 字符串即可同时把Content-Type换成application/json。这里我说一个经验POST 爆破时最好先在 Burp Suite 里抓一个包把完整的数据格式和请求头原样搬过来减少因为格式不对导致的漏报。6.3 多字典组合使用FUZZ 不止一个ffuf 的厉害之处在于支持多个 FUZZ 占位符。比如接口同时受用户名和密码影响可以一次枚举两个维度ffuf -u http://127.0.0.1:8080/login -X POST -d userFUZZpassFUZ2Z -w users.txt:FUZZ -w pass.txt:FUZ2Z -fc 200注意这里第二个占位符叫FUZ2Z并不是拼写错误而是 ffuf 用于区分不同占位点的命名规则。你要想在同一个 URL 或请求体里放多个替换点只需使用不同的关键字名称即可。两个字典分别与占位符用冒号绑定ffuf 会做组合请求。这种多关键字组合爆破在后端依赖多个参数的权限校验、人机验证等场景下特别有用。不过请求量是指数上涨的两个 1000 行的字典组合起来就是百万级请求务必控制好字典大小和线程数。7. 常见坑位与排查思路遇到问题别慌先看这表我用 ffuf 的过程中踩过的坑不少有些是工具细节有些是思路误区。整理成表格分享给你希望能帮你少走弯路现象可能原因解决办法结果里有大段重复相似记录站点将不存在路径统一重定向或返回相同页面用-fs过滤固定响应大小加-recursion后任务量爆炸扫描到了大量目录递归深度太大降低-recursion-depth或改用手动二次扫描输出文件很大内容难读结果没有合理过滤先加-mc和-fs再考虑输出文件用了大字典但扫得特别慢线程数过低或目标网络延迟高逐步调高-t观察响应时间控制节奏某些路径明明是存在的却扫不出字典里没有该词条换更大的专用字典或补充自定义单词子域名爆破时结果全是默认页Host 头没有正确对应到目标服务器确认服务器 IP 正确过滤默认页响应大小使用-H Host: FUZZ时请求头冲突部分站点强制 HTTPS 或对 Host 头敏感换 HTTPS 协议或修改其他请求头配合除了这个表我再多说两个细节。第一个是 CtrlC 之后的处理ffuf 会在中断时输出当前已经完成的结果摘要你可以根据响应包大小判断当前扫描的大致质量不用怕中断丢数据。第二个是输出格式生产环境里建议用-o result.json保存完整结果配合-of json或直接看后缀名自动识别格式。这比盯着终端看更可靠。还有很多人会忽略的ffuf 默认跟随重定向参数是-r不开这个参数时遇到 301/302 它只是记录状态码不会去请求 Location 指向的新地址。对于想完整梳理目录结构的场景建议显式加-r让 ffuf 跟随重定向但也要注意垃圾重定向导致的结果膨胀。8. 我的几条实用建议算是给你的一份简版清单用这个工具学到一个很朴素但重要的道理爆破指令本身很短难的是理解目标返回的每一个字节代表什么。ffuf 的价值在于把大量请求快速打出去但最终做判断的人还是你自己。所以我建议你在练习时不要只看结果列表要主动把几个典型响应抓下来对比正常页面和异常页面的差异搞清楚 200、302、403 各自的含义在你的目标环境里是什么。另一个建议是养成用字典组合的习惯。ffuf 支持自定义扩展名、自定义请求头、多占位符你完全可以根据目标的类型拼装出专属指令。比如都是做目录扫描针对 Nginx 部署的 PHP 站点我会用.php扩展名加备份文件后缀组合针对前后端分离的站点我会更关注api/路径、swagger、actuator这类资源。最后再分享一个我自己的小技巧每次跑完一轮扫描我会顺手把结果里新增的有效路径和当时用的指令保存成一个 markdown 笔记。这样后续做同类目标时可以直接翻出之前的字典组合和过滤条件来用。时间久了你的积累会比任何现成工具都值钱。如果你刚开始接触 ffuf也不用贪多先把目录爆破、响应过滤、-fs这三个点吃透再逐步叠加其他参数就已经能覆盖大部分日常需求了。
上一篇/下一篇内容由系统自动关联 返回资讯列表 →