Az - Pass the PRT
Last updated
Last updated
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ć 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:
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
.
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.
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.
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:
Ili koristeći roadrecon:
Zatim možete koristiti roadtoken da biste dobili novi PRT (pokrenite alat iz procesa korisnika za napad):
Kao jednolinijski:
Zatim možete koristiti generisani kolačić da biste generisali token za prijavu korišćenjem Azure AD Grafa ili Microsoft Grafa:
Get-AADIntUserPRTToken
dobija korisnikov PRT token sa Azure AD pridruženog ili Hibridno pridruženog računara. Koristi BrowserCore.exe
za dobijanje PRT tokena.
Ili, ako imate vrednosti iz Mimikatza, takođe možete koristiti AADInternals da generišete token:
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
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.
PRT (Primarni osvežavajući token) se izvlači iz LSASS (Lokalna podsistema za bezbednost) i čuva za kasniju upotrebu.
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.
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:
(Слике са 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:
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:
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
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.
Prvo obnovite PRT, koji će biti sačuvan u roadtx.prt
:
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.
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: