
HTTP/3 竞态条件技术
为配合 HTTP3 引擎,你现在可以试用两种新的竞态条件技术:一种是来自论文《QUIC-er Races: HTTP/3 won't save you from TOCTOU vulnerabilities》的单数据报攻击(Single Datagram Attack);另一种是来自《Chaos by Design: The Death of Stochastic Race Conditions in HTTP/3》、基于 QPACK 阻塞流(Blocked Streams)技术的服务端竞态编排(Server-Side Race Orchestration)。如果目标支持 HTTP/3,这些技术能比本已极快的单包攻击(Single-Packet attack)给出更好的分组(grouping),从而命中更小的竞态窗口。
两者都只在使用 HTTP3 引擎时可用,并已内建到既有的 gate 系统中。Turbo Intruder 会自动选择竞态技术,且仅在服务器支持时才使用 QPACK 方法。可通过设置 gateMode 强制指定其中一种。
你可以用 race-http3.py 示例脚本上手:
def queueRequests(target, wordlists):
engine = RequestEngine(endpoint=target.endpoint, concurrentConnections=1, engine=Engine.HTTP3, gateMode='auto' #Select the correct technique for me )
for i in xrange(20):
engine.queue(target.req, gate='race1')
engine.openGate('race1')
def handleResponse(req, interesting):
table.add(req)
测试 HTTP/3 降级攻击
Turbo Intruder 的 HTTP3 引擎也支持 kettled 请求语法,用法与 BURP2 引擎完全一致,通过一组特殊字符转义实现。要让一个请求被 kettled,现在必须显式指定 engine.queue(target.req, kettled=True)。
值得注意的是,kettled 请求会经历一些隐式变换:
:path和:method伪头由 HTTP/1 风格的请求行隐式给出:authority和:scheme伪头由请求目标隐式给出
如果你想自己覆盖伪头:
GET / HTTP/1.1 :scheme: httpx :authority: intranet.example.com
此外,你可以用下列转义添加特殊字符的二进制表示:
| 字符 | 转义 |
|---|---|
| CRLF | ^~ |
| 空格 | ^s |
| null | ^0 |
| CR | ^r |
| LF | ^n |
| 任意十六进制码(如 0x02) | ^x02 |
| 字面量 ^ 字符 | ^^ |
例如,如果你想尝试一次 HTTP/3 降级头注入,可以这样写:
GET / HTTP/1.1 foo: bar^~Transfer-Encoding:^schunked
engine.queue(target.req, kettled=True)
这会在目标把请求从 HTTP/3 降级到 HTTP/1 之后,尝试注入 Transfer-Encoding: chunked 头:
GET / HTTP/1.1 Host: example.com Foo: bar Transfer-Encoding: chunked
测试仅支持 HTTP/3 的端点
还在另一个扩展——HTTP/3 Adapter 中,为 Burp Suite 的全部工具引入了 HTTP/3 流量支持。
该扩展会把所有 HTTP/1.1 或 HTTP/2 流量转换为 HTTP/3,并对响应做逆向转换。这意味着你现在可以测试那些只支持 HTTP/3 的站点,触达此前隐藏的新攻击面。
核心用法
加载扩展并选择一种模式。
| 模式 | 说明 |
|---|---|
| Explicit HTTP/3 only(仅显式 HTTP/3) | 只有携带 X-Http3: 1 头的请求才通过 HTTP/3 发送 |
| Always HTTP/3 where possible(尽可能总是走 HTTP/3) | 每个请求先尝试 HTTP/3,失败则回退到其原始协议 |
在 Explicit HTTP/3 only 模式下,以下写法会强制请求走 HTTP/3:
GET / HTTP/1.1 Host: example.com X-Http3: 1
HTTP/1.1 200 OK X-Http3: 1
在 Always HTTP/3 where possible 模式下则不需要 X-Http3: 1 头。只要主机支持 HTTP/3,请求就会通过 HTTP/3 发送。
GET / HTTP/1.1 Host: example.com
HTTP/1.1 200 OK X-Http3: 1
关键设置
Adapter 的设置位于名为 HTTP/3 Adapter 的设置面板中。如果某个请求行为异常,打开 Log exchange to output 选项,即可把原始请求与转换后的请求都记录到扩展的输出窗格。
你还可以启用一个名为 Show unsupported origins tab 的新 Burp Suite 标签页。当你用 Always HTTP/3 where possible 模式测试多个不同域名时,这个视图很有用——它会告诉你哪些域名的 HTTP/3 握手失败了。



最新评论