Blind SQL injection with conditional responses writeup

Descripción

This lab contains a blind 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, and no error messages are displayed. But the application includes a Welcome back message in the page if the query returns any rows.

The database contains a different table called users, with columns called username and password. You need to exploit the blind SQL injection vulnerability to find out the password of the administrator user.

To solve the lab, log in as the administrator user.

Blind SQL injection with conditional responses writeup

Esta vez la vulnerabilidad estará en toda la página web, pero la inyección SQL se tiene que hacer en la cookie. De nuevo dividiremos el laboratorio en varios pasos.

Localizar dónde hacer la inyección SQL

Primero, con el ‘Logger’ activado, recargaremos la página principal del laboratorio. Enviaremos esta petición al ‘Repeater’ con Ctrl + R o click derecho -> Send to Repeater.

En el repeater añadiremos los siguientes códigos a la etiqueta ‘Cookie’.

'+AND+1=1--
'+AND+1=2--

Con el primero, debe de aparecer el mensaje de ‘Welcome back!’, pero con el segundo no. Así sabremos que la página está procesando nuestra petición SQL.

Preparar el payload

Como estamos realizando una inyección SQL a ciegas, no podemos usar ‘UNION’, ni ver directamente el contenido de la tabla, por lo que la URL que enviaremos cambia drásticamente:

'+AND+(select+'a'+from+users+where+username='administrator')=+'a'--

En este caso le estamos diciendo a la página web que realice lo siguiente:

  1. ‘: Cierra la consulta anterior, que es la de la cookie.
  2. AND: añade una nueva condición que debe de dar true para que salga el ‘Welcome back!’.
  3. select ‘a’: Devuelve a si…
    • from users: En la tabla users
    • where username=’administrator’: Hay una fila donde el username sea administrator.
    • = ‘a’: Es la condición que debe devolver true para que salga el mensaje.

Tenemos el mensaje, por lo que el usuario existe, ahora enviaremos la petición al ‘Intruder’ con Ctrl + I o Click derecho -> Send to Intruder, para hacer un ataque de fuerza bruta a la contraseña.

Determinar la longitud de la contraseña

Primero, modificamos la cookie de la siguiente forma:

'+AND+(select+'a'+from+users+where+username='administrator'+AND+LENGTH(password)=§§)=+'a'--

Segundo, vamos a ‘Payloads’ y le indicamos a Burp Suite que utilice una lista de números de 1 a 25:

Al pulsar ‘Start attack’ y tener los resultados, buscaremos el mensaje de ‘Welcome back!’:

Ahora sabemos que la contraseña del usuario ‘administrator’ tiene 20 caracteres.

Ataque de fuerza bruta para obtener la contraseña

Modificamos la cookie tal que así:

'+AND+(select+substring(password,§1§,1)+from+users+where+username='administrator')=+'§2§'--

Y seleccionamos de la parte superior el tipo de ataque ‘Cluster bomb’ para tener más control sobre qué enviamos en cada payload.

Al pulsar ‘Start atack’ y esperar a que este finalice, podremos buscar la expresión ‘Welcome’ y ordenar por el payload 1 de manera ascendente:

Obteniendo así la contraseña ‘s3gch7jr6sab672g29m8’. Al iniciar sesión en el navegador completaremos el laboratorio:

Deja una respuesta

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