
Descripción
This lab contains a SQL injection vulnerability. The application uses a tracking cookie for analytics, and performs a SQL query containing the value of the submitted cookie. The results of the SQL query are not returned.
The database contains a different table called users
, with columns called username
and password
. To solve the lab, find a way to leak the password for the administrator
user, then log in to their account.
Visible error-based SQL injection writeup
En la descripción del laboratorio nos dan dos detalles importantes:
- Estamos ante una error SQL injection, por lo que no podremos realizar un UNION attack, así que deberemos de crear una query que, a base de dar error nos muestre información.
- La inyección SQL está en la cookie de tracking.
Con esta información entramos al laboratorio:
Con el ‘Logger’ en la página principal podremos encontrar la cookie vulnerable:

Enviamos la petición al ‘Repeater’ con Ctrl + R o Click derecho -> Send to Repeater. Allí confirmamos que la cookie es vulnerable añadiendo una comilla simple a su final:

Ahora, construiremos una consulta SQL para poder extraer la contraseña del usuario ‘administrator’ y que a su vez de un error:
' AND 1=CAST((SELECT password FROM users LIMIT 1) AS INT)--
En este caso el 1= es necesario, puesto que se debe devolver una expresión booleana. El cast a int es lo que hace que salte el error, por lo que no podemos hacer un cast a char o cambiar el 1 por ‘a’. Necesitamos el error para poder ver qué está devolviendo la base de datos.
Al necesitar el error, no podemos usar un UNION, ya que no lo devolvería.
Nota: Si sale el error ‘Unterminated string literal started at position’ es que la consulta no se ha recibido del todo, por lo que hay que borrar toda la cookie y dejar sólo la inyección SQL. Esto puede suceder debido a que l página web tenga establecido algún límite de tamaño en las consultas.
No podremos indicar que el nombre de usuario deba ser el de ‘administrator’ con un where debido a la ya nombrada limitación, pero la primera contraseña que hay en la tabla es la del administrador.

Al volver al navegador e iniciar sesión con el usuario ‘administrator’ y la contraseña ‘imf1m6c9ba57xdgmplt6’ habremos completado el laboratorio:
