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

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

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

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

Автор: Hack & Fix
Освоишь: инварианты в БДidempotencystate-machine
Легко+30 XP ~25 мин golang
CWE-840 · A04:2021 Pro
Обложка: Business Logic: Отрицательное количество товаров Обложка: Business Logic: Отрицательное количество товаров
Задача
# Business Logic: отрицательное количество товара ## Сценарий Вы — зарегистрированный пользователь **GadgetGrove**, магазина гаджетов, с балансом **$500**. В каталоге есть товар **CTF Flag** за **$9999** — обычной покупкой он недоступен. Товары добавляются в корзину штатной формой карточки, а поле количества ограничено браузерным минимумом прямо в разметке. Разработчик уверен: раз форма не позволяет ввести плохое значение, серверу дополнительная проверка не нужна. Проверьте, так ли это, — и найдите способ привести баланс к нужной величине одними лишь штатными запросами магазина. ## Цель 1. Изучите, как сервер обрабатывает добавление товара в корзину: как поле количества разбирается, проверяется и попадает в расчёт итога и баланса. 2. Подберите такое значение количества, которое проходит штатную обработку, но нарушает инвариант стоимости заказа в вашу пользу, — без подмены цены, идентификатора товара или баланса. 3. Воспользуйтесь эффектом, оформите заказ на **CTF Flag** и получите флаг из подтверждения. ## Теория Уязвимости класса **Business Logic** возникают, когда бизнес-инварианты — «количество товара положительно», «итог заказа неотрицателен», «баланс не растёт от покупок» — не выражены в коде. Обработчик может быть безупречен с точки зрения инъекций: параметризованные запросы, экранирование, CSRF. Но если число из формы уходит в арифметику без проверки диапазона, арифметика честно посчитает и отрицательный итог. **Уязвимый паттерн:** ```go quantity, err := strconv.Atoi(r.FormValue("quantity")) if err != nil { quantity = 1 } // Диапазон не проверяется — отрицательное значение попадает в корзину ``` Ограничение минимума в разметке формы — клиентский механизм: он действует только внутри браузера. Запрос, отправленный напрямую в обход формы, проходит без проверки; итог корзины становится отрицательным, и оформление такого заказа зачисляет «возврат» на баланс. ## Точка входа атаки * **Вход:** `demo` / `demo` (баланс $500) * **Добавление в корзину:** `POST /cart/add`, поля `product_id`, `quantity` * **Оформление заказа:** `POST /cart/checkout` * **Цель:** товар **CTF Flag** ($9999); флаг появится в подтверждении заказа

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

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

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

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

+60 XP
Go Pro
Exploit Fix
Обложка лабы: Business Logic: Подмена цены в форме Обложка лабы: Business Logic: Подмена цены в форме
BizLogic

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

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

+60 XP
Go Pro
Exploit Fix