竞态与请求走私
竞态 / 请求走私提供两种专用工具,用于对时间敏感的攻击和协议层 HTTP 攻击。
竞态条件
竞态选项卡向同一端点同时发送一个请求的多个副本,让你比较各次并行执行的响应和耗时。
适用场景
- TOCTOU(检查时间 / 使用时间):测试并发请求能否将检查和状态变更操作分离。
- 账户操作:并发发送余额变更、优惠券兑换或受限额约束的操作,测试是否存在重复花费或超额兑换。
- 投票或速率限制绕过:确认每用户限制是否以原子方式执行。
运行竞态测试
- 在竞态选项卡中构建目标请求,或将其发送到该选项卡。
- 设置并发数值,即要发送的并行副本数量。
- 点击发送按钮(按钮文字会显示请求数量)。所有副本会尽可能同时发送。
- 查看响应表格中每个副本的状态码、正文和耗时。
- 响应差异(不同状态码、不同响应正文、第 2 个及后续副本意外成功)表明可能存在竞态窗口。
HTTP/2 单包竞态
目标支持 HTTP/2 时,启用 H2 单包模式。HTTP/2 在一个连接上复用所有并行请求,从而消除网络抖动,使请求同时到达服务器更可靠。
HTTP 请求走私
请求走私选项卡测试服务器如何处理含义不明确的 Content-Length 和 Transfer-Encoding 标头,以检测前端 / 后端失步。
背景
当反向代理和后端服务器对一个请求在哪里结束、下一个请求在哪里开始的判断不一致时,请求 A 中被走私的前缀可能被添加到请求 B 前面。影响可能包括缓存投毒、身份验证绕过和任意请求注入。
失步变体
| 变体 | 说明 |
|---|---|
| CL.TE | 前端使用 Content-Length;后端使用 Transfer-Encoding |
| TE.CL | 前端使用 Transfer-Encoding;后端使用 Content-Length |
| TE.TE | 两者都使用 Transfer-Encoding,但对混淆后的标头作出不同响应 |
运行请求走私探测
- 在请求走私选项卡中选择目标端点。
- 选择要测试的失步变体。
- 点击运行请求走私探测。工具会发送特制请求并测量响应。
- 序列中第二个请求超时或出现意外响应,表明可能存在失步。
- 创建安全发现之前请手动确认;与探测无关的网络状况导致超时时,也可能出现误报。