В этой статье я рас­ска­жу про кейс с Bug Bounty, в котором мне уда­лось обой­ти биз­нес‑логику при­ложе­ния, соз­давать валид­ные пла­тежи и спи­сывать день­ги кли­ентов. Я тес­тировал API одной финан­совой орга­низа­ции, у которой есть фонд с лич­ным кабине­том. Основные фун­кции были за авто­риза­цией, за исклю­чени­ем кноп­ки «Сде­лать взнос»...

Это иссле­дова­ние получи­ло вто­рое мес­то на Pentest Award 2025 в катего­рии «Hack the logic». Сорев­нование еже­год­но про­водит­ся ком­пани­ей Awillix.

Наз­вание кей­са «Один шаг до кри­та» — не прос­то так. Я бук­валь­но поменял step=0 на step=1 и, даже не откры­вая Burp, получил два кри­тич­ных для вен­дора бага: спи­сание средств кли­ента по под­дель­ным дан­ным (опла­та на про­изволь­ный договор без валида­ции дан­ных) плюс мас­совая генера­ция чеков об опла­те. Оцен­ка кри­тич­ности — critical.

 

Баг первый: обход валидации данных

Эн­дпо­инт API https://lk.domain.com/api/v3/pay поз­воля­ет обой­ти сер­верную валида­цию вход­ных парамет­ров (номер догово­ра, пас­пор­тные дан­ные), сфор­мировать дей­ству­ющую пла­теж­ную ссыл­ку и про­вес­ти опла­ту день­гами с кар­ты поль­зовате­ля, даже если ука­зан­ные договор­ные дан­ные фик­тивны. Пос­ле завер­шения тран­закции фор­миру­ется офи­циаль­ная кви­тан­ция, под­твержда­ющая опла­ту, нес­мотря на отсутс­твие про­вер­ки дан­ных; день­ги спи­сыва­ются с кар­ты кли­ента в «фонд орга­низа­ции» на несущес­тву­ющий договор — «в никуда».

 

Как воспроизвести

Я начал иссле­дова­ние и зна­комс­тво с тес­тиру­емой орга­низа­цией на ресур­се lk.domain.com и нажал пер­вую попав­шуюся кноп­ку «Сде­лать взнос». Далее запол­нил фор­му взно­са про­изволь­ными дан­ными и нажал «Про­дол­жить».

Пример заполнения
При­мер запол­нения

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

Пример ошибки
При­мер ошиб­ки

Ко­неч­но, сра­зу хочет­ся про­верить реали­зацию про­вер­ки невер­ных парамет­ров, но я не стал торопить­ся и откры­вать Burp. Зачас­тую дос­таточ­но осмотреть­ся, «потыкать кноп­ки» и бли­же поз­накомить­ся с логикой работы при­ложе­ния, а так­же с его легитим­ными фун­кци­ями и биз­нес‑логикой. Этим я и занял­ся, открыв инс­тру­мен­ты раз­работ­чика вмес­то Burp, — мно­гие баги дей­стви­тель­но мож­но най­ти без спе­циали­зиро­ван­ных инс­тру­мен­тов.

В коде кноп­ки «Про­дол­жить» скры­вал­ся POST-зап­рос со все­ми парамет­рами из GUI, токеном кап­чи и любопыт­ным парамет­ром step=0.

Во­ору­жив­шись инс­тру­мен­тами раз­работ­чика (DevTools), я открыл зап­рос со ста­тусом 400 и вос­поль­зовал­ся фун­кци­ей Edit and Resend. В теле POST-зап­роса я изме­нил зна­чение парамет­ра step с 0 на 1 и отпра­вил зап­рос пов­торно. Кап­ча боль­ше не мешала — она уже была успешно прой­дена на пре­дыду­щем шаге через интерфейс сай­та.

Я готовил­ся к оче­ред­ной ошиб­ке валида­ции, но на деле далее я убе­дил­ся в ста­тусе 200 и получил ссыл­ку на опла­ту на этом всё, баг най­ден, спа­сибо за проч­тение.

Пример изменения атрибута step с 0 на 1 и повторная отправка запроса с получением ссылки на оплату
При­мер изме­нения атри­бута step с 0 на 1 и пов­торная отправ­ка зап­роса с получе­нием ссыл­ки на опла­ту

Пос­ле перехо­да по ссыл­ке на payecom.ru наб­люда­ем пла­теж­ку с ука­зан­ной сум­мой и над­писью «Фонд орга­низа­ции» (на скрин­шоте, к сожале­нию, необ­ходимо замазать). Так как сис­тема опла­ты (payecom.ru) выходит за ско­уп, никакие манипу­ляции с ней я делать не пытал­ся.

Продолжение доступно только участникам

Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

Вариант 2. Открой один материал

Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.


  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии