> 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/business-logic/logical-flaw-allowing-you-to-generate-infinite-money.md).

# Логическая ошибка, позволяющая создавать бесконечные деньги

### Логическая уязвимость бесконечных денег

**Описание лабораторной работы**

В этом учебном стенде есть логическая ошибка в процессе покупки. Из-за плохого взаимодействия между \*\*подарочными картами\*\*, \*\*промокупонами\*\* и **подтверждением заказа**, можно неограниченно генерировать кредит, а затем купить кожаную куртку Lightweight l33t.

Предоставленный идентификатор:

* **Пользователь**: wiener
* **Пароль**: peter

<figure><img src="/files/5b04b2e66662470af5a1c3bd1557358791db48a8" alt=""><figcaption></figcaption></figure>

### Принцип ошибки

После регистрации на рассылку выдается промокупон:

* **Купон** : `SIGNUP30`

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

<figure><img src="/files/3deafd8750e173ff70982de1c69c5d9a2c45cd42" alt=""><figcaption></figcaption></figure>

В магазине можно купить \*\*подарочные карты\*\*.

Проблема в том, что купон можно применить при покупке этих карт.

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

#### Первый пример эксплуатации

* Покупка подарочной карты на **$10**
* Применение купона `SIGNUP30`
* Итоговая уплаченная цена: **$7**

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

* Получение **кода подарочной карты** (например: `DbWseYFi2v`)

<figure><img src="/files/01113d928f5bfe8de59c968f536376ac2762d16e" alt=""><figcaption></figcaption></figure>

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

Когда этот код используется в разделе Gift Cards, баланс счета увеличивается на **10$** в то время как было потрачено только **7$** .

Следовательно, чистая прибыль составляет **$3**, увеличивая общий кредит до **$103**.

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

### Выявленные логические ошибки

1. Купон можно использовать **несколько раз** для покупки подарочных карт.
2. Кредит за подарочные карты **по-прежнему начисляется в полном объеме**, независимо от фактически уплаченной цены.
3. Подтверждение заказа через эндпоинт:

   ```bash
   /cart/order-confirmation?order-confirmed=true
   ```

позволяет динамически извлекать код подарочной карты.

Никаких ограничений, препятствующих автоматизации этого процесса, нет.

<figure><img src="/files/438380aef2c0fc2cf30f128cc2c8ddb9ba4731cd" alt=""><figcaption></figcaption></figure>

### Автоматизация атаки (макрос)

Чтобы эксплуатировать эту масштабную ошибку,  **макрос Burp Suite** реализуется.

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

#### Перехваченные запросы в макросе

1. Добавить товар **Подарочная карта** в корзину
2. Применение купона рассылки (`SIGNUP30`)
3. Проверка заказа (`оформить заказ`)
4. Получение ответа подтверждения заказа
5. Регистрация подарочной карты на учетной записи пользователя

<figure><img src="/files/108609ce22f8470461491ab18aa16ed2d5deadc4" alt=""><figcaption></figcaption></figure>

#### Ключевые моменты макроса

* У **кода подарочной карты** извлекается динамически из `cart/order-confirmation` ответа.

<figure><img src="/files/02f404c5afb43c23331fd5bf4ecc67db9cd6a90a" alt=""><figcaption></figcaption></figure>

* Затем этот код повторно внедряется POST-запросом на конечную точку управления подарочными картами.
* Пользовательский **параметра** устанавливается в GET-запросе для сохранения значения кода.

<figure><img src="/files/847708e51c1112797373064b78d3707e61edb079" alt=""><figcaption></figcaption></figure>

Примененный купон получает свое значение из предыдущего запроса, что позволяет автоматически повторно использовать его.

<figure><img src="/files/2b146eb2643b14c98d68611987fd5aac7fa454b1" alt=""><figcaption></figcaption></figure>

### Массовое выполнение

После настройки макроса:

Все запросы для **области URL** автоматически запускают макрос.

* Один **Intruder** запрос отправляется в корень сайта.
* Настройка:
* **500 запросов**
* **Полезная нагрузка null**

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

**Пул ресурсов** ограничен до **1 одновременного запроса**

<figure><img src="/files/733a6a74e7ad4afddcf0f1d68c108b89901686d9" alt="" width="364"><figcaption></figcaption></figure>

Этот подход позволяет без перерыва выполнять цепочки покупок, подтверждений и зачислений подарочных карт.

#### Результат

Баланс счета бесконечно увеличивается. / Как только накопится достаточно кредита, покупка **кожаной куртки Lightweight l33t** становится возможной без финансовых ограничений.

<figure><img src="/files/492836f6d9e54107adaea159546bb0d13f395015" alt="" width="375"><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/business-logic/logical-flaw-allowing-you-to-generate-infinite-money.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.
