Extraction de données via une injection NoSQL
Exploiting NoSQL injection to extract data
Contexte du laboratoire
La fonctionnalité de recherche d’utilisateurs de ce laboratoire repose sur une base de données NoSQL MongoDB. Elle est vulnérable à une injection NoSQL.
Objectif : Extraire le mot de passe de l’utilisateur administrator, puis se connecter à son compte.
Un compte valide est fourni :
Identifiant :
wienerMot de passe :
peter

Analyse du fonctionnement
Après connexion avec wiener:peter, on observe que la requête suivante est envoyée en arrière-plan :
Cette requête permet d’énumérer des informations sur les utilisateurs.
Exemple :

Le frontend affiche alors :

Détection de la vulnérabilité NoSQL
En injectant une simple apostrophe :
Le serveur retourne une erreur :

En revanche, en ajoutant une condition toujours vraie :
La requête est acceptée, ce qui confirme la présence d’une injection NoSQL.
Extraction de la longueur du mot de passe
On utilise l’attribut this.password.length pour déterminer la taille du mot de passe.
Exemple de test :
Pour que cela fonctionne correctement, il est nécessaire d’encoder les caractères && en URL :
Application à l’administrateur

En répétant la méthode avec l’utilisateur administrator :
La condition est validée, ce qui indique que le mot de passe de l’administrateur contient 8 caractères.

Extraction caractère par caractère
On filtre ensuite par position :
Cette requête est envoyée à Intruder.

Attaque avec Intruder

Type d’attaque : Cluster Bomb

Paramètres :
Position du caractère : valeurs de
0à7

Caractères testés : alphabet (dictionnaire de lettres)

En analysant les réponses valides, on reconstitue le mot de passe.
0
v
1
x
2
t
3
r
4
m
5
e
6
z
7
s

Résultat final
Mot de passe de l’utilisateur administrator :
vxtrmezs

Mis à jour