HTTP request smuggling, obfuscating the TE header writeup

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:

  1. En Inspector -> Request attributes, cambiamos la versión de HTTP a 1.1.
  2. Damos Click derecho -> Change request method, para cambiar el método a POST.
  3. Añadimos la propiedad ‘Transfer-encoding’ con el valor chunked.
  4. Desactivamos de las opciones al lado de ‘Send’ ‘Update content length’.
  5. Activamos la opción de ver los caracteres especiales con ‘\n’.
  6. 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:

  1. El primer ‘Content-Length’ tiene el tamaño de 4 (9d\r\n).
  2. El 9d es el tamaño de la petición añadida (desde GPOST hasta x=1) en hexadecimal.
  3. 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:

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *