
CVE-2018-8581
Dies ist eine Schwachstelle für laterale Bewegung und Privilegieneskalation auf Mailbox-Ebene.
Mit einem normalen Mailbox-Konto und Passwort kann sie die Delegierung und Übernahme des Posteingangs anderer Benutzer (einschließlich Domänenadministratoren) durchführen.
Dieses EXP-Skript ist eine verbesserte Ein-Klick-Version, die auf dem Original-PoC basiert. Nach Konfiguration der relevanten Parameter wird automatisch das Hinzufügen und Entfernen von Delegierungsberechtigungen für den Posteingang des Ziel-Mailboxes durchgeführt, um es Sicherheitsabteilungen und Red Teams zu erleichtern, einen simulierten Angriff auf autorisierte Unternehmen durchzuführen.
Das Original-PoC bestand aus zwei Skripten, die zusammenarbeiteten, um eine Nachrichtenregel hinzuzufügen. In der praktischen Arbeit von Red Teams war es nicht sehr nützlich. Das Original-PoC benötigte zusätzlich zum Mailbox-Konto noch die SID des Zielbenutzers. Die in dem Artikel erwähnte Methode zum Abrufen der Benutzer-SID konnte ich in meiner Umgebung mit Exchange Server 2010 und 2013 nicht erfolgreich reproduzieren (2010 hatte keine entsprechende Option, 2013 zeigte eine Berechtigungsverweigerung an). Schließlich kam ich auf die Idee, zuerst eine umgekehrte Delegierung durchzuführen, um die SID des Zielbenutzers zu erhalten, und dann die Delegierung zu entfernen.
Installiere python-ntlm
pip install python-ntlm
Konfiguriere die relevanten Parameter im folgenden Code des Skripts
...
# 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/"
...
Führe das Skript aus, trinke einen Schluck Goji-Tee und warte eine Minute.
![]()
Der Posteingang von TARGET_EMAIL wurde erfolgreich an CONTROLLED_EMAIL delegiert.
Überprüfe den Posteingang des Zielpostfachs in OWA oder Outlook.
Setze FLAG auf 0, führe das Skript erneut aus, trinke noch einen Schluck Goji-Tee und warte eine weitere Minute. Dadurch wird die zuvor hinzugefügte Delegierung entfernt.
Kein Zugriff mehr möglich.
Python 2.7.14
Exchange Server 2010 SP2
Exchange Server 2013
Weitere EWS SOAP-API-Anfragen können in der Funktion make_relay_body() geändert werden.
Das Skript dient nur zu Lern- und Kommunikationszwecken. Der Benutzer muss die geltenden lokalen Gesetze einhalten. Bei einer anderen Nutzung übernimmt der Autor keinerlei rechtliche Verantwortung. Der Download und die Nutzung bedeuten, dass der Benutzer den obigen Aussagen zustimmt.