Nuevos labs cada semana — Accede a todos desde 7,99€/mes

Labs de SQLi

SQL Injection (SQLi)

¿Qué es SQLi?

La SQL Injection (SQLi) ocurre cuando entrada controlada por el usuario se concatena en una query SQL sin parametrización. Permite leer, modificar o exfiltrar la base de datos completa, y en algunos motores ejecutar comandos del sistema operativo.

¿Por qué practicar SQLi?

Aunque los ORMs modernos protegen contra SQLi, las queries dinámicas en endpoints de búsqueda, filtros y reporting siguen siendo vector frecuente. Una SQLi crítica suele pagar entre $1,000 y $20,000 porque expone PII, credenciales y, en muchos casos, RCE vía xp_cmdshell o INTO OUTFILE.

¿Qué aprenderás con los labs de SQLi?

Aprenderás a detectar inyección con payloads polígonales, identificar el motor (MySQL/Postgres/MSSQL/Oracle/SQLite), elegir la técnica adecuada (UNION, boolean blind, time blind, OOB), automatizar con sqlmap usando configuraciones reales y demostrar impacto extrayendo schemas, hashes y tokens.

Tipos de SQLi que cubrimos

  • Union-based

    Combinas tu SELECT con el original para extraer datos directos en la respuesta. Requiere control sobre el número de columnas.

  • Boolean-based blind

    Sin output visible: deduces bit a bit comparando respuestas TRUE/FALSE. Funciona cuando hay diferencias mínimas en la página.

  • Time-based blind

    Cuando ni siquiera hay diferencia visible: inyectas SLEEP/WAITFOR y mides latencia. Lento pero universal.

  • Error-based

    Aprovechas mensajes de error verbose (extractvalue, updatexml) para extraer datos en el propio mensaje.

  • Out-of-Band (OOB)

    Forzas al servidor a hacer una petición DNS/HTTP a tu Burp Collaborator. Útil cuando el output y los errores están suprimidos.

¿Cómo encontrar y explotar SQLi?

Playbook práctico — del recon a la prueba de concepto.

  1. 1

    Detectar la inyección

    Mete una comilla simple en cada parámetro y observa errores SQL, 500 o cambios de comportamiento. Luego confirma con una condición que no rompa la query.

    id=1'   →   error;   id=1' AND '1'='1   →   200;   id=1' AND '1'='2   →   distinto
  2. 2

    Identificar el motor

    Cada DBMS tiene funciones propias. Usa concatenación y versión para saber si es MySQL, PostgreSQL, MSSQL u Oracle, y así elegir la sintaxis correcta.

    MySQL: ' AND 1=version()-- -  ·  Postgres: ' AND 1=cast(version() as int)-- -
  3. 3

    Contar columnas para UNION

    Antes de un UNION SELECT necesitas saber cuántas columnas devuelve la query original. ORDER BY incremental hasta que falle.

    ' ORDER BY 1-- -  ...  ' ORDER BY 6-- -  →  error en 6  →  hay 5 columnas
  4. 4

    Extraer datos con UNION

    Coloca tus datos en las columnas que se reflejan en la página. Empieza por el schema y termina en credenciales/tokens.

    ' UNION SELECT username,password,3,4,5 FROM users-- -
  5. 5

    Si es ciega, usar blind

    Sin output ni errores, infiere carácter a carácter por respuesta booleana o por latencia con SLEEP/WAITFOR.

    1' AND (SELECT SUBSTRING(password,1,1) FROM users LIMIT 1)='a'-- -   ·   1' AND SLEEP(5)-- -
  6. 6

    Automatizar y escalar

    Confirmada manualmente, deja que sqlmap haga el trabajo pesado de dump y, si el motor lo permite, intenta lectura de ficheros o RCE.

    sqlmap -u "https://target/item?id=1" --batch --dbs --threads=5

Aprende la teoría

Academy: SQL & NoSQL Injection

Preguntas frecuentes

¿Qué es una SQL Injection?

Es una vulnerabilidad en la que la entrada del usuario se inserta en una consulta SQL sin parametrizar, lo que permite alterar la lógica de la query para leer, modificar o exfiltrar la base de datos.

¿Cómo se explota una SQLi?

Se inyecta sintaxis SQL en un parámetro vulnerable. Con UNION SELECT extraes datos directos; con blind booleano o time-based los infieres carácter a carácter; y en algunos motores escalas a lectura de ficheros (INTO OUTFILE) o ejecución de comandos (xp_cmdshell).

¿Cómo encontrar SQLi en bug bounty?

Prueba una comilla en cada parámetro (incluidos headers, cookies y JSON) y busca errores o cambios. Endpoints de búsqueda, filtros, ordenación (ORDER BY dinámico) y reporting son los más expuestos porque suelen concatenar SQL en bruto.

¿Cómo prevenir la SQL Injection?

Usa consultas parametrizadas (prepared statements) o un ORM bien configurado, valida y tipa la entrada, aplica el principio de mínimo privilegio en la cuenta de BBDD y nunca construyas SQL por concatenación de strings.

¿Diferencia entre SQLi y NoSQL Injection?

La SQLi ataca bases relacionales (MySQL, Postgres) manipulando sintaxis SQL. La NoSQL Injection ataca bases como MongoDB abusando de operadores ($ne, $gt, $where) que se cuelan vía JSON o query string; cambia la sintaxis y el motor, pero la causa raíz (input no sanitizado en la query) es la misma.

Empieza con labs de SQLi

Practica SQL Injection (SQLi) con labs basados en reportes reales. En español. Desde 7,99€/mes.

Empieza con el primer lab de SQLi