Burp Suite 里的 Intruder,我几乎每天都要碰。不管你是把一个登录接口丢进去做弱口令验证,还是想把某个业务参数遍历一遍看有没有越权,本质上都在用 Intruder 的同一套机制:手动标记位置、配置 payload 生成规则、批量发送、对比响应。但这个模块里最容易让人迷糊的,不是攻击类型,而是 Payload 类型那一长串选项。
我见过不少人,用了好几个月 Intruder,始终只在 Simple list 里导入字典,剩下那些 Custom iterator、Character blocks、Recursive grep 基本没碰过。这不怪大家,因为大多数人把 Intruder 当成“爆破工具”来用,没把它当成“请求生成引擎”来理解。这篇文章我就把 Intruder 里所有 Payload 类型完整拆一遍:底层在做什么、适合什么场景、参数怎么配、有哪些坑。最后用三个实战场景把完整配置过程走一遍。适合已经在用 Burp Suite 做接口测试和安全评估、但想真正吃透 Intruder 的朋友。
1. Intruder 的运作逻辑与 Payload 类型的选型思路
1.1 先说清楚 Intruder 到底在做什么
Intruder 本质上是一个“自动修改并重放请求”的工具。你在 Proxy 里抓到一条请求,把其中想要变化的部分标记成 §,比如登录接口里的用户名和密码,或者某个订单号。Intruder 就按你指定的规则,不断生成新值填进这些位置,发出去,然后把响应收回来给你对比。
这个定位很重要。很多人把 Intruder 当成“密码爆破器”,其实它做的事远不止这一件。它能做目录枚举、参数模糊测试、业务数据遍历、并发条件竞争、会话固定探测、甚至用 Null payloads 做定时重放。你理解得越深,越会发现它其实就是个可编程的 HTTP 客户端,只是 Burp 帮你把“生成请求”这件事做得非常顺。
理解了这个逻辑,再回头看 Payload 类型就轻松了。你标记的位置只是“洞”,Payload 类型决定的是“往洞里塞什么”。Simple list 是塞字典,Numbers 是塞递增序列,Custom iterator 是塞多组内容的组合。每一种类型都有自己的生成引擎,而不是简单地从某个文件里读字符串。
1.2 攻击类型是骨架,Payload 类型才是灵魂
在 Intruder 配置页,除了 Payload 类型,还有一个绕不开的选项叫攻击类型(Attack type)。攻击类型决定的是:当你标记了多个位置时,这些位置怎么共享 payload。它和 Payload 类型是两套东西,但很多人把两者混在一起理解,导致配置出来结果完全不对。
Burp 一共提供四种攻击类型:
- Sniper:同一时间只填充一个位置,用整个 payload 列表逐个跑。如果你标记了两个位置,它会先用 payload 列表跑第一个位置(第二个保持原始值),再用同一个列表跑第二个位置。效率最低,但匹配“一次只测一个变量”的场景。
- Battering ram:所有位置同时填同一个 payload。适合你想让两个参数保持一致的情况,比如参数名和参数值一样。
- Pitchfork:多个 payload 列表按索引并行。第一个请求用所有列表的第 1 个值,第二个请求用所有列表的第 2 个值,数量以最短列表为准。
- Cluster bomb:多个 payload 列表做笛卡尔积。比如用户名列表有 5 个、密码列表有 10 个,它会生成 50 个请求。这是最常用、也最容易把数量撑爆的攻击类型。
攻击类型只解决“怎么安排位置”,真正决定“生成什么内容的”还是 Payload 类型。比如说,你想做纯数字的验证码爆破,攻击类型选 Sniper,Payload 类型就必须选 Numbers 或者 Brute force,你选 Simple list 的话还得手工造一个数字字典。两者配合,才能把 Intruder 用明白。
1.3 Payload 类型怎么选:先想清楚你要“生成”什么
拿到一个测试目标时,第一件事不是打开 Intruder,而是先问自己:我要往这个位置塞什么规律的值?是固定字典、数字序列、字符组合,还是从上一次响应里提取的内容?想清楚这个,Payload 类型基本就定了。
下面这张表是我日常使用时的选型习惯,直接抄作业就可以:
| 测试需求 | 推荐 Payload 类型 | 推荐攻击类型 |
|---|---|---|
| 常规用户名字典测试 | Simple list | Sniper |
| 密码字典测试 | Simple list | Sniper |
| 用户名+密码组合测试 | Simple list(两组) | Cluster bomb |
| 遍历数字 ID 或订单号 | Numbers | Sniper |
| 生成“前缀+序号+后缀”格式 | Custom iterator | Sniper |
| 固定字符集的验证码爆破 | Brute force | Sniper |
| 构造超长输入做边界测试 | Character blocks | Sniper |
| 对字典做大小写变体 | Simple list + Case modification | Sniper |
