Авторские курсы Михаила Тарасова

Business Logic Abuse: Как копеечные переводы превращают твой счёт в банкомат

Business Logic Abuse: How penny transfers turn your account into an ATM

Братан, сегодня разберём классику жанра — атаку на логику округления. Пока сисадмины латают SQL-инъекции, ты будешь доить финтех-стартапы через банальную арифметику 3-го класса. Добро пожаловать в мир, где 0.001₽ × 1000000 тв мир, где 0.001₽ × 1000000 транзакций = новая Тесла.

Че за дичь: анатомия бага

Финтех-сервисы работают с деньгами в двух форматах:

  • Frontend: рубли с копейками (100.50₽)

  • Backend: целые числа в копейках (10050 коп)

Проблема начинается при конвертации валют. Классический пример:

Твоя задача: накопить эти «зависшие копейки» и вывести их.

Точка входа: где искать

Что вижу

  • API-ручка /api/v1/transfer без лимитов на количество микротранзакций

  • Параметр amount принимает float (первый звоночек)

  • Ответ содержит balance_before и balance_after — можно вычислить дельту

Как поймал

Фишка: отправляй 1000 запросов с amount: 0.01. Если после каждого баланс изменяется не на ровную копейку — ты нашёл округление.

Чем пахнет

  • Класс: Business Logic → Rounding Error Exploitation

  • Вероятность: 8/10 (если нет rate-limiting и комиссий в float)

Эксплойт: от теории к практике

Базовая атака (2018-стайл)

Результат: за 1000 итераций (2 минуты) → +5₽ из воздуха. Масштабируй на ботнет из 100 аккаунтов — профит.

Продвинутая версия (2025+)

Современные сервисы блочат одинаковые суммы. Обходим через рандом:

Почему работает: три округления (RUB→USDT→EUR→RUB) = три точки для сбора «мусора».

Советы: как добить

Вектор 1: Комиссии в процентах

Если сервис берёт 0.5% комиссии, но округляет до вычета:

Мои курсы