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

Labs de NoSQL Injection

NoSQL Injection (Mongo, Couch, Redis)

¿Qué es NoSQL Injection?

La NoSQL Injection explota la falta de sanitización en queries a bases NoSQL como MongoDB, CouchDB o Redis. Los operadores como $gt, $ne y $where permiten bypassear autenticación, leer documentos arbitrarios o ejecutar JavaScript server-side.

¿Por qué practicar NoSQL Injection?

El stack MERN/MEAN ha llevado MongoDB al frontline de muchas APIs. Los devs que vienen de SQL aplican parametrización pensando que están a salvo, pero los operadores nativos de Mongo abren toda una clase nueva de inyecciones. Bounties típicos: $500–$5,000 por bypass de login.

¿Qué aprenderás con los labs de NoSQL Injection?

Aprenderás los operadores peligrosos ($where, $regex, $gt, $ne, $exists), cómo enviarlos vía JSON body y vía query string parseado por qs/Express, técnicas blind con $regex anclado, y cómo escalar de auth bypass a takeover combinando con IDOR.

Tipos de NoSQL Injection que cubrimos

  • Operator injection

    Pasar `{"$gt": ""}` en lugar de un string para que el match se cumpla siempre. Clásico bypass de login en Express + qs parser.

  • $where JS injection

    Cuando se usa `$where` con un string que contiene input del usuario, ejecutas JavaScript arbitrario en el servidor mongo.

  • Blind regex

    Usar `$regex` con anclas (^, $) para extraer caracteres uno a uno cuando no hay output directo.

¿Cómo encontrar y explotar NoSQL Injection?

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

  1. 1

    Detectar parseo de operadores

    En un login JSON, sustituye el valor string por un objeto con un operador. Si el comportamiento cambia, el backend mete tu input crudo en la query.

    {"username":"admin","password":{"$ne":null}}
  2. 2

    Bypassear autenticación

    $gt con string vacío hace match con cualquier documento. Combínalo con un usuario conocido para entrar sin contraseña.

    {"username":"admin","password":{"$gt":""}}
  3. 3

    Inyectar vía query string

    Express + el parser qs convierte user[$ne]= en un objeto con operador. Útil cuando el endpoint es GET o un form urlencoded.

    POST /login → username[$ne]=x&password[$ne]=x
  4. 4

    Extraer datos a ciegas con $regex

    Sin output, ancla un regex y prueba carácter a carácter observando login OK/KO para reconstruir el secreto.

    {"username":"admin","password":{"$regex":"^a"}}
  5. 5

    Escalar a RCE con $where

    Si la app usa $where con tu input, inyecta JavaScript que se ejecuta en el motor; úsalo para blind boolean o sleep.

    {"$where":"sleep(5000) || true"}

Aprende la teoría

Academy: SQL & NoSQL Injection

Preguntas frecuentes

¿Qué es una NoSQL Injection?

Es la inyección equivalente a la SQLi pero contra bases NoSQL como MongoDB: en lugar de manipular sintaxis SQL, se abusan operadores nativos ($ne, $gt, $regex, $where) que el backend interpreta cuando no sanitiza la entrada.

¿Cómo se explota una NoSQL Injection?

Se envía un objeto con operadores en vez de un valor plano. Por ejemplo {"password":{"$ne":null}} hace que el match de la contraseña siempre se cumpla, logrando un bypass de login; con $regex se exfiltran datos a ciegas y con $where se ejecuta JavaScript server-side.

¿Cómo encontrar NoSQL Injection en bug bounty?

Apunta a APIs sobre stack MERN/MEAN. En cada login o filtro, cambia un valor por {"$ne":null} o prueba la variante en query string user[$ne]=x. Cambios en la respuesta (login que pasa, más resultados) delatan la inyección.

¿Cómo prevenir la NoSQL Injection?

Valida que los campos sean del tipo esperado (string, no objeto), rechaza claves que empiecen por $, usa librerías como mongo-sanitize o express-mongo-sanitize y nunca pases req.body directo a la query.

¿Diferencia entre NoSQL Injection y SQLi?

Ambas nacen de input no sanitizado en la consulta, pero la NoSQLi abusa de operadores JSON específicos de Mongo/Couch en vez de sintaxis SQL, y suele explotarse mandando objetos en lugar de cadenas.

Empieza con labs de NoSQL Injection

Practica NoSQL Injection (Mongo, Couch, Redis) con labs basados en reportes reales. En español. Desde 7,99€/mes.

Empieza con el primer lab de NoSQL Injection