Laboratorio: Inyección SQL ciega
En este primer laboratorio resuelvo un SQL Injection del tipo Blind SQLi.
Last updated
En este primer laboratorio resuelvo un SQL Injection del tipo Blind SQLi.
Last updated
En este caso podemos ver como la aplicación web para poder ingresar un usuario en este caso administrador utiliza una cookie de rastreo “TrackingID” que será la que tomará como condicional para poder verificar el user en la Base de Datos.
Esta será la variable trackingID: y1GQdR0nnQfUVczW
Modificamos la variable trackingID para poder establecer y saber la condicion de bienvenida, cuando la condicion de 1=1 se cumplía se mostraba el mensaje a diferencia de cuando era 1=2, el mensaje no se mostraba; ahora bien vamos a algo más divertido intentaremos mandar la consulta larga de user con administrator para ir adivinando pieza por pieza la contraseña adecuada.
Lo ingresamos de esta forma, y veremos si nos retorna el welcome back! esto es para poder verificar si existe la tabla users.
' AND (SELECT 'a' FROM users WHERE username='administrator')='a
En este caso con esta consulta buscaremos el user ‘a’ tal que su username sea igual a administrator de la tabla users, por que como sabemos existe la tabla users con columnas username y password.
' AND (SELECT 'a' FROM users WHERE username='administrator')='a
→ Tenemos este de base y nos sigue mostrando el “Welcome Back!”
‘ AND (SELECT ‘a’ from users WHERE username=’administrator’ AND LENGTH(password)>1)=’a
→ Vale aclarar que estos comandos sql están después del trackingID.
‘ AND (SELECT ‘a’ from users WHERE username=’administrator’ AND LENGTH(password)>5)=’a
‘ AND (SELECT ‘a’ from users WHERE username=’administrator’ AND LENGTH(password)>10)=’a
‘ AND (SELECT ‘a’ from users WHERE username=’administrator’ AND LENGTH(password)>17)=’a
Con esto vamos comprobando hasta que punto nos sigue mostrando bienvenido nuevamente.
Comprobamos que el mayor valor aceptado de longitud es 19 ya que fue el maximo valor que nos mostró “Welcome back!”, ahora que sabemos la longitud podemos empezar con lo demás que sería probar los posibles caracteres en cada posición sin embargo eso sería probar muchas solicitudes así que para eso usaremos “Intruder” una herramienta interna de burpsuite.
Ya que sabemos esto el siguiente paso es determinar que caracteres están presentes en la contraseña, para este usaremos Burp Intruder, una herramienta dentro de burpsuite, cuando hayamos interceptado la peticion en proxy con la trackingID damos click derecho “send to intruder”.
y tiraremos el siguiente comando SQL: TrackingId=xyz' AND (SELECT SUBSTRING(password,1,1) FROM users WHERE username='administrator')='a
Esto utiliza la SUBSTRING()
función para extraer un solo carácter de la contraseña y probarlo con un valor específico. Nuestro ataque recorrerá cada posición y valor posible, probando cada uno de ellos por turno, el primer parametro es para la posición de la contraseña, el segundo es la longitud como solo buscamos un solo caracter por cada posicion de la contraseña, dejamos el 1 tal cual.
Ahora bien, la ultima parte tiene un §a§ eso se llaman parametros de posicion son los que especifican que dentro del valor de a se cambiara sucesivamente conforme se ejecuta el payload que creamos con los valores que le establecemos al payload.
listo, una vez listo el comando:
lo que haremos ahora será configurar el payload, será un payload de lista simple y contendrá solo caracteres alfanumericos con letras en Minuscula; esa fue la pista que dio el Laboratorio.
Luego iremos a GREP Match que sera el que nos contendra la bandera que está con nuestros items, ella será la encargada de que cada vez que nuestra consulta nos arroje el “Welcome back!” por un caracter o numero que haya probado del payload nos seteara un valor en 1 en la tabla de resultados para mostrar que ese caracter esta dentro de la password.
Listo, lo que podemos hacer ahora es en darle a Start Attack desde la pestaña positions, y cambiaremos el primer parametro de SUBSTRING desde 1 - 20 que es la longitud de la contraseña como ya lo habiamos comprobado.
Y listo vamos almacenando los caracteres uno por uno hasta tener la contraseña lista; ahora bien yo probé ingresando más posiciones pero no tenia sentido ya que la longitud de la contraseña es hasta 20 y despues de eso solo retornaba un valor 0.
la contraseña finalmente obtenida fue: eicl3dzd8clgbi2xpqre ¿facil de adivinar? no lo creo.
eicl3dzd8clgbi2xpqre
pero ahora ya sabemos como realizar un ataque para cuando un sitio web sostenga un enlace de una cookie supervisora con la base de datos “trackingID”.
Siempre tener cuidado con los espacios de más en este caso ingresaba la contraseña correctamente pero me daba error solo por un espacio de más en el username “administrator_”
Eso es todo gracias por leer :)