> 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-vulnerabilities/api-attack/abus-dapi-pentesting-web.md).

# Abus d’API

## Installation du serveur Web depuis GitHub (abus d'API)

```bash
curl -o docker-compose.yml https://raw.githubusercontent.com/OWASP/crAPI/main/deploy/docker/docker-compose.yml
docker-compose pull
docker-compose -f docker-compose.yml --compatibility up -d

```

* Nous **s’inscrire** un nouvel utilisateur : ![](/files/611e978cc08c5e677bd13783fa2b18e408b3b13d)

## Reconnaissance de l'API

* Pour trouver des vulnérabilités API, il est important de commencer par **une bonne reconnaissance**. Dans la section Network, capturez la requête comme vous le feriez avec [Burp Suite](/fr/hacking-tools/web/burpsuite.md) en utilisant XHR : ![](/files/79c1c3325b86c83a393ba7bc3b8cc89fdf9551f9)
* Pour **structurer et stocker** toutes les requêtes API correctement, nous utilisons **Postman**:

```javascript
postman & disown &>/dev/null

```

* Créer une nouvelle **collection** où toutes les requêtes API sont regroupées. Pour **POST** les requêtes, collez le **URL** et surtout le brut **corps**: ![](/files/2d6af3af40c7f4d3154366b930e0410e52f69dcf) ![](/files/d9d9074dbf8dc21d5b2e6f1781dc15d8d0f4f6a9)
* Il renvoie le **jeton avec la structure JWT** de la connexion : ![](/files/c340cd2f7736d03b710f7319c0a95ecad38a4ac9)
* Créez une variable nommée **accessToken** avec la valeur du jeton de connexion : ![](/files/5893f1a9e83bb7d8ec4dbb73d4829fe93052aa5d)
* Dans la section **autorisation**, associez la variable au type **Bearer Token**: ![](/files/55a3dc410896708fcbfb7fee73f4b7d3b7513a92)
* Enregistrez toutes **les requêtes possibles**:

1. Tableau de bord : ![](/files/1326e598b8d76673be7af9679c0abf25e3cd2c4b)
2. Produits : ![](/files/c6c3e53884d8644537b3e30ba0ed7ffab2237959)
3. Commande : ![](/files/8c2605e1a5b3055a3548d5076d280d00ce7f4b65)

## Vulnérabilités liées à l'abus d'API :

### Récupération de jeton par force brute :

Il existe une option pour **réinitialiser le mot de passe** en récupérant un jeton par e-mail :

<figure><img src="/files/ff2d0b998029cf63a35453e46488f04d4e1382c7" alt="" width="563"><figcaption></figcaption></figure>

Sur le port *8025*, il y a un **SMTP** où nous recevons le jeton :

<figure><img src="/files/4e748e551c0056588bd1a2871c6598c9fa2b4e47" alt="" width="563"><figcaption></figcaption></figure>

Cliquez **Mot de passe oublié** avec l'adresse e-mail du compte dont vous voulez changer le mot de passe :

<figure><img src="/files/5c8a2c1175a93abc6fb7b28de90ba418acf50caa" alt="" width="563"><figcaption></figcaption></figure>

Nous capturons le **paramètre query** à l'API :

<figure><img src="/files/427a80db03f397d07f6a4afabae6f0a0a68903d1" alt="" width="563"><figcaption></figcaption></figure>

Nous envoyons la requête comme **POST** avec la structure brute :

<figure><img src="/files/698e2b997d86d20e7f2d41414aa10498b582027d" alt="" width="563"><figcaption></figcaption></figure>

Nous utilisons **ffuf** pour lancer une **attaque par force brute**:

```graphql
ffuf -u http://localhost:8888/identity/api/auth/v2/check-otp -w /usr/share/SecLists/Fuzzing/4-digits-0000-9999.txt -X POST -d '{"email":"jordan@jordan.com","otp":"FUZZ","password":"Password1234*"}' -H "Content-Type: application/json" -p 1 -mc 200

```

Le **jeton de confirmation** 0172 a renvoyé un **code de statut réussi** et le mot de passe a été changé automatiquement :

<figure><img src="/files/c1c0ccc8230adb7869279bb2edd8ba075f1c6e61" alt="" width="563"><figcaption></figcaption></figure>

### Modifier les prix des produits et augmenter le solde disponible :

Nous recherchons avec **ffuf** la méthode possible de la requête **products**:

```bash
ffuf -u http://localhost:8888/workshop/api/shop/products -w /usr/share/SecLists/Fuzzing/http-query-methods.txt -X FUZZ -p 1 -mc 200,401

```

Ce sont toutes **les méthodes possibles**:

<figure><img src="/files/564d32d29b14300e70027976a4679ebf7c97a61e" alt="" width="563"><figcaption></figcaption></figure>

Si nous passons de **GET** en **POST**, voici ce qui se passe :

<figure><img src="/files/8c5d119695fa0bf2fd8ec167bd97908c5ec7f961" alt="" width="563"><figcaption></figcaption></figure>

C'est une **affectation massive** vulnérabilité qui permet la création de produits via **POST** des requêtes. Dans ce cas, nous créons un produit avec un **prix négatif**  :

<figure><img src="/files/611305c219f044cafc897e874c00048c85d3ddb9" alt="" width="563"><figcaption></figcaption></figure>

De cette façon, c'est **interprété** par le serveur Web :

<figure><img src="/files/7b59ed2bbb7d605cd7449533f6da544f96a3dc41" alt="" width="563"><figcaption></figcaption></figure>

Comme le prix est **prix négatif**, chaque fois que nous cliquons sur **acheter**, 10 000 dollars sont ajoutés à notre solde :

<figure><img src="/files/c3f8d71828ebf73a6cfe05ecb3c50d77bab7be9b" alt="" width="563"><figcaption></figcaption></figure>

Si, dans la requête **de commandes**, nous insérons le numéro du produit avec par exemple une quantité de 100, notre solde sera multiplié par **100 x 10 000**:

<figure><img src="/files/c6f2877c40174b1a25b7ea4c6aa925b90f0f2363" alt="" width="563"><figcaption></figcaption></figure>

### Trouver un code promo valide :

Nous envoyons la requête de **validate-coupon**:

<figure><img src="/files/dde9d42a7e8946720a9434c217ad7b5d657e13a7" alt="" width="563"><figcaption></figcaption></figure>

Parce que le coupon est **incorrect**, le serveur ne renvoie rien :

<figure><img src="/files/197785579b13fecd287801183d7f2d3508450f81" alt="" width="524"><figcaption></figcaption></figure>

Si nous essayons d'exécuter une injection [NoSQL ](/fr/web-vulnerabilities/nosql-attack.md)parce que la base de données est **MongoDB**, elle répond avec le code promo :

<figure><img src="/files/1221c48d6be2ae20e9cdfce035393a2e13529baa" alt="" width="563"><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-vulnerabilities/api-attack/abus-dapi-pentesting-web.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.
