跳至内容

目录与参数 Fuzzing

Fuzzing(模糊测试)是漏洞挖掘里"用字典暴力探测未知"的核心技能——把字典里的每一项替换到请求的某个位置,根据响应差异发现隐藏的目录、文件、参数和子域名。这篇以 Kali 自带的高速工具 ffuf 为主线,讲透目录爆破、参数发现、虚拟主机枚举,以及如何用过滤器从海量响应里筛出有价值的结果。

Fuzzing 会向目标发送大量请求,只能对授权目标或自建靶场执行,否则等同于攻击。注意控制并发,避免压垮目标。

Fuzzing 的核心思想

所有 Fuzzing 工具都在做同一件事:在请求里放一个占位符,用字典逐项替换,发请求,再根据响应区分"存在/不存在"。区别只在占位符放在哪:

放置位置发现什么例子
URL 路径隐藏目录、文件/admin/backup.zip
URL 参数名隐藏参数?debug=1?id=
Host 头虚拟主机、内部站点同 IP 上的其它域名
子域名子域名枚举dev.target.com
POST 数据隐藏字段表单未公开的字段

难点不在发请求,而在从成千上万条响应里把有意义的那几条筛出来——这就要靠过滤器。

ffuf 基础用法

ffuf(Fuzz Faster U Fool)是 Go 写的高速 Fuzzer,用 FUZZ 关键字标记占位符。

# 目录爆破:FUZZ 出现在 URL 路径处
ffuf -w /usr/share/seclists/Discovery/Web-Content/common.txt \
  -u https://target.com/FUZZ

# 指定扩展名,同时探测文件
ffuf -w wordlist.txt -u https://target.com/FUZZ -e .php,.bak,.zip,.txt

# 控制速度:-t 并发线程,-rate 每秒请求数,-p 请求间隔
ffuf -w wordlist.txt -u https://target.com/FUZZ -t 40 -rate 100

用过滤器筛选结果

这是 ffuf 的精髓。可以匹配(match,保留)过滤(filter,剔除),依据状态码、大小、字数、行数、正则:

# 只保留 200 和 301/302(-mc 匹配状态码)
ffuf -w wordlist.txt -u https://target.com/FUZZ -mc 200,301,302

# 过滤掉响应大小为 4242 字节的(通常是统一的 404 页面)
ffuf -w wordlist.txt -u https://target.com/FUZZ -fs 4242

# 过滤掉特定字数 / 行数
ffuf -w wordlist.txt -u https://target.com/FUZZ -fw 12 -fl 5

# 用正则过滤响应内容
ffuf -w wordlist.txt -u https://target.com/FUZZ -fr "Not Found"
参数含义匹配版
-fc过滤状态码-mc
-fs过滤响应大小-ms
-fw过滤字数-mw
-fl过滤行数-ml
-fr过滤正则-mr
很多站点对不存在的路径返回 200 + 统一"软 404"页面,靠状态码区分不了。这时先发一个肯定不存在的路径看响应大小/字数,再用 -fs / -fw 把这个固定大小过滤掉,剩下的就是真实存在的内容。这是用 ffuf 的关键技巧。

参数发现

很多漏洞藏在未公开的参数里(调试开关、隐藏功能)。把 FUZZ 放到参数名位置:

# GET 参数名爆破,过滤掉无效参数的统一响应大小
ffuf -w /usr/share/seclists/Discovery/Web-Content/burp-parameter-names.txt \
  -u "https://target.com/page?FUZZ=test" -fs 1234

# POST 参数发现
ffuf -w params.txt -u https://target.com/api \
  -X POST -d "FUZZ=test" -H "Content-Type: application/x-www-form-urlencoded" -fs 0

专用工具 arjun 也擅长参数发现,可作为补充。

子域名与虚拟主机枚举

# 虚拟主机爆破:FUZZ 放在 Host 头,发现同 IP 上的其它站点
ffuf -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt \
  -u https://target.com -H "Host: FUZZ.target.com" -fs 1234

# 子域名爆破(基于 DNS 解析)也可用 ffuf 配合 -u 指向各子域
ffuf -w subdomains.txt -u https://FUZZ.target.com -mc 200,301,302,403

虚拟主机爆破能发现没有公开 DNS 记录、但在同一服务器上托管的内部站点,是常被忽视的攻击面。

多位置同时 Fuzz

ffuf 支持多个关键字组合,例如同时爆用户名和密码:

ffuf -w users.txt:USER -w pass.txt:PASS \
  -u https://target.com/login -X POST \
  -d "username=USER&password=PASS" \
  -mode clusterbomb -fc 401

clusterbomb 模式遍历两个字典的所有组合,pitchfork 则按行一一对应。

其它常用工具

工具特点
feroxbusterRust 编写,自动递归目录,速度快,Kali 可装
gobuster经典目录/DNS/vhost 爆破工具
dirsearchPython,内置优秀字典,对扩展名处理友好
wfuzzffuf 的前辈,功能全但更慢

工具选型不必纠结,理解"占位符 + 字典 + 过滤响应"的思想后,它们都是一回事。

防御视角

  • 统一错误响应:存在与不存在的资源返回一致的状态码和页面,增加攻击者区分难度。
  • 限速与 WAF:对短时间高频请求的源 IP 限速/封禁,识别 ffuf 等工具的特征 UA 和访问模式。
  • 不暴露敏感路径:删除线上环境的备份文件(.bak/.zip/.git)、调试接口、默认后台路径。
  • 目录权限:禁止目录列举(directory listing),敏感目录加认证。
最后更新于