NoSQL injection
Lab: Detecting NoSQL injection
Enunciado
El filtro de categorías de productos de este laboratorio está respaldado por una base de datos NoSQL MongoDB. Es vulnerable a inyección NoSQL. Realiza un ataque de inyección NoSQL que haga que la aplicación muestre productos no publicados.
Resolución
Vemos si es vulnerable poniendo una comilla simple.

Al ser vulnerable realizamos la inyección típica en SQL pero en NoSQL.
category=Gifts%27%20||1||%27

Lab: Exploiting NoSQL operator injection to bypass authentication
Enunciado
La funcionalidad de inicio de sesión de este laboratorio está respaldada por una base de datos NoSQL MongoDB. Es vulnerable a inyección NoSQL mediante el uso de operadores de MongoDB. Inicia sesión en la aplicación como el usuario administrador.
Puedes iniciar sesión en tu propia cuenta con las siguientes credenciales:
Usuario:
wiener
Contraseña:
peter
Resolución
Nos logueamos y vemos la petición.

Podemos intentar inyectar objetos en los campos de usuario y contraseña para probar inyecciones NoSQL.
{"username":{"$gt":""},"password":{"$gt":""}}
Bueno, eso es interesante: código de respuesta 500 y un error que indica que se devolvió un número inesperado de registros.

La consulta que enviamos en realidad terminaría recuperando todos los registros de la base de datos. Y la base de datos tendría más de un registro, pero el código del backend esperaría que la consulta devolviera solo un registro. Vamos a evadir la autenticación aprovechando la inyección NoSQL que encontramos en la funcionalidad de inicio de sesión:
{"username":{"$regex":"^admin"},"password":{"$gt":""}}
Observa que obtuvimos un código de respuesta 302 y no un 500.

Interceptamos con Proxy y con esa inyección damos a Forward.

Last updated
Was this helpful?