Guía Práctica de Blind SQL Injection con Respuestas Condicionales: Ejemplo y Estrategias

8/24/2024

sql-injection-attack-2114571541 

Resolviendo el laboratorio de PortSwigger "Blind SQL injections with conditional responses"

Hola, querido amigo o amiga al otro lado de la pantalla. Hoy quiero compartir contigo unos laboratorios que me han resultado extremadamente útiles para practicar mis conocimientos en SQL Injection. En particular, vamos a resolver juntos un laboratorio sobre inyecciones a ciegas basadas en respuestas condicionales.

Antes de comenzar, quiero contarte que decidí publicar la solución de este laboratorio porque abarca elementos clave en el trabajo de un hacker ético, como son el scripting en Python y el uso de Burp Suite. También te dejo el enlace a todos los laboratorios de PortSwigger. Mi recomendación y estrategia personal es completarlos todos; ¡cuanta más práctica, mejor ejecución! Recuerda que necesitas crear una cuenta en la web para acceder a ellos.

Laboratorios PortSwigger: https://portswigger.net/web-security/all-labs

¡Dicho esto, empecemos con el hacking!

La tecnica de ataque conocida como SQL injection a ciegas con respuestas condicionales es una técnica en la que un atacante inyecta consultas SQL maliciosas en una aplicación, sin ver directamente los resultados. En su lugar, infiere información de la base de datos a través de respuestas condicionales (como tiempos de carga o mensajes de error) para determinar si las consultas fueron exitosas.

Primero, accedemos a la página del laboratorio y, una vez que haya cargado, abrimos Burp Suite, activamos FoxyProxy e interceptamos la petición.

   

Ahora que estamos interceptando la petición, recargamos la pagina web, volvemos a BurpSuite y enviamos la petición capturada al Repeater pulsando Ctrl+R, una vez en el Repeater podremos ver la petición y la respuesta.


En la petición podemos apreciar la cookie tracking id, en la cual, si introducimos algún valor, nos desaparece el mensaje Welcome back! de la respuesta renderizada, pero si le metemos el valor, y lo comentamos, nos sigue apareciendo el mensaje, esto nos da una pista, podemos pensar que es vulnerable a una inyeción SQL, deduciendo que en la base de datos se estará produciendo una query parecida a esta:

   

Podemos intentar aprovecharnos del mensajito Welcome back! es decir, de la respuesta condicional que la web devuelve a nuestra petición para comprobar si nuestra teoría es cierta.
Para ello vamos a introducir un valor verdadero y uno falso como valor verdadero vamos a establecer que ¨1=1¨ y como valor falso introducimos que ¨1=2¨ enviamos nuestra petición y al fijarnos en la respuesta podemos observar que el mensaje Welcome Back! solo aparece cuando le enviamos el valor verdadero. Confirmado, la web es vulnerable a inyeción SQL a través del TrackingId de la cookie.



Sabiendo que es vulnerable vamos a probar a inyectar código, la intención es listar el usuario administrator de una posible tabla users, pero primero probemos un comando que sabemos que es correcto para ver si el mensajito permanece:



Nos lo acepta!
Sin embargo si filtramos por el caracter 'p' el mensaje desaparece, podemos asumir entonces que existe una tabla llamada users y que efectivamente existe un usuario cuyo nombre comienza  con la letra 'a'
Vamos a intentar atentar directamente contra el usuario administrator:




Y vemos que sigue apareciendo nuestro mensajito. Hice también la prueba con la letra 'd' y Welcome Back! desaparecía. Esto nos indica dos cosas, que no hay un usuario que empiece por la letra ´d´ y que vamos por buen camino!
Podríamos crear una query comparativa, donde seleccionando el campo password, y comparando caracter por caracter podremos llegar a donde nos interesa, la contraseña del usuario administrator.
Yo utilicé esta:



Una vez integrada en nuestra petición, con Ctrl+i la mandamos al Intruder donde efectuaremos un ataque del tipo "Sniper", para ello seleccionamos el caracter a comprobar y clicamos sobre el botón add:




En este punto, podríamos ir a la sección de payloads e introducir manualmente todos los caracteres posibles, incluyendo letras y números, y luego pulsar "Start Attack". Sin embargo, como este proceso sería muy tedioso, y dado que contamos con herramientas para hacerlo más rápido, vamos a automatizarlo con un script en Python que probará cada caracter uno por uno, validando un caracter cuando la respuesta nos devuelva un "Welcome back!".
En mi caso este fué el script que utilicé:



Una vez construido nuestro script, adaptandolo a nuestra direción, nuestro TrackingId y nuestra session lo ejecutamos por consola y tras ver el hermoso proceso de como va probando letra por letra a toda velocidad hasta encontrar la correcta ya tenemos la contraseña del usuario administrador.



Solo nos quedaria irnos a my account e identificarnos como el usuario ¨administrator¨ con la contraseña ¨23vp0aofb7y8cz695rnb¨ y ya tenemos el control total de la base de datos y el laboratorio completado!




¡Si has llegado hasta aquí, solo me queda felicitarte! Espero que hayas aprendido algún truco nuevo o que ahora estés mejor preparado para enfrentar esta vulnerabilidad y continuar resolviendo los siguientes laboratorios.

¡Un saludo y nos vemos en la próxima !

You Might Also Like

0 comentarios

Like us on Facebook