Как стать автором
Обновить

Как я получал перевод migom

Здравствуйте уважаемые хабровчане. Хочу рассказать вам как я впервые воспользовался услугами переводов migom, и почему мой опыт был, так сказать, необычным. Так же надеюсь что руководство системы возможно обратит внимание на баги, и сделают свой сервис хоть на капельку лучше, или хотя бы закроют существующие баги.

Обращаю внимание что никакого «взлома» и прочих вещей я не производил, просто воспользовался теми возможностями, которые доступны любому посетителю сайта.


Предыстория


Началось все с того, что появилась необходимость провести денежный перевод с Беларусии в Украину суммой Х. Предварительно переговорив с человеком, который должен был отправлять перевод выбрали популярную систему, назовем ее условно «стрим».
Собственно по каким то, не известным мне причинам, заказчик не смог сделать перевод через проверенную мной систему «стрим», и выполнил его через migom. Вот с этого момента и начался батхерт.

Мне было необходимо сразу же проверить, действительно в системе есть данный перевод, или меня просто «кинули» написав произвольный «номер перевода» (да-да, и такое бывало). Недолго думая, перешел на сайт migom.com и попытался воспользоваться формой «проверка статуса перевода», обычно такая функция есть у всех подобных организациях/сайтах.

Вбивая контрольный номер, и фамилию отправителя, я сразу обратил внимание на то что проверка идет по http каналу (не зашифрованному). Попробовал зайти по https — увидел не подписанный сертификат, что тоже меня огорчило. Возможно, для кого то атаки формата «человек по середине» не страшны, но в тот момент, для меня это было важно (не было доступа к vpn, да и лично у меня бывали неприятные случаи).

Ну да ладно, отложил проверку, позже подсоединился к надежной сети, и попытался проверить статус перевода. Проверка статуса не работала. Другими словами, что вводил произвольное число, что действительный номер перевода — результат был одинаковым «Результат перевода:», и в добавок «подождите N секунд».

Поиск способа проверки перевода


Я думаю рядовой пользователь на этом месте, развернулся бы и не пытался разрешить проблему. Обычно, я в таких ситуациях отправляю сообщение с описанием бага. Сначала я попытался воспользоваться формой «задать вопрос», но как ни странно, она тоже не работала, из-за правил ограничения домена js ( если заходить на www домен).
Ну да ладно, оформил сообщение, послал с помощью формы на www домене и на почту migom@migom.com и некоторые дрругие почтовые ящики формата "@migom.com". Прошел день, ответа — нет. Других контактных данных я не нашел. По телефону +7 (800) 555-88-55 — никому не дозвонился.

Тут то я уже решил найти «способ проверки», так как идти в кассу или в другой пункт «вывода» просто не было возможности. Просмотрел исходный код, и за 2 минуты просто нашел уязвимость в php скриптах расположенных в админке:
http://migom.com/_admincp/index.php
Она позволяла просто провести авторизацию любому пользователю. Приводить полное описание здесь не буду, так как на момент написания поста эти проблемы остаются открытыми, да и найти баг не составит труда.

Не долго думаю — вошел в админку:


Функции «проверки статуса перевода» там не нашлось, поэтому решил проверить что есть. Первым я проверил загрузчик файлов, и не зря — он принимал файлы любого типа.


Загрузил пару файлов:
http://migom.com/upload/store/p/info.php
http://migom.com/upload/store/p/habr.php
Загрузчик скушал, и не поругался.

Далее присмотрелся к файлу ajax/checkž_transfer.php — перевод проверялся через этот скрипт.
Начало не оставило надежды на качественный код, там было типичное «php месиво». Все таки я нашел curl код, отвечающий за запрос к dll шлюза etrust.ru. Да и в базе данных храниться вся необходимая информация для проверки платежа.

  1. $ch = curl_init();
  2. $opts = array(
  3.         CURLOPT_URL => $dll_url,
  4.         CURLOPT_SSL_VERIFYPEER => 0,
  5.         CURLOPT_SSL_VERIFYHOST => 0,
  6.         CURLOPT_POSTFIELDS => $xml,
  7.         CURLOPT_HTTPHEADER => array($dll_header,'Content-Type:text/xml; charset=windows-1251'),
  8.         CURLOPT_RETURNTRANSFER => 1,
  9.         CURLOPT_TIMEOUT => 30,
  10.         CURLOPT_HEADER => 0,
  11.         CURLINFO_HEADER_OUT => 1,
  12.         CURLOPT_FOLLOWLOCATION => 0,
  13.         CURLOPT_FAILONERROR => 0,
  14.         CURLOPT_PROTOCOLS => CURLPROTO_HTTP|CURLPROTO_HTTPS,
  15.         CURLOPT_REDIR_PROTOCOLS => CURLPROTO_HTTP|CURLPROTO_HTTPS
  16. );
  17. curl_setopt_array($ch, $opts);
  18. $response = curl_exec($ch);
  19. print_r($response);


Вот так я проверил, что мой перевод на указанную сумму не существует, а на самом деле мне перевели на 100$ чем договаривались.

Итог


Я не преследовал цели подорвать репутацию компании, или производить какие либо не законные действия. Перед тем как писать этот пост, я все еще не надеялся на денежное вознаграждение, на то что мне ответят и послал еше одно сообщение на migom@migom.com, и вот что я получил в ответ:
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.