Page cover

💉SQLMap - Enumeración Avanzada

Ahora que hemos cubierto los conceptos básicos de la enumeración de bases de datos con SQLMap, cubriremos técnicas más avanzadas para enumerar datos de interés en esta sección.


Enumeración del esquema de base de datos

Si quisiéramos recuperar la estructura de todas las tablas para poder tener una visión completa de la arquitectura de la base de datos, podríamos usar el modificador --schema:

afsh4ck@kali$ sqlmap -u "http://www.example.com/?id=1" --schema

...SNIP...
Database: master
Table: log
[3 columns]
+--------+--------------+
| Column | Type         |
+--------+--------------+
| date   | datetime     |
| agent  | varchar(512) |
| id     | int(11)      |
+--------+--------------+

Database: owasp10
Table: accounts
[4 columns]
+-------------+---------+
| Column      | Type    |
+-------------+---------+
| cid         | int(11) |
| mysignature | text    |
| password    | text    |
| username    | text    |
+-------------+---------+
...
Database: testdb
Table: data
[2 columns]
+---------+---------+
| Column  | Type    |
+---------+---------+
| content | blob    |
| id      | int(11) |
+---------+---------+

Database: testdb
Table: users
[3 columns]
+---------+---------------+
| Column  | Type          |
+---------+---------------+
| id      | int(11)       |
| name    | varchar(500)  |
| surname | varchar(1000) |
+---------+---------------+

Buscando datos

Cuando trabajamos con estructuras de bases de datos complejas con numerosas tablas y columnas, podemos buscar bases de datos, tablas y columnas de interés mediante la opción --search . Esta opción nos permite buscar nombres de identificadores mediante el operador LIKE . Por ejemplo, si buscamos todos los nombres de tablas que contienen la palabra clave user, podemos ejecutar SQLMap de la siguiente manera:

En el ejemplo anterior, podemos detectar inmediatamente un par de objetivos de recuperación de datos interesantes en función de estos resultados de búsqueda. También podríamos haber intentado buscar todos los nombres de columnas en función de una palabra clave específica (por ejemplo, pass):


Enumeración y descifrado de contraseñas

Una vez que identificamos una tabla que contiene contraseñas (por ejemplo master.users), podemos recuperar esa tabla con la opción -T, como se mostró anteriormente:

En el ejemplo anterior, podemos ver que SQLMap tiene capacidades automáticas de descifrado de hashes de contraseñas. Al recuperar cualquier valor que se parezca a un formato de hash conocido, SQLMap nos solicita que realicemos un ataque basado en diccionarios sobre los hashes encontrados.

Los ataques de descifrado de hash se realizan de forma multiprocesadora, en función de la cantidad de núcleos disponibles en el equipo del usuario. Actualmente, se ha implementado un soporte para descifrar 31 tipos diferentes de algoritmos de hash, con un diccionario incluido que contiene 1,4 millones de entradas (compiladas a lo largo de los años con las entradas más comunes que aparecen en filtraciones de contraseñas disponibles públicamente). Por lo tanto, si un hash de contraseña no se elige al azar, existe una buena probabilidad de que SQLMap lo descifre automáticamente.


Enumeración y descifrado de contraseñas de usuarios de bases de datos

Además de las credenciales de usuario que se encuentran en las tablas de la base de datos, también podemos intentar volcar el contenido de las tablas del sistema que contienen credenciales específicas de la base de datos (por ejemplo, credenciales de conexión). Para facilitar todo el proceso, SQLMap tiene un modificador especial --passwords diseñado especialmente para esta tarea:

Consejo: El interruptor '--all' en combinación con el interruptor '--batch' realizará automáticamente todo el proceso de enumeración en el destino mismo y proporcionará todos los detalles de la enumeración.

Básicamente, esto significa que se recuperará todo lo que esté accesible, lo que podría durar mucho tiempo. Necesitaremos encontrar los datos de interés en los archivos de salida de forma manual.


Ejercicio

Pregunta 1

¿Cuál es el nombre de la columna que contiene la palabra "style" en su nombre? (Caso n.° 1)

Pregunta 2

¿Cuál es la contraseña del usuario Kimberly? (Caso #1)

Obtener las bases de datos

Enumerar tablas de la base de datos testdb

Enumerar la tabla users

Enumerar columnas name y password del usuario Kimberly

Última actualización

¿Te fue útil?