
Descripción
This lab involves a front-end and back-end server, and the two servers handle duplicate HTTP request headers in different ways. The front-end server rejects requests that aren’t using the GET or POST method.
To solve the lab, smuggle a request to the back-end server, so that the next request processed by the back-end server appears to use the method GPOST
.
HTTP request smuggling, obfuscating the TE header writeup
Dividiremos el laboratorio en dos fases:
Detectar la vulnerabilidad
Usaremos la siguiente tabla para ayudarnos a detectar el tipo de vulnerabilidad HTTP Smuggling:

Entraremos al laboratorio, capturaremos la petición de la raíz ‘/’ con el ‘Logger’ y enviaremos la petición al ‘Repeater’ con Ctrl + R o Click derecho -> Send to Repeater. Allí realizaremos las comprobaciones con los dos exploits de la imagen y los siguientes cambios:
- En Inspector -> Request attributes, cambiamos la versión de HTTP a 1.1.
- Damos Click derecho -> Change request method, para cambiar el método a POST.
- Añadimos la propiedad ‘Transfer-encoding’ con el valor chunked.
- Desactivamos de las opciones al lado de ‘Send’ ‘Update content length’.
- Activamos la opción de ver los caracteres especiales con ‘\n’.
- De manera opcional también se pueden borrar todos los atributos no necesarios para este laboratorio, como se puede ver en la siguiente captura:
Al enviar el primer exploit nos devolerá el siguiente resultado:

Esto indica que se ha producido un rechazo, las opciones entonces son TE.CL o TE.TE.
Probamos ahora con el segundo exploit, obteniendo el siguiente resultado:

Ahora nos ha dado una respuesta, lo que según la tabla da la posibilidad de CL.CL o TE.TE, coincidiendo sólo con el primero el TE.TE.
Esto nos dice que tanto el frontend como el backend procesan el Transfer-Encoding. Tendremos que engañar alguna de las dos partes para que procese el ‘Content-Length’ y provocar la desincronización que podremos abusar en el ataque. Para ello añadiremos un segundo ‘Transfer-Encoding’ con un valor incorrecto, lo que puede hacer que uno de los dos servidores lo descarte:

Ahora, hemos transformado esto en un ataque TE.CL.
Preparar la petición de ataque
La petición será la siguiente:

- El primer ‘Content-Length’ tiene el tamaño de 4 (9d\r\n).
- El 9d es el tamaño de la petición añadida (desde GPOST hasta x=1) en hexadecimal.
- El segundo ‘Content-Length’ tiene el tamaño de x=1\r\n0\r\n\r\n +1, +1 para que la siguiente petición se una a ella, formando el GPOST.
Al enviarla dos veces dará el mensaje ‘Unrecognized method GPOST’, completando así el laboratorio:
