
Descripción
This lab involves a front-end and back-end server, and the back-end server doesn’t support chunked encoding.
To solve the lab, smuggle a request to the back-end server, so that a subsequent request for /
(the web root) triggers a 404 Not Found response.
HTTP request smuggling, confirming a TE.CL vulnerability via differential responses writeup
Dividiremos el laboratorio en dos fases:
Detectar la vulnerabilidad TE.CL
TE.CL significa lo siguiente:
- El servidor front-end utiliza la propiedad del encabezado HTTP ‘Transfer-Encoding’.
- El servidor back-end utiliza la propiedad del encabezado HTTP ‘Content-Length’.
Usaremos la siguiente tabla para ayudarnos a detectar cómo y por qué se produce la vulnerabilidad HTTP smuggling del tipo TE.CL:

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 es una respuesta del front-end, está leyendo el chunk size de 3, lee ‘tes’ e intenta determinar un chunk size de ‘T’, lo cual genera un error.
Probamos ahora con el segundo exploit, obteniendo el siguiente resultado:

Esto se debe a que el backend está esperando 6 bytes, pero sólo recibe 5: ‘0\r\n\r\n’. Al darnos un time out nos deja claro que esto es un ataque TE.CL.
Preparar la petición de ataque
La petición será la siguiente:

- La segunda petición hará que quien entre ahora a la página web entre en ‘/lanzar 404’.
- El primer ‘Content-Length’ tiene un tamaño de 4 (c1\r\n)
- c1: Es el tamaño en hexadecimal de toda la petición nueva, desde POST hasta x=1.
- El último ‘Content-Lenght’ debe tener más tamaño que ‘x=1\r\n0\r\n\r\n’, en este caso su tamaño es 10 (lo pone en el inspector al señalarlo), por lo que le ponemos 15.
Enviaremos esta petición y luego la petición del ‘Logger’ normal. Veremos que la petición del ‘Logger’ devuelve un 404, completando así el laboratorio:
