
Descripción
This lab involves a front-end and back-end server, and the front-end server doesn’t support chunked encoding. There’s an admin panel at /admin
, but the front-end server blocks access to it.
To solve the lab, smuggle a request to the back-end server that accesses the admin panel and deletes the user carlos
.
Exploiting HTTP request smuggling to bypass front-end security controls, CL.TE vulnerability writeup
Dividiremos el laboratorio en dos fases:
Detectar la vulnerabilidad CL.TE
CL.TE significa lo siguiente:
- El servidor front-end utiliza la propiedad del encabezado HTTP ‘Content-Length’.
- El servidor back-end utiliza la propiedad del encabezado HTTP ‘Transfer-Encoding’.
En este laboratorio la extensión ‘HTTP Request Smuggler’ no funcionará, por lo que realizaremos las comprobaciones de forma manual. También los siguientes cambios sobre la petición a la raíz en el ‘Repeater’:
- 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.
- 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:
Nota: En este caso, como es una vulnerabilidad CL.TE, sólo desactivaremos la opción ‘Update content length’ para verificar que es esta vulnerabilidad:


Comprobamos así que consiste en una vulnerabilidad CL.TE.
Acceder a /admin
Configuraremos la petición de ataque de la siguiente forma:

Al enviar luego la petición buena, nos devolverá un error 401:

Explorando en la petición buena, encontraremos el mensaqje ‘Admin interface only available to local users’.
Modificaremos la petición de ataque añadiendo ‘Host: localhost’:

Ahora el error será el siguiente:

Como no podemos tener 2 encabezados ‘Host’ en la misma petición, lo que haremos será mover la petición buena al cuerpo de la petición de ataque, para ello cambiaremos el código de la petición de ataque por el siguiente:

Nota: El Content-Length debe ser superior a 2, para que acepte el ‘x=’ y espere a la siguiente petición.
Al enviar la petición buen atendremos acceso al panel del administrador:

Cambiaremos la URL de la petición de ataque GET por ‘/admin/delete?username=carlos’, enviaremos la petición de ataque, después la normal y completaremos el laboratorio:
