Tutorial SQL injection con SQLMap

Introducción

Sqlmap es una herramienta opensource de pentesting que se centra en explotar vulnerabilidades del tipo SQL injection en servidores de base de datos. Es una eficaz herramienta para auditar bases de datos si no estamos muy preocupados por la cantidad de registros que podamos dejar. Las andanzas de esta aplicación comenzaron en julio de 2006, cuando Danielle Bellucci dió de alta el proyecto en SourceForge contando con un soporte limitado para MySQL. En Septiembre de ese mismo año tomó las riendas del proyecto Bernardo Damele y a principios del año 2007 ya incorporaba funciones para auditar Microsoft SQL-Server, a finales de ese mismo año incluyeron funciones para Oracle y así continuaron añadiendo funcionalidades, hasta que, en la actualidad, se ha convertido en la mejor navaja suiza para auditar bases de datos, capaz de obtener datos de bases de datos, shells, lectura de ficheros del sistema y un gran etcétera.

SQLmap está escrito en Python, un lenguaje orientado a objetos interpretado, su nombre viene de los humoristas británicos “Monty Python”, podremos ejecutarlo teniendo instalado el intérprete de Python en nuestra máquina.

Uso de la ayuda

Para ejecutarlo abriremos un terminal y nos posicionaremos en la carpeta donde está instalado Sqlmap, podemos buscar donde está con el siguiente comando:

find / -name sqlmap.py

Una vez estemos en la carpeta, vamos a ejecutar sqlmap para que nos muestre la ayuda:

python ./sqlmap.py -h

Con esto podemos hacernos una idea de la cantidad de funciones que incorpora actualmente, si necesitamos más información podemos ejecutar sqlmap con el modificador -hh y nos mostrará una ayuda más extensa.

Actualización

Cada vez que vayamos a usar SQLmap es bueno ejecutar su actualización con el comando:

python ./sqlmap.py --update

Entorno de pruebas

Para no tener ninguna clase de problema legal a la hora de realizar pruebas con esta aplicación usaremos Badstore, una máquina virtual que ocupa 10Mb y que contiene un servidor web con fallos de SQL inyection entre otros. Creamos nuestra máquina virtual y cargamos la imagen .iso de badstore.
Cuando haya terminado la carga presionaremos enter para acceder a la consola, y miraremos qué ip nos ha asignado el DHCP con el comando “ifconfig”.

Lanzando SQLMap

Una vez hecho todo esto volvemos a nuestra shell e introducimos el siguiente comando:

python sqlmap.py --hex --forms -u http://192.168.XXX.XXX/cgi-bin/badstore.cgi -b

Los modificadores usados son los siguientes:

–hex Transforma la inyección a valores hexadecimales.
–forms Escanea los formularios de la url que le hemos pasado.
-u Indicamos la URL que queremos escanear
-b Le indicamos que nos devuelva el banner de la base de datos.

Hay otros modificadores que nos pueden ser de interés, como por ejemplo:

–current-user Nos devuelve el usuario actual que está usando la base de datos.
–current-db Nos devuelve la base de datos actual que esta usando el usuario de la web.
–batch Con este comando se introduce la respuesta por defecto cada vez que el programa pregunte.
–random-agent Sirve para tener la cabecera de un navegador distinto cada vez que ejecutemos el comando.
–mobile Con este modificador podemos imitar la cabecera de un navegador de un teléfono móvil.

Al ejecutar este comando Sqlmap nos irá pidiendo la información que necesite:

sqlmap-badst-testformquestion

En este caso nos pregunta si queremos comprobar el formulario que hay en la página k hemos incluido con el modificador -u (–url), la opción marcada en mayúsculas es la opción por defecto, así que en este caso solo debemos darle a la tecla enter directamente.

mayitvulnerable

Vemos que nos va imprimiendo por pantalla las posibles vulnerabilidades que va encontrando, mas adelante cuando constata la vulnerabilidad nos muesta por pantalla el payload para esa vulnerabilidad y nos pregunta si deseamos explotar esa vulnerabilidad.

payloadbadstore

Una vez explotada pasa a mostrarnos lo que le hemos indicado con el modificador -b (–banner)

banner-badstore-sqlmap
Un paso importante es saber el nombre de la base de datos a la que vamos a atacar, para ello ejecutamos el comando con el modificador –current-db, el cual nos devolverá el nombre de la base de datos actual.

python sqlmap.py --hex --forms -u http://192.168.XXX.XXX/cgi-bin/badstore.cgi --current-db

current-db-badstore-sqlmap

Llegados a este punto, debido a la versión de la base de datos de Badstore no podemos consultar ninguna lista con el nombre de tablas ya que carece de information_schema y los modificadoes –tables y –columns no nos servirán de mucho. Por tanto tendremos que intentar una inyección “a ciegas” esto es, sin saber nada acerca de los nombres de las tablas, para facilitar la etapa de descubrimento SQL-map incorpora diccionarios que agilizan dicha tarea. En este caso, al no poder extraer las tablas, nos pregunta si deseamos usar los nombres de tablas más frecuentes, los cuales están en el directorio de instalación de sqlmap.

noinformationschema

Seguidamente se dispondrá a comprobar los nombres de las tablas. Una vez la tengamos, debemos añadirle al comando los siguientes modificadores:

-D Para indicar el nombre de la base de datos a atacar.

-T Para indicarle en qué tabla queremos trabajar

Realizamos dump a la tabla userdb. Para ello sólo tenemos que añadir el modificador –dump al comomando

crackedpasswds

En ella estarán los usuarios de badstore, en este caso, sqlmap detecta que hay hashes en MD5 en la tabla que estamos extrayendo y nos pregunta si queremos pasarle un diccionario por si alguna de las passwords figuran en el. En el caso de badstore encuentra la mayoría, lo que nos brinda un acceso como administrador en este sparring virtual.

Un saludo!