Az - Pass the PRT
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
U odeljku SSO State, trebali biste videti AzureAdPrt
postavljen na DA.
U istom izlazu takođe možete videti da li je uređaj povezan sa Azure (u polju AzureAdJoined
):
PRT kolačić se zapravo zove x-ms-RefreshTokenCredential
i to je JSON Web Token (JWT). JWT sadrži 3 dela, zaglavlje, payload i potpis, podeljene tačkom .
i sve su url-sigurne base64 kodirane. Tipičan PRT kolačić sadrži sledeće zaglavlje i telo:
Primarni osvežavajući token (PRT) je enkapsuliran unutar refresh_token
, koji je enkriptovan ključem pod kontrolom Azure AD, čime su njegovi sadržaji neprozirni i nekriptovani za nas. Polje is_primary
označava enkapsulaciju primarnog osvežavajućeg tokena unutar ovog tokena. Da bi se osiguralo da kolačić ostane vezan za specifičnu sesiju prijavljivanja za koju je namenjen, request_nonce
se prenosi sa stranice logon.microsoftonline.com
.
LSASS proces će poslati KDF kontekst TPM-u, a TPM će koristiti session key (prikupljen kada je uređaj registrovan u AzureAD i sačuvan u TPM-u) i prethodni kontekst da izvede ključ, a ovaj izvedeni ključ se koristi za potpisivanje PRT kolačića (JWT).
KDF kontekst je nonce iz AzureAD i PRT koji stvara JWT pomešan sa kontekstom (nasumični bajtovi).
Stoga, čak i ako PRT ne može biti ekstrahovan jer se nalazi unutar TPM-a, moguće je zloupotrebiti LSASS da zatraži izvedene ključeve iz novih konteksta i koristi generisane ključeve za potpisivanje kolačića.
Kao običan korisnik moguće je zatražiti korišćenje PRT-a tražeći od LSASS-a SSO podatke. To se može uraditi kao nativne aplikacije koje traže tokene od Web Account Manager (token broker). WAM prosleđuje zahtev LSASS-u, koji traži tokene koristeći potpisanu PRT tvrdnju. Ili se može uraditi sa tokovima zasnovanim na pretraživaču (web) gde se PRT kolačić koristi kao zaglavlje za autentifikaciju zahteva za Azure AS stranice za prijavu.
Kao SYSTEM mogli biste ukrasti PRT ako nije zaštićen TPM-om ili interagovati sa PRT ključevima u LSASS-u koristeći kripto API-je.
Za više informacija o ovom načinu proverite ovu objavu. ROADtoken će pokrenuti BrowserCore.exe
iz pravog direktorijuma i koristiti ga da dobije PRT kolačić. Ovaj kolačić se zatim može koristiti sa ROADtools za autentifikaciju i dobijanje trajnog osvežavajućeg tokena.
Da biste generisali važeći PRT kolačić, prva stvar koja vam je potrebna je nonce. Možete to dobiti sa:
Ili korišćenjem roadrecon:
Zatim možete koristiti roadtoken da dobijete novi PRT (pokrenite alat iz procesa korisnika koji napadate):
Kao oneliner:
Zatim možete koristiti generisani kolačić da generišete tokene za prijavu koristeći Azure AD Graph ili Microsoft Graph:
Get-AADIntUserPRTToken
dobija korisnikov PRT token sa Azure AD povezanog ili hibridno povezanog računara. Koristi BrowserCore.exe
za dobijanje PRT tokena.
Ili ako imate vrednosti iz Mimikatz, možete takođe koristiti AADInternals za generisanje tokena:
Idite na https://login.microsoftonline.com, obrišite sve kolačiće za login.microsoftonline.com i unesite novi kolačić.
Zatim idite na https://portal.azure.com
Ostatak bi trebao biti podrazumevani. Uverite se da možete osvežiti stranicu i da kolačić ne nestaje, ako nestane, možda ste napravili grešku i morate ponovo proći kroz proces. Ako ne nestane, trebali biste biti u redu.
PRT (Primarni osvežavajući token) se izvlači iz LSASS (Servis lokalne bezbednosti) i čuva za kasniju upotrebu.
Ključ sesije se zatim izvlači. S obzirom na to da se ovaj ključ inicijalno izdaje, a zatim ponovo enkriptuje od strane lokalnog uređaja, neophodno je dekriptovati ga koristeći DPAPI master ključ. Detaljne informacije o DPAPI (API za zaštitu podataka) možete pronaći u ovim resursima: HackTricks a za razumevanje njegove primene, pogledajte Napad Pass-the-cookie.
Nakon dekripcije Ključa sesije, dobijaju se derivirani ključ i kontekst za PRT. Ovi su ključni za kreiranje PRT kolačića. Konkretno, derivirani ključ se koristi za potpisivanje JWT (JSON Web Token) koji čini kolačić. Sveobuhvatno objašnjenje ovog procesa je pružio Dirk-jan, dostupno ovde.
Imajte na umu da ako je PRT unutar TPM-a i nije unutar lsass
, mimikatz neće moći da ga izvuče.
Međutim, biće moguće dobiti ključ iz deriviranog 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 ekstrakciju ovih detalja ovde: https://dirkjanm.io/digging-further-into-the-primary-refresh-token/
Ovo neće tačno raditi nakon ispravki iz avgusta 2021. za dobijanje PRT tokena drugih korisnika, jer samo korisnik može dobiti svoj PRT (lokalni administrator ne može pristupiti PRT-ima drugih korisnika), ali može pristupiti svom.
Možete koristiti mimikatz za ekstrakciju PRT:
(Images from https://blog.netwrix.com/2023/05/13/pass-the-prt-overview)
Kopirajte deo označen Prt i sačuvajte ga.
Izvucite takođe sesijski ključ (KeyValue
polja ProofOfPossesionKey
) koji možete videti označen ispod. Ovo je enkriptovano i biće nam potrebni naši DPAPI master ključevi da bismo ga dekriptovali.
Ako ne vidite nikakve PRT podatke, može biti da nemate PRT-ove jer vaš uređaj nije povezan sa Azure AD ili može biti da pokrećete staru verziju Windows 10.
Da biste dekriptovali sesijski ključ, potrebno je da povećate svoja ovlašćenja na SYSTEM da biste radili pod kontekstom računara kako biste mogli da koristite DPAPI master ključ za dekriptovanje. Možete koristiti sledeće komande za to:
Sada želite da kopirate i Context vrednost:
I vrednost deriviranog ključa:
Na kraju, možete iskoristiti sve ove informacije da generišete PRT kolačiće:
Idite na https://login.microsoftonline.com, obrišite sve kolačiće za login.microsoftonline.com i unesite novi kolačić.
Zatim idite na https://portal.azure.com
Ostatak bi trebao biti podrazumevani. Uverite se da možete osvežiti stranicu i da kolačić ne nestaje, ako nestane, možda ste napravili grešku i morate ponovo proći kroz proces. Ako ne nestane, trebali biste biti u redu.
Prvo obnovite PRT, što će ga sačuvati u roadtx.prt
:
Sada možemo zatražiti tokene koristeći interaktivni pregledač sa roadtx browserprtauth
. Ako koristimo komandu roadtx describe
, vidimo da pristupni token uključuje MFA zahtev jer je PRT koji sam koristio u ovom slučaju takođe imao MFA zahtev.
Imajući kontekst i izvedeni ključ izbačen od strane mimikatz, moguće je koristiti roadrecon za generisanje novog potpisanog kolačića sa:
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)