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 : wiener

  • Mot 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.

number
lette

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