
Extensión de Burp Suite que intercepta solicitudes y las envía a través de HTTP/3, convirtiendo las respuestas de vuelta para Burp, con soporte para solicitudes kettled y comprobaciones de capacidad de HTTP/3.
Una extensión de Burp Suite que envía solicitudes a través de HTTP/3.
Burp no admite HTTP/3 de forma nativa. Esta extensión implementa una pila HTTP/3, intercepta todas las solicitudes, las convierte y las envía a través de HTTP/3 y luego convierte la respuesta de nuevo a una versión HTTP que Burp pueda entender.
Disponible en la BAPP Store.
Compílalo tú mismo:
./gradlew jar # -> build/libs/HTTP3-Adapter-0.0.1.jar
En el modo Explicit HTTP/3 only añade una cabecera X-Http3:
GET /admin HTTP/1.1
Host: example.com
X-Http3: 1
En el modo Always HTTP/3 where possible, cualquier tráfico será adaptado si la aplicación admite HTTP/3
Si quieres saber si varios hosts en tu historial de proxy admiten HTTP/3, puedes seleccionarlos y usar la opción del menú contextual Check HTTP/3 Support, que informa en el organizer.
Settings -> Extensions -> HTTP/3 Adapter
| Setting | Default | Notes |
|---|---|---|
| Mode | Explicit HTTP/3 only | Alterna entre los dos modos mencionados anteriormente |
| Handshake timeout (ms) | 10000 | |
| Request timeout (ms) | 15000 | |
| Reuse connections | on | |
| Log exchanges to Output | off | Escribe cada solicitud y respuesta adaptada en el panel Output. |
| Show unsupported origins tab | off | Ver más abajo. |
Strip Connection, Keep-Alive, Proxy-Connection, Transfer-Encoding, Upgrade | on | HTTP/3 prohíbe estas cabeceras, desmarca para enviarlas deliberadamente. |
| Verify TLS certificates | off | Coincide con el comportamiento upstream propio de Burp por defecto. |
Esta pestaña te mostrará qué hosts fallaron el handshake QUIC de HTTP/3. Puedes borrar esta lista para reintentar si tienes una conexión inestable. La pestaña está oculta por defecto, pero se puede habilitar en el panel de configuración.
Igual que en HTTP/2, las solicitudes pueden ser kettled.
Añade una cabecera X-Kettled: 1 junto a la cabecera X-Http3: 1 y el bloque de cabeceras se envía exactamente como está escrito. Los nombres conservan sus mayúsculas y minúsculas, no se elimina nada, Host no se pliega en :authority, y estos escapes se decodifican
primero:
| 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