Перейти к содержимому

Поиск по платформе

Business Logic: Стек купонов

Система купонов позволяет применять несколько купонов одновременно, суммируя скидки сверх допустимого

Автор: Hack & Fix
Освоишь: инварианты в БДidempotencystate-machine
Средне+60 XP ~40 мин golang
CWE-840 · A04:2021 Pro
Обложка: Business Logic: Стек купонов Обложка: Business Logic: Стек купонов
Задача
# Business Logic: накопление скидок купонами ## Сценарий Вы — зарегистрированный пользователь **FashionFox**, магазина мерча, с балансом **$500**. В корзине есть поле промокода: вводите код — получаете процент скидки. Маркетинг запускал две акции, коды обеих публичны: `SAVE10` и `HACK20`. Разработчик уверен, что система купонов корректна: каждый код даёт фиксированный процент, торговля исключениями не предусмотрена. В каталоге есть товар **CTF Flag** за **$9999** — обычной покупкой он вам не по карману. Задача — получить его, используя только штатные возможности магазина. ## Цель 1. Изучите механизм применения купонов: что сервер проверяет при отправке кода — существование купона, повторное применение, количество активных купонов в корзине. 2. Найдите способ довести скидку на заказ до величины, делающей товар доступным, используя только применение купонов — без подмены цены, количества или идентификатора товара. 3. Оформите заказ на **CTF Flag** и получите флаг из подтверждения заказа. ## Теория Уязвимости класса **Business Logic** — нарушение бизнес-инвариантов, не покрываемых классическими защитами. Авторизация, CSRF-токены и параметризованные запросы могут быть в полном порядке, но если инвариант «в корзине действует не более одной скидки, а суммарная скидка ограничена» не выражен в коде, сервер примет каждое применение купона как валидное. **Уязвимый паттерн:** ```go // Купон добавляется без проверки уже применённых к корзине if _, err := h.db.Exec("INSERT INTO cart_coupons (user_id, coupon_id) VALUES (?, ?)", user.ID, couponID); err != nil { ``` Скидки активных купонов суммируются при расчёте итога. Если ничто не мешает применять купоны снова и снова, суммарный процент растёт неограниченно — и цена товара перестаёт иметь значение. ## Точка входа атаки * **Вход:** `demo` / `demo` (баланс $500) * **Купон:** `POST /cart/coupon`, поле `code`; оформление заказа — `POST /cart/checkout` * **Публичные коды:** `SAVE10` (10%), `HACK20` (20%) * **Цель:** товар **CTF Flag** ($9999); флаг появится в подтверждении заказа

Похожие лабораторные (2)

другие лабы по этой уязвимости
Обложка лабы: Business Logic: Подмена цены в форме Обложка лабы: Business Logic: Подмена цены в форме
BizLogic

Business Logic: Подмена цены в форме

Checkout читает цену товара из скрытого поля формы вместо базы данных, позволяя подменить стоимость заказа

+60 XP
Go Pro
Exploit Fix
Обложка лабы: Business Logic: Отрицательное количество товаров Обложка лабы: Business Logic: Отрицательное количество товаров
BizLogic

Business Logic: Отрицательное количество товаров

Корзина магазина принимает отрицательное количество товаров, позволяя получить отрицательную сумму заказа и увеличить баланс

+30 XP
Go Pro
Exploit Fix