Visible error-based SQL injection writeup

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:

  1. 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.
  2. 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:

Deja una respuesta

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