PortSwigger - Blind SQL injection with conditional responses

Solución


Ingresamos al laboratorio.

Para resolver este laboratorio utilizaré Burpsuite Professional porque realizaremos un ataque de fuerza bruta, y si realizamos este ataque con el Burpsuite Community tardaremos un año entero. Es posible utilizar otras herramientas de fuzzing como FFuF o wfuzz O….. puedes programar un script en tu lenguaje de programación favorito que realice el ataque de fuerza bruta como hice yo acá.

Primero configura la extensión FoxyProxy para que funcione con Burpsuite, después ve a Burpsuite y haz click en el botón Intercept is off para que quede en azul.

Luego vuelves a la página principal y recargas la página para interceptar la petición.

Cuando interceptes la petición debe hacer click derecho y seleccionar la opción Send to Repeater.

Vas a la pestaña Repeater.

Y nos vamos a enfocar en la cookie TrackingId.

Hacemos click en el botón Send y vemos la respuesta.

Como nos indica la descripción del reto, el mensaje Welcome back! nos permitirá saber si nuestra petición es correcta o no.

Por ejemplo, si agregamos una comilla a la cookie el mensaje Welcome back! no aparece en la página.

Si agregamos ' and 1=1-- - volvemos a tener el mensaje.

Escribimos ' AND (SELECT '' FROM users)=''-- - con el fin de comprobar que la tabla users exista. Acá comparamos SELECT '' FROM users (debería devolvernos un string vacía) con '' (una string vacía), pero nos da un error.

Esto es porque la query SELECT '' FROM users nos devuelve más de 1 resultado, para indicarle que queremos solo 1 resultado agregamos LIMIT 1.

' AND (SELECT '' FROM users LIMIT 1)=''-- -

Y obtenemos el mensaje.

Ahora comprobamos que el usuario administrator exista. Acá ejecutamos SELECT '' FROM users WHERE username='administrator', si la petición es correcta entonces nos devolverá una string vacía, y si la comparamos con otra string vacía deberíamos ver el mensaje Welcome back!. Si no existe el usuario administrator entonces la comparación falla y no deberíamos ver el mensaje.

' AND (SELECT '' FROM users WHERE username='administrator')=''-- -

Como ya comprobamos que el usuario administrator existe, ahora enumeraremos el largo de su contraseña agregando AND LENGTH(password) > 0. Si el largo de la contraseña el mayor a 0 entonces deberíamos ver el mensaje Welcome back!, de lo contrario no deberíamos ver el mensaje.

No tenemos idea del largo de la contraseña, podría ser de 5 o de 80 caracteres. Usaremos el Intruder para automatizar esta enumeración.

Hacemos click derecho sobre la petición y seleccionamos la opción Send to Intruder.

Hacemos click en el botón Clear.

Marcamos el número 0.

Y hacemos click en el botón Add.

Debería verse así.

Luego vamos a la pestaña Payloads, seleccionamos la opción Numbers en la pestaña Payload type, y en Payload Options seleccionamos From: 1, To: 80 y Step: 1

Hacemos click en el botón Start attack para comenzar el ataque de fuerza bruta.

Mientras se ejecuta el ataque vamos a la pestaña Options.

Al final vemos la opción Grep-Match.

Hacemos click en Clear.

Escribimos Welcome back! y hacemos click en el botón Add para que filtre por esa frase.

Volvemos a la pestaña Results.

Y notamos que la contraseña es mayor que 19 pero no es mayor que 20. Esto significa que la contraseña de administrador tiene 20 caracteres.

Volvemos a la pestaña Repater y cambiamos nuestra query.

' AND (SELECT SUBSTRING(password,1,1) FROM users WHERE username='administrator')='a'-- -

En esta nueva query comparamos la primera letra de la contraseña del administrador (SUBSTRING(password,1,1)) con la letra a (='a').

Como no vemos el mensaje entonces la primera letra de la contraseña no es a.

Según el Hint del laboratio, la contraseña del admin puede contener letras maýusculas, letras minúsculas y números, si intentamos enumerar a mano nos demoraremos 3 años, así que enviaremos la petición al Intruder.

Hacemos click en Clear.

Seleccionamos el primer número 1 y hacemos click en Add.

Después seleccionamos la letra a y hacemos click en Add.

En Attack type seleccionamos cluster bomb.

Y nos vamos a la pestaña Payloads.

En esta pestaña seleccionaremos el Payload set: 1, Payload type: numbers y abajo seleccionamos From: 1, To: 20 y Step: 1 para indicar que queremos ir del número 1 al 20 avanzando de 1 en 1.

Luego seleccionaremos el segundo payload set y le indicaremos que queremos un Payload type: Brute forcer. Abajo indicaremos un Min length: 1 y Max length: 1, esto significa que por cada petición cambiará el a que marcamos anteriormente por una letra del Character set.

Hay que recordar que la contraseña puede contener mayúsculas también, así que agregaremos el abecedario en mayúsculas.

Y hacemos click en el botón Start attack para iniciar el proceso de fuerza bruta.

Cuando termine el proceso iremos a la pestaña Options.

Buscamos Grep - Match y hacemos click en el botón Clear.

Luego escribimos Welcome back! y hacemos click en el botón Add.

Volvemos a la pestaña Results y hacemos click en la opción Payload 1 hasta que quede con la flecha apuntando hacia arriba.

Hacemos click en la opción Welcome back! hasta que quede con la flecha apuntado hacia abajo.

Y así obtenemos la contraseña de administrador de forma ordenada.

Volvemos a la página del reto y vamos a My account.

Ingresamos la contraseña.

Y resolvemos el laboratorio.


Anterior

Siguiente

Powered by Soopr   •  Theme  Moonwalk