Sqlmap, herramienta automática para pruebas de penetración (Sql Injection)

Es una herramienta desarrollada en phyton, para realizar pruebas de penetración de código abierto, la cual tiene como propósito automatizar el proceso de detección y explotación de fallas que permiten la inyección de código SQL. Una vez detectada la vulnerabilidad o fallo en la aplicación web, es posible elegir entre muchas características la manera de penetrar el sistema; por ejemplo, vaciar tablas, ejecutar consultas, hashes de contraseñas, enumerar usuarios, leer archivos específicos en el sistema de archivos y mucho más. Todo esto gracias a su poderoso motor de detección, y las características propias de la herramienta, que van desde el fingerprinting hasta la obtención de todos los datos de la base de datos.

Características

Soporte completo para los sistemas de administración de bases de datos MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase, SAP MaxDB, HSQLDB y Informix.

Compatibilidad total con seis técnicas de inyección SQL: basado en booleano, basado en tiempo, basado en error, basado en consultas UNION, consultas apiladas y fuera de banda.

Soporte para conectarse directamente a la base de datos sin pasar por una inyección SQL, proporcionando credenciales DBMS, dirección IP, puerto y nombre de la base de datos.

Soporte para enumerar usuarios, hashes de contraseñas, privilegios, roles, bases de datos, tablas y columnas.

Reconocimiento automático de los formatos hash de contraseñas y soporte para descifrarlos usando un ataque basado en diccionario.

Soporte para volcar completamente las tablas de la base de datos, un rango de entradas o columnas específicas según la elección del usuario.

El usuario también puede elegir volcar solo un rango de caracteres desde la entrada de cada columna.

Soporte para buscar nombres de bases de datos específicos, tablas específicas en todas las bases de datos o columnas específicas en todas las tablas de las bases de datos. Esto es útil, por ejemplo, para identificar tablas que contienen credenciales de aplicaciones personalizadas donde los nombres de columnas relevantes contienen cadenas como nombre y pase. Soporte para descargar y cargar cualquier archivo del sistema de archivos subyacente del servidor de base de datos cuando el software de base de datos es MySQL, PostgreSQL o Microsoft SQL Server.

Soporte para ejecutar comandos arbitrarios y recuperar su salida estándar en el sistema operativo subyacente del servidor de bases de datos cuando el software de base de datos es MySQL, PostgreSQL o Microsoft SQL Server.

Soporte para establecer una conexión TCP con estado fuera de banda entre la máquina atacante y el sistema operativo subyacente del servidor de base de datos. Este canal puede ser un símbolo del sistema interactivo, una sesión de Meterpreter o una sesión de interfaz gráfica de usuario (VNC) según la elección del usuario.

Soporte para el escalamiento de privilegios de usuario del proceso de base de datos a través del comando Meterpreter getsystem de Metasploit.

Ejemplo

Una vez identificada la aplicación web con fallos que permitan la inyección de sql, debemos averiguar el nombre de la base de datos a la cual queremos acceder.

sqlmap -u “aqui.la.url.del.server” - - dbs

Se han encontrado 9 Bases de datos alojadas en ese servidor. Ahora identificamos la base de datos que resulta interesante para esta prueba. con el parametro - - tables nos muestra las tablas que contiene esa base de datos. "Xsxxxxxxxx -> Nombre de la Base de Datos"

sqlmap -u “aqui.la.url.del.server” -D Xsxxxxxxxx - - tables

Para continuar con el ataque, ya tenemos la base de datos, las tablas de la misma, lo que sigue es seleccionar una tabla y ver las columnas; para este caso la tabla interesante es Users.

sqlmap -u “aqui.la.url.del.server” -D Xsxxxxxxxx -T Users - - columns

Por ultimo debemos realizar el vaciado de la tabla, lo cual se realiza de la siguiente manera:

sqlmap -u “aqui.la.url.del.server”  -D Xsxxxxxxxx -T Users -C username,password - - dump

Unicamente seleccionamos las columnas username y password, se pueden seleccionar tantas columnas como se desee. Al realizar el vaciado ya tenemos el nombre de usuario y contraseña de los usuarios de la aplicación web.

@fredyavila

Síguenos en Facebook, Twitter, unete a nuestra charla en Riot, únete a IRC o únete a Telegram y no olvides compartirnos en las redes sociales. También puede hacernos una donación..

Etiquetas

Acerca del autor

Fredy Yesid Avila - Ingeniero de Sistemas, CEH - ECSA.

@fredyavila