INTRO
Недавно столкнулся с обычной для интернета ситуацией — классической просьбой от родственника отдать свой голос за него в каком-то голосовании. Оказалось, человека "взломали" мошенники, а ссылки на голосование вели на фишинговые ресурсы.
Я увлекаюсь безопасностью, поэтому решил из интереса проверить безопасность фишингового ресурса.
"Админку" мошенников удалось успешно взломать, внутри нашлось n-количество украденных учеток. Их логины были переданы в службу безопасности VK, плюс соответствующие "abuse" жалобы были направлены регистраторам, хостерам.
А теперь расскажу как и какие оказываются бывают Phishing-as-Service панели...
Началось все как обычно просьба от родственника отдать свой голос за него в каком-то голосовании:
Родственник:
Привет, просто хочу выиграть :) http://x-vote.ru/votes/701738#vote
На самом деле, большинство скорее всего проигнорирует подобную просьбу, но с точки зрения безопасности возникла заинтересованность в проверке на Race condition само голосование — удастся ли 1 аккаунту отдать по факту несколько голосов, отправив их несколько в один короткий промежуток времени.
К сожалению, проверить это так и не удалось. Ввиду, судя по всему, отсутствия всякого голосования, и к тому же не совсем той Oauth формой, которую хотелось бы увидеть.
Становится уже совсем очевидно, что это просто фишинг, и ничего более.
Однако просто покидать сайт, отказавшись от удовольствия проверить на Race Condition было бы поражением, сканирование портов и поиск директорий на предмет админки или интересных файлов ни к чему не привели, поэтому, быстро прикинув, я решил не писать в форму гадости, которые могли бы вызвать у хозяев фишинг-сайта колоссально-нравственные страдания.
Вместо этого я предположил, что данные, которые жертвы отправляют в форму, затем где-то отображаются, и фильтрация там отсутствует, и, значит, что вместо логина/пароля можно отправить "вредоносный" HTML+JS, или в простонародье Blind XSS. Слепой она называется, потому как факт его отрабатывания мы зафиксировать сразу не можем — только если на неё наткнется администратор/модератор по ту сторону.
Спустя день изучаем наш xsshunter — будничное действие для многих багбаунти хантеров. Это довольно простой и понятный ресурс для проверки на слепые XSS, который сразу может предоставить тебе:
- url, где произошло срабатывание;
- IP;
- Cookie;
- Dom-страницы;
… и еще по мелочи. Но в целом все тоже самое можно организовать, отправляя эти данные к себе, скажем, на VPS.
Нас интересует тот факт, что blind XSS-таки отработала успешно.
Исторически, упоминая XSS всегда предлагалось "красть сессию" (содержимое document.cookie).
Но в современном мире, как правило такое уже не работает — сессионные куки выставляются с заголовком "httpOnly", что делает их недоступными для вредосного JS.
Но XSS все еще опасны, по-прежнему можно обращаться к API сайтов в контексте уязвимого сайта, воровать данные со страницы (токены), хоть это и чуть более сложно.
Но злоумышленники не озаботились безопасностью сессии, поэтому мне удалось "угнать" сессию целиком.
Заходим на хост, меняем сессионную куку, попадаем внутрь.
Здесь в глаза бросаются, помимо логинов и паролей, тот факт, что панель не рассчитана на одного человека — а монетизируется продажей доступа туда.
К созданию подошли почти с душой. Не забыли добавить bootstrap с кнопочками, а также весьма расширенный функционал, а именно:
Выгрузка с различных форматах:
Прокси:
Ключи для API:
Логи выгрузов с IP.
Также такие панельки позволяют автоматически создавать хосты с выбранным содержанием, которое может привлечь пользователей, а именно:
Пример добавления и существующие хосты на аккаунте:
А вот, как выглядят классические сгенерированные страницы:
… и многие другие.
Разработчики фишинговой панели активно используют имеющееся API Вконтакте, например выгружают количество друзей, подписчиков, проверяют права администрирования в пабликах, и.т.д, например такие как execute.getDialogsWithProfilesNewFixGroups.php, примеры методов:
https://vk.com/dev/execute
Довольно примечательным являлась следующая ситуация.
Если зайти в аккаунт Вконтакте используя логин и пароль — велика вероятность словить подозрение от VK с просьбой ввести отправленный в личные сообщения код.
Однако при помощи их методов и access-токена, никаких проблем с этим не было, и тот же самый код можно было прочитать через этот функционал.
Выглядело это примерно так:
GET /method/execute.getDialogsWithProfilesNewFixGroups?access_token=****b750be150c961c******ace8d9dd54e448d5f5e5fd2******7e21388c497994536a740e3a45******&lang=ru&https=1&count=40&v=5.69 HTTP/1.1
Host: vk-api-proxy.xtrafrancyz.net
HTTP/1.1 200 OK
Date: Tue, 03 Mar 2020 09:57:08 GMT
Content-Type: application/json; charset=utf-8
Connection: close
Vary: Accept-Encoding
Server: vk-proxy
X-Powered-By: PHP/3.23359
Cache-Control: no-store
X-Frame-Options: DENY
Access-Control-Allow-Origin: *
Content-Length: 57453
{"response":{"a":{"count":271,"unread_dialogs":151,"items":[{"message":{"id":592***,"date":1583222677,"out":0,"user_id":14967****,"read_state":1,"title":"","body":"Код подтверждения входа: 063725.","owner_ids":[]},"in_read":592***,"out_read":592***}
ВК помнит, откуда пользователь обычно заходит на сайт. Предположительно, поэтому мошенники такое тоже предусмотрели и использовали различные прокси серверы разбросанные географически — чтобы "попасть" в туже зону, где обычно находится жертва. Этим объясняется тот факт, что при попытке проверить пару логин+пароль не вышло без лишних вопросов от ВК, однако сработало через их функционал, использующий прокси.
Это если говорить о том, как шагают и что предпринимают фишеры, чтобы атаковать пользователей, в поисках аккаунтов с большим количеством подписчиков и друзей, а также администраторов сообществ.
На самом деле, один из возникающих вопросов, это что делать дальше в таких ситуациях?
В общем-то, я собрал те фишинговые хосты и утёкшие аккаунты, помимо тех, что были видны в интерфейсе, также те, что были видны по эндпоинту с кучей мусора: непроверенный акков, оскорблений в сторону фишеров, и тихой записью с blind xss пейлоадом, что в дальнейшем было передано ребятам из VK по рекомендации и помощи Bo0oM, которые, скорее всего, в свою очередь проводят стандартную процедуру внесения этих сайтов в запрещенные, и сбросы паролей.
Также пошел процесс complaint'ов в сторону фишинговых хостов и панельки. Подавляющая часть была скрыта за cloudflare'ом, поэтому пришлось написать им. Этот процесс, к слову, весьма неудобный и отбивающий желание репортить такие сайты, т.к почему-то Cloudflare не хочет принимать жалобу на почту, но хочет принимать жалобу через https://www.cloudflare.com/abuse/form, причем не несколько хостов за раз — а каждый раз отдельно на 1 url ? \ (?) / ?
Но все же в их пользу стоит сказать — что бан они выдавали за 10 минут.
После чего некоторые из хостов начали выходить из под клаудфлеера, обнажая уже и хостинг, куда также была подана соответствующая информация.
UPD: Также была передана соответствующая информация и в QIWI с Yandex, для проверки уже кошельков.
xkondorx
А нельзя было бы вычислить арендатора хостинга и регистратора домена и отправить ему судебное постановление по статьям кражи конфиденциальных данных? Ну чтобы закон начал работать в нужную сторону. Как часто такие сайты регистрируются на подставных лиц, если они не могут озаботиться собственной безопасностью?
HelpOP
А что сложного в регистрации на Василия Васильевича? С паспортом 77 77 222333? Это же никто и никак не проверяет. Да и кто будет доказывать что Валера с того ip адреса из админ панели действительно что-то качал?
Ну и самый главный вопрос) Какие логины и пароли? Какой сайт? Что украли то? Вы попали на чужой сайт? Несанкционированно? Михалыч, у нас тут дурак по 272 с чистосердечным приперся.
xkondorx
Ну видимо это достойно минуса в карму… Нет ни какой необходимости объявлять о взломе, достаточно того факта, что это явно фишинговый ресурс.
HelpOP
Вы о чем вообще? 2 года назад я снял на камеру(телефона) как бабка царапает чужую машину. Позвонил в полицию, нашли собственника машины, узнали бабку(она была не рада новым соседям, резала интернет кабель, выключала свет в щитке и т.п), скинул видео, написал объяснительную, согласился быть свидетелем.
Итог вот:
lubezniy
Вообще-то судебное постановление выносится судом, и обязательно по обращению лица, права которого нарушены, или его представителя по закону или доверенности. Также от имени неопределённого круга лиц в суд вправе обращаться также прокурор. От кого-либо ещё суд обращений не примет. Так что для поворота закона в нужную сторону заявление надо подавать в полицию, чтобы возбуждали дело по 272 или 273 статье УК, проводили следствие и искали виновных лиц. Вот только есть нюанс: взлом чужой админки также считается незаконным действием, и можно попасть под раздачу заодно, только в отдельном производстве, поскольку это будет считаться уже другим преступлением.
olekl
Судебное постановление? Вы детский фильм «рыжий, честный, влюбленный» не смотрели?
hollow1
Красавчик, братан!
Evengard
Картинки не загружаются, приходится их вручную открывать…
Serge81
Интересный прием! Впервые прочитал!
exadmin
Спасибо, прочитал с интересом!
В целом — как восстановили ход расследования? Просто по пяти и сохранившимся логам и скриншотам?
GrichGory
никогда таких приемов не видел, очень круто
nanshakov
ВК уже вроде сильно зарезали возможность чтения сообщений, по крайней мере нужно получать специальный токен от них, иначе метод падает
Gamedef256
Можно мимикрировать под android клиент, взять андройдовский clientId/secretKey (благо легко гуглится) и дальше спокойно юзать любые api методы.
DREMON
Не понимаю как вы через XSS украли сессию у админа. Прислали ему ссылку с нагрузкой? Но тогда надо знать кто админ. Расскажите.
xawdxawdx Автор
Нужно понимать, что это не обычный пример, когда вы передаете ссылку вроде:
site.ru/?text=xss_payload
Вы подозреваете, что ваш инпут дойдет до администратора, в качестве таких примеров могут быть: жалоба на свой собственный аккаунт/сообщение с полезной нагрузкой, или контактная форма.
Конкретно в этом случае, я предположил, что раз это фишинг — то администратору нужно где-то видеть украденные логины/пароли.
Я сознательно ввел в логин и пароль XSS пейлоад, который затем отработал, когда администратор захотел просмотреть украденные аккаунты — тем самым отправив мне свои куки, в которых и содержалась сессия
DREMON
Все понял, не очевидно было для меня. Спасибо.
smitt14ua
Вероятно, автор встроил в XSS скрипт и JS-ом передал все данные сессии и куки человека с доступом к админке на свой сервер.
UPD: Так и есть (ссылка)
mayorovp
"Ссылка с нагрузкой" — это так называемый отражённый XSS. А существует ещё хранимый XSS.
DREMON
Спасибо!
EminH
Прогресс не остановить!
А нет там случайно функции обхода двухфакторной аутентификации?
python273
Так что ее обходить. Если юзер достаточно глупый и у него почему-то двухфакторка включена, он и от нее код введет, а дальше получить вечный токен не проблема. Да и проверка на подозрительные места у ВК глупая — спрашивает тот же номер, что юзер уже скорее всего ввел на этапе логина (раньше имейлы были)
Ahen
Сейчас вроде звонить начали, либо это мне так везло.
Приезжаешь в другую страну, логинишься в вк, думаешь о том как прекрасно жить в мире, где можно получить смс в чужой стране на свой номер абсолютно бесплатно, а тут хопа и вк тебе говорит я ща тебе позвоню, скажи с какого номера…
При этом ему плевать, он после попыток звонка не предлагает смс написать, а у меня вк на сим карте которой я не пользуюсь, чтобы получить звонок в роуминге это нужно аж 10$ закинуть, которые тут же будут сожраны (мегафон).
FFxSquall
А с каких пор операторы в роуминге списывают за входящий не принятый звонок?
Ahen
Мегафон. Там такая-то фишка, плати мол абонплату как дома и получай свои безлимиты, только они не уточняют что платить нужно ежедневно столько, сколько ты платишь дома за месяц. Как то отключить не разбирался, не лучшее времяпрепровождение.
Ну вот на второй симке у меня и сняли за первый день как за месяц, ушла в ноль, после чего входящие только смс, а звонки вообще ни в каком виде не доходят.
unC0Rr
Нужно подключить услугу «Просто роуминг». Новая фишка, вместо подключения услуги меняют условия, а для обычных условий нужно наоборот подключать услугу. Привыкшие к лишним услугам абоненты ищут, чего отключить, и не находят — профит!..
GreaB
Но ведь чтобы узнать номер звонившего не нужно принимать звонок.
alekssamos
Я когда включал 2ФА, мне предложили распечатать 10 резервных кодов, что я и сделал. Однажды даже пользовался ими, когда не было телефона под рукой. И вам советую. И тогда снова жизнь покажется радостной.
spice_harj
Очень приятно видеть, что есть сознательные граждане!
Совсем недавно, столкнулся с аналогичной ситуацией, взламывать не пытался даже —
передал в CERT-GIB Incident Response Team, продублировал касперычу (на что даже реакции не было) и в нетоскоп. Не 10 минут, но за 1.5 недели бан выписали, правда пришлось сделать для них полный анализ, подготовить скриншоты и ссылки. Надеюсь, ребятам и административная ответственность влетит т.к. занимаются откровенным вымогательством!
hit2hat
Около 2 лет назад я по приколу написал свой сервер, который имитирует работу oauth и api ВКонтакте, и сейчас абсолютно случайно увидел ссылку на свой репозиторий в этой статье. Флешбек так флекбек....
Спасибо за статью, было интересно
8street
Ну да, ну да. По приколу.
hit2hat
Можешь ридми посмотреть :D
lexani42
А ты неплох. Не думал что ещё остались сайты которые не закрывают xss. Особенно фишинговые…
podivilov
Господи, да куча их.
Bo0oM
Мой пездюк
getnaked89
Очень грамотная реклама сервиса под видом взлома самого сервиса.
xawdxawdx Автор
Я одобрю этот коммент, чтобы уточнить — были отправлены жалобы в клаудфлеер, на домены, на хостинг, а также в киви и яндекс для дальнейшего бана кошельков, а база скомпроментированных пользователей передана в ВК. Сам не нуждаюсь в том, чтобы производить такую рекламу. Но, спасибо, что «грамотная» :)
Max8k
Да здравствует справедливость! (даже захотелось короткометражку снять)))
Узнать бы ещё, что можно делать с смсками про взломанные карты — чтобы негодяям так же эффективно досталось!