Содержание статьи
Это исследование получило второе место на Pentest Award 2025 в категории «Hack the logic». Соревнование ежегодно проводится компанией Awillix.
Название кейса «Один шаг до крита» — не просто так. Я буквально поменял step=0 на step=1 и, даже не открывая Burp, получил два критичных для вендора бага: списание средств клиента по поддельным данным (оплата на произвольный договор без валидации данных) плюс массовая генерация чеков об оплате. Оценка критичности — critical.
Баг первый: обход валидации данных
Эндпоинт API https:// позволяет обойти серверную валидацию входных параметров (номер договора, паспортные данные), сформировать действующую платежную ссылку и провести оплату деньгами с карты пользователя, даже если указанные договорные данные фиктивны. После завершения транзакции формируется официальная квитанция, подтверждающая оплату, несмотря на отсутствие проверки данных; деньги списываются с карты клиента в «фонд организации» на несуществующий договор — «в никуда».
Как воспроизвести
Я начал исследование и знакомство с тестируемой организацией на ресурсе lk. и нажал первую попавшуюся кнопку «Сделать взнос». Далее заполнил форму взноса произвольными данными и нажал «Продолжить».

Ожидаемо получил ошибку со статусом 400 (bad request) и увидел, что номер договора и последние шесть цифр паспорта введены неверно.

Конечно, сразу хочется проверить реализацию проверки неверных параметров, но я не стал торопиться и открывать Burp. Зачастую достаточно осмотреться, «потыкать кнопки» и ближе познакомиться с логикой работы приложения, а также с его легитимными функциями и бизнес‑логикой. Этим я и занялся, открыв инструменты разработчика вместо Burp, — многие баги действительно можно найти без специализированных инструментов.
В коде кнопки «Продолжить» скрывался POST-запрос со всеми параметрами из GUI, токеном капчи и любопытным параметром step=0.
Вооружившись инструментами разработчика (DevTools), я открыл запрос со статусом 400 и воспользовался функцией Edit and Resend. В теле POST-запроса я изменил значение параметра step с 0 на 1 и отправил запрос повторно. Капча больше не мешала — она уже была успешно пройдена на предыдущем шаге через интерфейс сайта.
Я готовился к очередной ошибке валидации, но на деле далее я убедился в статусе 200 и получил ссылку на оплату на этом всё, баг найден, спасибо за прочтение.

После перехода по ссылке на payecom. наблюдаем платежку с указанной суммой и надписью «Фонд организации» (на скриншоте, к сожалению, необходимо замазать). Так как система оплаты (payecom.) выходит за скоуп, никакие манипуляции с ней я делать не пытался.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»
