MongoDB Lab noSQL injection
1er lab :
db.accounts.find({$where: this.firstName.startsWith('R') && this.firstName.length === 6 && this.lastName.startsWith('D') && this.lastName.length === 7});
2 e lab :
Authentication bypass :
username[$ne]=toto&password[$ne]=toto
login[$regex]=.*&pass[$regex]=.*email=admin%40mangomail.com&password[$ne]=x
Ce que ça fait :
Cible un utilisateur précis (admin@mangomail.com, %40 étant le caractère encodé pour @).
La condition password[$ne]=x signifie "le mot de passe n’est pas égal à 'x'".
Si l'entrée n'est pas validée correctement, MongoDB interprète cette requête comme :
{ email: "admin@mangomail.com", password: { $ne: "x" } }
Si le mot de passe de l'admin n'est pas "x", la requête réussit, et l'accès peut être accordé de manière non autorisée.2. email[$gt]=&password[$gt]=
Ce que ça fait :
Les champs email et password sont fournis comme chaînes vides.
L'opérateur $gt (greater than) vérifie si les valeurs sont "supérieures à " l'entrée donnée. Comme toute chaîne est "supérieure" à une chaîne vide dans l'ordre lexicographique, cette condition peut correspondre à presque tous les enregistrements.
Interprétation de la requête :
{ email: { $gt: "" }, password: { $gt: "" } }
Cela correspond Ă tous les utilisateurs ayant un email et un mot de passe non vides.3. email[$gte]=&password[$gte]=
{ email: { $gte: "" }, password: { $gte: "" } }
Cette charge utile peut correspondre Ă des enregistrements mĂŞme si email ou password sont vides.
3e lab :
4e lab :
Last updated