
Extensão do Burp Suite que intercepta requisições e as envia via HTTP/3, convertendo as respostas de volta para o Burp, com suporte a requisições kettled e verificações de capacidade HTTP/3.
Uma extensão do Burp Suite que envia requisições via HTTP/3.
O Burp não suporta HTTP/3 nativamente. Esta extensão implementa uma pilha HTTP/3, intercepta todas as requisições, converte e as envia via HTTP/3 e então converte a resposta de volta para uma versão HTTP que o Burp consegue entender.
Disponível na BAPP Store.
Compile você mesmo:
./gradlew jar # -> build/libs/HTTP3-Adapter-0.0.1.jar
No modo Explicit HTTP/3 only adicione um cabeçalho X-Http3:
GET /admin HTTP/1.1
Host: example.com
X-Http3: 1
No modo Always HTTP/3 where possible, qualquer tráfego será adaptado se a aplicação suportar HTTP/3
Se você quiser saber se vários hosts no seu histórico de proxy suportam HTTP/3, você pode selecioná-los e usar a opção de menu de contexto Check HTTP/3 Support que reporta no organizer.
Settings -> Extensions -> HTTP/3 Adapter
| Setting | Default | Notes |
|---|---|---|
| Mode | Explicit HTTP/3 only | Alterna entre os dois modos mencionados acima |
| Handshake timeout (ms) | 10000 | |
| Request timeout (ms) | 15000 | |
| Reuse connections | on | |
| Log exchanges to Output | off | Escreve cada requisição e resposta adaptada no painel Output. |
| Show unsupported origins tab | off | Veja abaixo. |
Strip Connection, Keep-Alive, Proxy-Connection, Transfer-Encoding, Upgrade | on | HTTP/3 proíbe esses cabeçalhos, desmarque para enviá-los deliberadamente. |
| Verify TLS certificates | off | Corresponde ao comportamento upstream do próprio Burp por padrão. |
Esta aba mostrará quais hosts falharam no handshake HTTP/3 QUIC. Você pode limpar esta lista para tentar novamente se tiver uma conexão instável. A aba fica oculta por padrão, mas pode ser habilitada no painel de configurações.
Assim como no HTTP/2, requisições podem ser kettled.
Adicione um cabeçalho X-Kettled: 1 junto ao cabeçalho X-Http3: 1 e o bloco de cabeçalhos é enviado exatamente como escrito. Os nomes mantêm seu caso, nada é removido, Host não é dobrado em :authority, e estes escapes são decodificados
primeiro:
| Escape | Byte |
|---|---|
^~ | CR LF |
^r | CR |
^n | LF |
^0 | NULL |
^s | space |
^xNN | any byte, two hex digits |
^^ | a literal ^ |
POST /x HTTP/1.1
X-Http3: 1
X-Kettled: 1
:method: BREW
content-length: 10
foo: bar^~transfer-encoding:^schunked
0
hello