En esta tarea exploraremos un escenario del mundo real donde el ataque de length extension puede usarse para manipular una cookie firmada y escalar privilegios de un usuario normal a admin.
Exploitation
La aplicación hosteada en http://lea.thm/labs/lab2/ usa cookies para almacenar la información como el token de sesión y el hash de autentificación.

Inicia sesión en la aplicación usando user:user.

Para evitar la manipulación, firma la cookie llamada auth con un hash SHA-256 basado en una clave secreta. Sin embargo, como SHA-256 es vulnerable al ataque de length extension, podemos alterar el contenido de la cookie mientras conservamos una firma válida, permitiéndonos ganar acceso no autorizado.
Aquí está el código vulnerable que verifica la autenticidad de la cookie:
require_once("secrets.php"); // Default authorization status $auth = false; // Check if the 'auth' and 'hsh' cookies are set if (isset($_COOKIE["auth"]) && isset($_COOKIE["hsh"])) { $auth = $_COOKIE["auth"]; // Get the original auth string $hsh = $_COOKIE["hsh"]; // Verify the hash to ensure integrity if ($hsh === hash("sha256", $SECRET . $auth)) { // Instead of trying to parse, check if 'role=1' exists in the string if (strpos($auth, 'role=1') !== false) { echo "<html><head><title>Admin Panel</title></head><body>"; echo "<h1>Welcome, Admin!</h1><br><br>"; } elseif (strpos($auth, 'role=0') !== false) { echo "<html><head><title>User Panel</title></head><body>"; echo "<h1>Welcome, User!</h1><br><br>"; } } }
En este setup:
- La cookie
authcontiene datos del usuario como"username=user;role=0para indicar que es un usuario normal. - La cookie
hshes la firma SHA-256 generada usando la clave secreta combinada con la información deauth. - El servidor comprueba si
role=1existe enauthpara otorgar acceso de administrador.
Como atacante, nuestro objetivo es escalar privilegios cambiando role=0 a role=1 en la cookie auth ganando así acceso de administrador sin saber la clave secreta. Para conseguir esto, usaremos de nuevo Hash Extender para realizar el ataque.
Modificar la Cookie
La herramienta hash_extender puede ser usada para generar un valor de cookie modificada válido que contenga role=1 y ofrece una nueva firma válida también.
./hash_extender --data 'username=user;role=0' --append ';role=1' --signature bfe0fa5c36531773c73dcc8d2a931301f69cf9add05a1f35dcfa2d48b44c37f0 --format sha256 --secret 8 --out-data-format=html
--data: Es el valor de la cookie original.--append: Especifica la información que queremos añadir.--signature: Es la firma SHA-256 original parausername=user;role=0.--format: Especifica el algoritmo de hasheo.--secret: Es la longitud adivinada de la clave secreta (en este caso8).--out-data-format=html: Saca la información en formato URL encodeado HTML para su fácil uso en una petición web.
El output de hash_extender nos da:
- Una nueva firma para la cookie modificada.
- Una string de auth nueva que incluye el valor añadido
;role=1.
Configurando estos valores en la web, podemos engañar al servidor para que piense que somos admins.

Y así obtener la flag:

