BurpSuite支持HTTP/3:测试效率之外,还要关注协议差异-RadeBit瑞安全

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 握手失败了。

BurpSuite支持HTTP/3:测试效率之外,还要关注协议差异-RadeBit瑞安全