Search
Write a publication
Pull to refresh

Как я получал перевод 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, и вот что я получил в ответ:
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.