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

# Злоупотребление API

## Установка веб-сервера из GitHub (злоупотребление 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

```

* Мы **зарегистрироваться** новый пользователь: ![](/files/c851ae949c8aa2d3d5581b0553fb64043f6ccdeb)

## Разведка API

* Чтобы найти уязвимости API, важно начать с **хорошей разведки**. В разделе Network перехватите запрос так же, как вы бы делали с [Burp Suite](/ru/hacking-tools/web/burpsuite.md) используя XHR: ![](/files/cc9678c693f9a601df0dc359f28ac9ededf6a2a0)
* Чтобы **структурировать и сохранять** все запросы API должным образом, мы используем **Postman**:

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

```

* Создайте новую **коллекцию** где сгруппированы все запросы API. Для **POST** запросов вставьте **URL** и особенно raw **body**: ![](/files/ceeaaffbca3f2f6ebb5961ea7636bd1cf74c1fe3) ![](/files/afcd65995f2ecc05c167fc76a5f1a6b49fdff6aa)
* Он возвращает **токен в структуре JWT** для входа: ![](/files/bd90b18e7ba5c15740ec3af3852eca9d76ad64bf)
* Создайте переменную с именем **accessToken** со значением токена входа: ![](/files/ea6ae94acc0738fbb49552535d6c91a867bc6541)
* В разделе **Авторизация**, привяжите переменную к типу **Токен Bearer**: ![](/files/5ce4afd51d278c8c144673deb446066114a3182e)
* Сохраните все **возможные запросы**:

1. Панель управления: ![](/files/a81f282ab77095e63210ce4f7757adc30090f54e)
2. Продукты: ![](/files/457e2f9792924b317fdedac40d710ac18f783aac)
3. Команда: ![](/files/76dd8f17082adc33a833707fe7b16ec44d841ca7)

## Уязвимости, связанные со злоупотреблением API:

### Восстановление токена методом перебора:

Есть возможность **сбросить пароль** путем получения токена по электронной почте:

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

На порту *8025*, есть **SMTP** где мы получаем токен:

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

Нажмите **Забыли пароль** с адресом электронной почты аккаунта, пароль которого вы хотите изменить:

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

Мы перехватываем **query** к API:

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

Мы отправляем запрос как **POST** с сырой структурой:

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

Мы используем **ffuf** чтобы запустить **атаку перебором**:

```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

```

У **токен подтверждения** 0172 вернул **успешный код статуса** и пароль был автоматически изменен:

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

### Изменение цен на продукты и увеличение доступного баланса:

Мы ищем с помощью **ffuf** возможный метод запроса **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

```

Это все **возможные методы**:

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

Если мы перейдем с **GET** на **POST**, вот что происходит:

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

Это **массовом присваивании** уязвимость, позволяющая создавать продукт через **POST** запросы. В данном случае мы создаем продукт с **отрицательной** ценой:

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

Таким образом, **интерпретируется** веб-сервером:

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

Поскольку цена **отрицательной**, каждый раз, когда мы нажимаем **купить**, к нашему балансу добавляется 10 000 долларов:

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

Если в запросе **заказы**, мы укажем номер продукта, например количество 100, наш баланс будет умножен на **100 x 10 000**:

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

### Найдите действительный код купона:

Мы отправляем запрос **validate-coupon**:

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

Поскольку купон **неверный**, сервер ничего не возвращает:

<figure><img src="/files/4ad9fb515807e607a4ca3e42aea9e0cb6e01a4bd" alt="" width="524"><figcaption></figcaption></figure>

Если мы попытаемся выполнить инъекцию [NoSQL ](/ru/web-vulnerabilities/nosql-attack.md)поскольку база данных **MongoDB**, она отвечает кодом купона:

<figure><img src="/files/e7d36060d4e56faaf6ec3de1c4f60110c60cff22" 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/ru/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.
