Descripción

This lab is vulnerable to CL.0 request smuggling attacks. The back-end server ignores the Content-Length header on requests to some endpoints.

To solve the lab, identify a vulnerable endpoint, smuggle a request to the back-end to access to the admin panel at /admin, then delete the user carlos.

This lab is based on real-world vulnerabilities discovered by PortSwigger Research. For more details, check out Browser-Powered Desync Attacks: A New Frontier in HTTP Request Smuggling.

CL.0 request smuggling writeup

Este laboratorio se llama CL.0 debido a que el frontend hace caso del CL, pero el backend lo ignora (0). Para encontrar esta vulnerabilidad, hay tres opciones:

Luego, hay que realizar la perición maliciosa y la petición normal en la misma conexión TCP, para ello:

Accederemos al laboratorio y con el ‘Logger’, tomaremos un archivo y lo enviaremos al ‘Repeater’ con Ctrl + R o Click derecho -> Send to Repeater.

Allí, le cambiaremos el método HTTP a POST y deberá de devolver un código 200, si no, habrá que cambiar el tipo de archivo.

Cambiaremos la versión de HTTP a 1.1 y modificaremos el ‘Content-Length’ (habiéndolo desactivado antes). Nos debe devolver un error de frontend:

Esto nos indica que el frontend está utilizando el ‘Content-Length’. Desactivaremos la opción de poder editar en ‘Content-Length’ y realizaremos los siguientes cambios:

  1. Añadimos la propiedad ‘Connection: Keep-alive’.
  2. Activamos la opción de ‘Enable HTTP/1 connection reuse’.
  3. Añadimos otra petición a la raíz y hacemos un grupo para enviarlas en la misma conexión (deberemos de cambiarle el tipo de HTTP a 1.1).

El resultado será el siguiente:

Petición maliciosa:

Petición correcta:

Ahora, si cambiamos en el ‘GET’ de la primera petición la ruta a ‘/admin’, podremos verla en la segunda petición:

Cambiaremos la URL del GET a ‘/admin/delete?username=carlos’ y enviaremos ambas, completando así el laboratorio:

Deja una respuesta

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