Automatizando scan de sql injection con SQLMap

Buenas!

Todos los que estamos metidos de una u otra forma en el tema de la seguridad informática sabemos lo que es una vulnerabilidad de tipo SQL Injection (SQLi). A veces ingresamos a módulos de administración poniendo en el login un "' or 1=1--" o obtenermos información adicional haciendo SQL UNION de algunas columnas, pero  hay algunos ataques de SQL Injection que sin duda es mejor automatizar, y es aquí donde aparece sqlmap, una herramienta open source, escrita en Python que automatiza el proceso de detección y explotación de SQLi.



La imagen muestra la forma básica y más utilizada, que consiste simplemente en pasarle como parámetro la URL con la vulnerabilidad. Luego el script se encargará de todo, realizar diferentes test, buscar cuál es el motor de base de datos, versión del motor, y finalmente acceder a toda la base de datos.

Hasta aquí todo bien, excepto cuando en algunas ocaciones me ocurría un falso/positivo y finalmente el parámetro no era vulnerable a inyección de código, entonces debía seguir buscando (sí, la fase de reconocimiento no había sido muy intensa).

Ahí surgió mi pregunta ¿sqlmap podrá también hacer ese trabajo de forma automática?...y la respuesta es sí, al leer la documentación vi que existía el parámetro "crawl" https://github.com/sqlmapproject/sqlmap/wiki/Usage,  Con ese parámetro indicábamos a sqlmap la profundidad de la búsqueda dentro de la aplicación o sitio web. Es decir, sqlmap ahora era una araña web, pero en vez de indexar para un buscador, iría haciendo tests de SQLi a las URLs que fuera encontrando.

Les dejo un ejemplo usando --crawl=5


Luego de lanzar el script nos pregunta si queremos revisar la existencia del archivo sitemap.xml (que algunos sitios web lo utilizan). La siguiente pregunta es el número de hilos (threads) que queremos usar para la búsqueda, en este ejemplo puse 2 hilos, luego detecta una redirección y nos pregunta si queremos obedecer a dicha redirección, aceptamos y comienza a buscar. Como se ve en la imagen llevaba escaneados 54 links de 488 (11%) y aborté (era sólo un ejemplo).

También podemos indicar desde el inicio el número de hilos, con el parámetro --threads. Quedando así



Como ven, ahora ya no pregunta el número de hilos, pero pregunta por cada link potencialmente vulnerable, si queremos automatizar y saltarnos estas preguntas (por ejemplo si queremos dejar el script corriendo en la noche y revisar al día siguiente) usamos el parámetro --batch, el cuál responderá todas las preguntas con el valor por defecto.



Todas las respuestas de la imagen anterior fueron proporcionadas por el mismo sqlmap debido al parámetro --batch.

La última duda que me quedaba, era que si bien está araña iba a revisar cada uno de los links encontrados en el código HTML qué pasaría con los formularios?. Bueno, también estaba resuelto: --forms, sólo agregamos ese parámetro y nuestra araña también procesará los formularios encontrados.

Eso es todo, Suerte!

Comentarios

Entradas populares de este blog

Desempaquetando Themida 2 (unpacking windows binary) - Análisis de Malware

Ocultando la web shell como una imagen (Apache + PHP)

Evasión de antivirus modernos usando Process Injection - MITRE T1055