NoSQL Injection
¿Qué es y cómo funciona?
NOSQL Injection es una inyección que se diferencia del SQL Injection convencional en sus vectores de ataque. Estos en vez de ser strings como en el caso de una inyección sql convencional, son en general objetos o arrays ya que los motores NOSQL trabajan, en su gran mayoría con estos.
Estas inyecciones en las cuales por detrás corre MongoDB en la que se basa en colecciones de documentos JSON, así que en vez de trabajar con SQL lo hace con JSON.
Como se vería en una solicitud SQL:
Como se ve en MongoDB:
Aquí el problema es que PHP permite pasar objetos al driver de MongoDB sin hacer falta que sean strings. Entonces aquí es donde ocurre la vulnerabilidad NoSQL Injection, podemos pasar un objeto que fuerce una condición true y que provoque el volcado de la colección.
Ejemplo
Que la consulta interna sería:
La consulta que acabamos de ver devuelve las credenciales de todos los usuarios con el nombre y usuario sean distintos de 1, condición que posiblemente cumpla cualquier contraseña. ($ne es no igual)
Authentication bypass
Utilizando <not equal> $ne
o <mayor que> $gt
In URL
Con JSON
Recuerda que para hacer la inyección con JSON se tiene que cambiar el tipo de Content-Type de application/x-www-form-urlencoded a application/json en la petición de BurpSuite o la herramienta que utilices para interceptar la petición.
Extraer información
In URL
Con JSON
Recuerda que para hacer la inyección con JSON se tiene que cambiar el tipo de Content-Type de application/x-www-form-urlencoded a application/json en la petición de BurpSuite o la herramienta que utilices para interceptar la petición.
Herramientas automatizadas
Referencias
Last updated