TL;DR: случайно нашёл простой способ купить платный сервис за 1 рубль вместо полной суммы. Сообщил об этом администраторам ресурса, в итоге получил год подписки бесплатно. Для прожжёных багхантеров – ничего интересного.
Давно хотел научиться уже наконец смотреть фильмы на английском в оригинале. С техническими вещами (лекции, курсы, семинары и т. п.) особых проблем у меня нет – но вот с художественными фильмами и даже играми беда-печаль.
А между тем качество перевода на русский зачастую оставляет желать лучшего. Вот, к примеру, несколько кадров из русской локализации Dead Space 3:
Я – очень обязательный и целеустремлённый человек, поэтому минимум раз в год обещаю себе подтянуть английский. Правда, постоянно как-то так в жизни получается, что возникает огромное количество более срочных дел – родные, друзья, Skyrim — поэтому на английский времени не остаётся. Прямо заговор какой-то.
Не так давно у меня случилось очередное обострение, и я стал шерстить Сеть в поисках какого-нибудь подходящего сайта, обучающего английскому. Перебрал несколько вариантов; в итоге остановился на одном, который привлёк внимание интерфейсом и некоторыми заявленными возможностями. На одном из разделов сайта оказались сериалы на английском с весьма, на мой взгляд, удобно сделанными субтитрами — ну и прочими вкусными плюшками типа словаря и комментариев к сложным и тонким деталям языка.
После ознакомления с демо-версией происходящего было принято решение, что надо бы купить полный доступ ко всем сериям. Вдоволь поплакав над своими кровными денежками, я проследовал на страницу оплаты товара.
И тут меня почему-то потянуло открыть Fiddler. Я много слышал про то, что умные люди с его помощью умеют встраивать XSS, списывать с мобильника деньги, красть учётки от контакта и взламывать Пентагон. У меня самого так никогда не получалось, но ведь рассказывают же!
Итак, я запустил Fiddler, нажал на кнопку «Оплатить» — и увидел вот такую картину:
Выделенный POST-запрос имел следующий вид:
Я с удивлением обнаружил, что там содержится до боли знакомая мне сумма моего заказа, которая приходит в ответе от сервера.
Известно, что Fiddler может перехватывать не только исходящие, но и входящие запросы. Я перевёл его в этот режим.
После этого я попробовал оплатить заказ ещё раз — и, когда сервер вернул мне ответ «1580 рублей», я ничтоже сумняшеся переменил его на несколько меньшую цену в 80 рублей:
Открывшееся окошко платёжной системы подтвердило, что заплатить нужно именно столько:
Насторожившись, я ввёл данные карты и скрестил пальцы…
Через несколько секунд окошко сообщило, что оплата успешно прошла.
«Ого!?», — подумал я и пошёл писать письмо администраторам ресурса. Отдельных способов связи для такого рода сообщений я не нашёл, поэтому просто написал в техподдержку.
Отправил обращение я около полуночи. К обеду следующего дня мне написал специалист техподдержки, поблагодарил за информацию и сообщил, что уязвимость закрыта. Я был приятно удивлён оперативностью ответа.
В качестве бонуса предложили доступ к любой из платных услуг сайта; я, разумеется, выбрал сериалы.
Теперь-то уж наверняка буду смотреть.
Буду рад услышать отзывы, советы и мнения читателей в комментариях. Также предлагаю поучаствовать в коротеньком опросе общественного мнения.
Похоже, платёжная система меня таки забанила на некоторое время. :D
Разгадка проста: изначально я планировал купить две услуги, но потом рассудил, что мне и одних сериалов за глаза хватит.
Ведь я – очень обязательный и целеустремлённый человек.
?Здесь приводится официальная версия (сокращённая и отцензурированная).
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Комментарии (12)
Landgraph
06.03.2017 10:03+4Ещё в очень бородатые годы я писал статью, если не ошибаюсь в районе 2007 года, «Скрытая угроза: „неизменяемые“ поля» про аналогичную ситуацию тогда ещё просто с формами. Технологии идут вперёд, а ошибки идут всё те же… =(
lostpassword
06.03.2017 13:00Справедливости ради должен заметить, что в данном случае дело было, как мне видится, несколько в другом.)
Ответ от сервера с суммой заказа возвращается и сейчас; его всё так же можно подменить и попытаться оплатить меньшую сумму. Однако при попытке оплаты платёжная система возвращает ошибку.
Я сам никогда не работал с платёжными системами и не представляю, как обычно организован этот процесс. Документация на CloudPayment есть здесь https://cloudpayments.ru/Docs/Integration. Я особо не вникал, но похоже, что перед оплатой система отправляет данные на сервер магазина и требует подтвердить оплату со стороны магазина. Возможно, для идентификации заказа используется orderID, который анализируется сервером, и по результатам анализа выдаётся разрешение на оплату. Раньше, соответственно, эта проверка почему-то всегда выдавала true.Pakos
07.03.2017 10:30+1У каких-то платёжных систем передавалась контрольная сумма из нескольких полей (формировалась строка в т.ч. и из суммы, параметров заказа, соли и прочего), по ней считалась контрольная сумма (точный алгоритм не помню, возможно, она сначала шифровалась известными только магазину и платёжной системе ключами) и по ней платёжная система определяла корректность переданных данных.
GreyCat
06.03.2017 11:20+5Про ответственность — если бы сотрудники и владельцы ресурса оказались несколько менее вменяемыми — легко можно было бы иметь как минимум 159.6 УК РФ или 146, если не 272. Для следователя все вообще шикарно — состав преступления налицо — и человек все сам в письме написал и подтвердил (признает, извиняется и раскаивается), и в платежной системе все прошло, и личные координаты все видны из-за используемой карточки > банк выдаст моментально.
dartraiden
06.03.2017 12:41+2В 2011 году точно таким же образом покупали лицензионный Minecraft.
Я так однажды пробовал купить корпоративную версию утилиты OfficeTab. Там оказалась ручная премодерация заказов, так что ключ я получил лишь на следующий день… на фейковую почту в письме с благодарностью за указание «дыры» и просьбой «please don't make fraud orders» :D
На многих ресурсах при покупке передаётся не сумма, а ID товара, можно пытаться купить дорогой товар по полной цене дешевого.
dartraiden
06.03.2017 12:52+1Какую ответственность можно понести за подобные действия?
Ответы юриста: как избежать ответственности за поиск уязвимостейlostpassword
06.03.2017 13:15То есть в данной ситуации абсолютно безопасного способа проверки моей гипотезы не было вообще.
Ну разве что вариант оплатить чуть больше положенного, чтобы ничьи права не нарушать и никому ущерба не причинять, кроме себя.)sens_boston
06.03.2017 17:06Ну разве что вариант оплатить чуть больше положенного
Думаю, что даже в этом случае, при желании, можно было-бы «припаять» статью («был бы человек, а статья найдется!») за незаконное исследование трафика (согласно приведенной вверху ссылке).hdfan2
06.03.2017 18:25Разве может быть незаконным исследование своего собственного трафика? Он же его не перехватил у другого пользователя.
sens_boston
07.03.2017 06:57Я рассматривал случай, что после исследования он модифицировал запрос и заплатил больше положенного. С точки зрения закона (по крайней мере, исходя из ответа юриста) разницы особой нет, заплатил он меньше или больше; ключевые слова — несанкционированное вмешательство в работу программного обеспечения.
Привожу абзац из ссылки выше (если вам настолько лениво кликать):
Есть ли вообще какая-то ответственность за исследование и взлом чужой программы, сервиса, сети?
Если говорить про действующие российские законы, то да, есть. Когда исследователь тестирует чужой продукт на предмет уязвимостей или проникает в чужую сеть без ведома и согласия владельца, его действия могут быть расценены как неправомерные. И последствием таких действий может стать наступление ответственности различного рода: гражданско-правовой, административной и уголовной.
mazahakajay
Отличная статья. Стимулирует к работе над своими способностями в багхантинге )
Представляю сколько в сети еще крутится таких ресурсов!
Багхантиг — это просто! Багхантинг в массы!