Conociendo SQLMap con Badstore

  • 0

Conociendo SQLMap con Badstore

Figura 1: Logo de SqlMap

Figura 1: Logo de SqlMap

¿Que es sqlmap?

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, trazas o logs que podamos dejar en el servidor a auditar.

Un poco de historia…

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.

Un poco mas sobre la herramienta…

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. Todo muy facilito 😉

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

Con ese comando nos indicara la carpeta donde se encuentra el sqlmap. Nos posicionaremos en dicha carpeta y procederemos  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.

Cada vez que vayamos a usar SQLmap es bueno ejecutar su actualización con el comando, con esto actualizaremos la herramienta con las nuevas funcionalidades:

python ./sqlmap.py --update

¿Probamos el sqlmap?

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.

Os recordamos que NO se puede hacer este tipos de pruebas, ataques o como lo queramos llamar en servidores de los que no tenemos autorización.

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”.

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 pordemos 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 muestra por pantalla el payload o firma 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 descubrimiento SQL-Map incorpora diccionarios que agilizan dicha tarea.

Primero intentamos con el siguiente comando:

python sqlmap.py --hex --forms -u http://192.168.xxx.xxx/cgi-bin/badstore.cgi -D badstoredb --tables

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, concretamente en el directorio txt.

noinformationschema

Nos pedirá el numero de hilos o numero de pruebas simultaneas que queremos utilizar y seguidamente se dispondrá a comprobar los nombres de las tablas.

numberthreads-triedtables

Una vez la tengamos, dumpeamos la tabla userdb, en ella estarán los usuarios de badstore, en este caso, sqlmap detecta que hay hashes en MD5 en la tabla que estamos dumpeando y nos pregunta si queremos pasarle un diccionario por si alguna de las passwords figuran en el. Para ello utilizamos el siguiente comando:

python sqlmap.py --hex --forms -u http://192.168.1.108/cgi-bin/badstore.cgi -D badstoredb -T userdb --dump

crackedpasswds

En el caso de badstore encuentra la mayoría, lo que nos brinda un acceso como administrador en este sparring virtual. Lo importante es hacernos una idea de el uso de esta herramienta, de lo que se puede hacer en una auditoria o lo que pueden hacer los “malos”. La idea al final de la explotación de una inyección SQL es acceder a la Base de Datos del sistema y robar los datos que se guardan. Estos datos pueden ser desde información de la propia empresa como listas de direcciones, nombres, emails, teléfonos, etc.

Nuestro grupo de Auditorias Informáticas están muy al tanto de cualquier nueva herramienta que pueda servir para realizar estas auditorias, así como de los diferentes métodos que existen para evitar sufrir un ataque de estas características.

Un saludo!