diff --git a/src/pentesting-cloud/azure-security/az-basic-information/az-tokens-and-public-applications.md b/src/pentesting-cloud/azure-security/az-basic-information/az-tokens-and-public-applications.md index e62aed71f..ba0a2fcf8 100644 --- a/src/pentesting-cloud/azure-security/az-basic-information/az-tokens-and-public-applications.md +++ b/src/pentesting-cloud/azure-security/az-basic-information/az-tokens-and-public-applications.md @@ -1,100 +1,100 @@ -# Az - Tokens & Public Applications +# Az - Tokeni & Javne aplikacije {{#include ../../../banners/hacktricks-training.md}} -## Osnovne Informacije +## Osnovne informacije -Entra ID je Microsoftova platforma za upravljanje identitetom i pristupom (IAM) zasnovana na oblaku, koja služi kao osnovni sistem za autentifikaciju i autorizaciju za usluge kao što su Microsoft 365 i Azure Resource Manager. Azure AD implementira OAuth 2.0 okvir za autorizaciju i OpenID Connect (OIDC) protokol za autentifikaciju kako bi upravljao pristupom resursima. +Entra ID je Microsoftova platforma za upravljanje identitetima i pristupom (IAM) zasnovana u oblaku, koja služi kao osnovni sistem autentikacije i autorizacije za servise poput Microsoft 365 i Azure Resource Manager. Azure AD implementira OAuth 2.0 autorizacioni okvir i OpenID Connect (OIDC) protokol autentikacije za upravljanje pristupom resursima. ### OAuth **Ključni učesnici u OAuth 2.0:** -1. **Server resursa (RS):** Štiti resurse koje poseduje vlasnik resursa. -2. **Vlasnik resursa (RO):** Obično krajnji korisnik koji poseduje zaštićene resurse. -3. **Klijentska aplikacija (CA):** Aplikacija koja traži pristup resursima u ime vlasnika resursa. -4. **Server za autorizaciju (AS):** Izdaje pristupne tokene klijentskim aplikacijama nakon autentifikacije i autorizacije. +1. **Resource Server (RS):** Štiti resurse koje poseduje vlasnik resursa. +2. **Resource Owner (RO):** Obično krajnji korisnik koji poseduje zaštićene resurse. +3. **Client Application (CA):** Aplikacija koja traži pristup resursima u ime vlasnika resursa. +4. **Authorization Server (AS):** Izdaje access tokene klijentskim aplikacijama nakon što ih autentifikuje i autorizuje. -**Opsezi i saglasnost:** +**Scopes i pristanak:** -- **Opsezi:** Granularne dozvole definisane na serveru resursa koje specificiraju nivoe pristupa. -- **Saglasnost:** Proces kojim vlasnik resursa daje klijentskoj aplikaciji dozvolu za pristup resursima sa specifičnim opsezima. +- **Scopes:** Granularne dozvole definisane na resource server-u koje specificiraju nivoe pristupa. +- **Consent:** Proces kojim vlasnik resursa daje klijentskoj aplikaciji dozvolu da pristupi resursima sa specifičnim scope-ovima. -**Integracija sa Microsoft 365:** +**Integracija Microsoft 365:** -- Microsoft 365 koristi Azure AD za IAM i sastoji se od više "prvih strana" OAuth aplikacija. +- Microsoft 365 koristi Azure AD za IAM i sastoji se od više "first-party" OAuth aplikacija. - Ove aplikacije su duboko integrisane i često imaju međuzavisne odnose usluga. -- Da bi pojednostavio korisničko iskustvo i održao funkcionalnost, Microsoft daje "implicitnu saglasnost" ili "pre-saglasnost" ovim aplikacijama prve strane. -- **Implicitna saglasnost:** Određene aplikacije automatski **dobijaju pristup specifičnim opsezima bez eksplicitne saglasnosti korisnika ili administratora**. -- Ovi pre-saglašeni opsezi su obično skriveni i od korisnika i od administratora, čineći ih manje vidljivim u standardnim upravljačkim interfejsima. +- Da bi pojednostavio korisničko iskustvo i održao funkcionalnost, Microsoft dodeljuje "implied consent" ili "pre-consent" ovim first-party aplikacijama. +- **Implied Consent:** Određene aplikacije su automatski **dodeljene pristup određenim scope-ovima bez eksplicitnog odobrenja korisnika ili administratora.** +- Ovi unapred odobreni scope-ovi su obično skriveni i od korisnika i od administratora, što ih čini manje vidljivim u standardnim upravljačkim interfejsima. **Tipovi klijentskih aplikacija:** -1. **Poverljivi klijenti:** -- Imaju svoje sopstvene akreditive (npr. lozinke ili sertifikate). -- Mogu **sigurno da se autentifikuju** na serveru za autorizaciju. -2. **Javni klijenti:** -- Nemaju jedinstvene akreditive. -- Ne mogu sigurno da se autentifikuju na serveru za autorizaciju. -- **Bezbednosna implikacija:** Napadač može da se pretvara da je javna klijentska aplikacija prilikom traženja tokena, jer ne postoji mehanizam za server za autorizaciju da verifikuje legitimnost aplikacije. +1. **Confidential Clients:** +- Imaju sopstvene kredencijale (npr. lozinke ili sertifikate). +- Mogu se **bezbedno autentifikovati** kod authorization server-a. +2. **Public Clients:** +- Nemaju jedinstvene kredencijale. +- Ne mogu se bezbedno autentifikovati kod authorization server-a. +- **Bezbednosna implikacija:** Napadač može da se predstavlja kao public client application prilikom zahteva za tokene, jer authorization server nema mehanizam da proveri legitimnost aplikacije. -## Autentifikacioni Tokeni +## Autentifikacioni tokeni Postoje **tri tipa tokena** koji se koriste u OIDC: -- [**Pristupni tokeni**](https://learn.microsoft.com/en-us/azure/active-directory/develop/access-tokens)**:** Klijent predstavlja ovaj token serveru resursa da bi **pristupio resursima**. Može se koristiti samo za specifičnu kombinaciju korisnika, klijenta i resursa i **ne može biti opozvan** do isteka - što je 1 sat po defaultu. -- **ID tokeni**: Klijent prima ovaj **token od servera za autorizaciju**. Sadrži osnovne informacije o korisniku. **Povezan je sa specifičnom kombinacijom korisnika i klijenta**. -- **Refresh tokeni**: Dodeljuju se klijentu zajedno sa pristupnim tokenom. Koriste se za **dobijanje novih pristupnih i ID tokena**. Povezani su sa specifičnom kombinacijom korisnika i klijenta i mogu biti opozvani. Podrazumevano vreme isteka je **90 dana** za neaktivne refresh tokene i **nema isteka za aktivne tokene** (iz refresh tokena je moguće dobiti nove refresh tokene). -- Refresh token treba biti vezan za **`aud`**, za neke **opsege**, i za **tenanta** i treba da može da generiše pristupne tokene samo za taj aud, opsege (i ništa više) i tenant. Međutim, ovo nije slučaj sa **FOCI aplikacijama tokena**. +- [**Access Tokens**](https://learn.microsoft.com/en-us/azure/active-directory/develop/access-tokens)**:** Klijent prezentuje ovaj token resource server-u da bi **pristupio resursima**. Može se koristiti samo za specifičnu kombinaciju korisnika, klijenta i resursa i **ne može biti opozvan** dok ne istekne — podrazumevano 1 sat. +- **ID Tokens**: Klijent prima ovaj **token od authorization server-a**. Sadrži osnovne informacije o korisniku. **Vezan** je za specifičnu kombinaciju korisnika i klijenta. +- **Refresh Tokens**: Dodeljuju se klijentu zajedno sa access token-om. Koriste se za **dobijanje novih access i ID tokena**. Vezani su za specifičnu kombinaciju korisnika i klijenta i mogu se opozvati. Podrazumevano istekuju nakon **90 dana** za neaktivne refresh tokene i **nemaju isteka za aktivne tokene** (jer je iz refresh tokena moguće dobiti nove refresh tokene). +- Refresh token bi trebao biti vezan za **`aud`**, za neke **scopes**, i za **tenant** i trebao bi moći da generiše access tokene samo za taj aud, te scope-ove (i ništa više) i tenant. Međutim, to nije slučaj sa **FOCI applications tokens**. - Refresh token je enkriptovan i samo Microsoft može da ga dekriptuje. - Dobijanje novog refresh tokena ne opoziva prethodni refresh token. > [!WARNING] -> Informacije za **uslovni pristup** su **smeštene** unutar **JWT**. Dakle, ako zatražite **token sa dozvoljene IP adrese**, ta **IP** će biti **smeštena** u tokenu i tada možete koristiti taj token sa **nedozvoljene IP adrese za pristup resursima**. +> Informacije za **conditional access** su **smeštene** unutar **JWT**. Dakle, ako zatražite **token sa dozvoljene IP adrese**, ta **IP** će biti **smeštena** u token i potom možete koristiti taj token sa **ne-dozvoljene IP adrese da pristupite resursima**. -### Pristupni Tokeni "aud" +### Access Tokens "aud" -Polje označeno u "aud" polju je **server resursa** (aplikacija) koji se koristi za obavljanje prijave. +Vrednost navedena u polju "aud" je **resource server** (aplikacija) koja se koristi za prijavu. -Komanda `az account get-access-token --resource-type [...]` podržava sledeće tipove i svaki od njih će dodati specifičan "aud" u rezultantnom pristupnom tokenu: +Komanda `az account get-access-token --resource-type [...]` podržava sledeće tipove i svaki od njih će dodati specifičan "aud" u rezultujući access token: > [!CAUTION] -> Imajte na umu da su sledeće samo API-jevi podržani od strane `az account get-access-token`, ali ih ima više. +> Imajte na umu da su sledeći API-ji samo oni podržani od strane `az account get-access-token`, ali ih ima još.
-aud primeri +aud examples -- **aad-graph (Azure Active Directory Graph API)**: Koristi se za pristup starom Azure AD Graph API (ukinut), koji omogućava aplikacijama da čitaju i pišu podatke direktorijuma u Azure Active Directory (Azure AD). +- **aad-graph (Azure Active Directory Graph API)**: Koristi se za pristup legacy Azure AD Graph API-ju (deprecated), koji omogućava aplikacijama da čitaju i pišu podatke direktorijuma u Azure Active Directory (Azure AD). - `https://graph.windows.net/` -* **arm (Azure Resource Manager)**: Koristi se za upravljanje Azure resursima putem Azure Resource Manager API-ja. Ovo uključuje operacije kao što su kreiranje, ažuriranje i brisanje resursa kao što su virtuelne mašine, skladišni nalozi i još mnogo toga. +* **arm (Azure Resource Manager)**: Koristi se za upravljanje Azure resursima preko Azure Resource Manager API-ja. To uključuje operacije poput kreiranja, ažuriranja i brisanja resursa kao što su virtuelne mašine, storage nalozi i slično. - `https://management.core.windows.net/ or https://management.azure.com/` -- **batch (Azure Batch Services)**: Koristi se za pristup Azure Batch, usluzi koja omogućava efikasno izvođenje aplikacija za paralelno i visokoperformantno računanje u oblaku. +- **batch (Azure Batch Services)**: Koristi se za pristup Azure Batch-u, servisu koji omogućava efikasno izvođenje velikih paralelnih i high-performance computing aplikacija u oblaku. - `https://batch.core.windows.net/` -* **data-lake (Azure Data Lake Storage)**: Koristi se za interakciju sa Azure Data Lake Storage Gen1, koja je skalabilna usluga za skladištenje podataka i analitiku. +* **data-lake (Azure Data Lake Storage)**: Koristi se za interakciju sa Azure Data Lake Storage Gen1, koji je skalabilan servis za skladištenje podataka i analitiku. - `https://datalake.azure.net/` -- **media (Azure Media Services)**: Koristi se za pristup Azure Media Services, koje pružaju usluge obrade i isporuke medija zasnovane na oblaku za video i audio sadržaj. +- **media (Azure Media Services)**: Koristi se za pristup Azure Media Services, koji obezbeđuje cloud-based servise za procesiranje i isporuku medija za video i audio sadržaje. - `https://rest.media.azure.net` -* **ms-graph (Microsoft Graph API)**: Koristi se za pristup Microsoft Graph API-ju, jedinstvenom kraju za podatke usluga Microsoft 365. Omogućava vam pristup podacima i uvidima iz usluga kao što su Azure AD, Office 365, Enterprise Mobility i Security usluge. +* **ms-graph (Microsoft Graph API)**: Koristi se za pristup Microsoft Graph API-ju, jedinstvenom endpointu za podatke Microsoft 365 servisa. Omogućava pristup podacima i uvidima iz servisa kao što su Azure AD, Office 365, Enterprise Mobility i Security servisi. - `https://graph.microsoft.com` -- **oss-rdbms (Azure Open Source Relational Databases)**: Koristi se za pristup Azure Database uslugama za open-source relacione baze podataka kao što su MySQL, PostgreSQL i MariaDB. +- **oss-rdbms (Azure Open Source Relational Databases)**: Koristi se za pristup Azure Database servisima za open-source relacione baze podataka kao što su MySQL, PostgreSQL i MariaDB. - `https://ossrdbms-aad.database.windows.net`
-### Pristupni Tokeni Opsezi "scp" +### Access Tokens Scopes "scp" -Opseg pristupnog tokena se čuva unutar scp ključa unutar JWT pristupnog tokena. Ovi opsezi definišu šta pristupni token može da pristupi. +Opseg (scope) access tokena se čuva u ključu scp unutar JWT access tokena. Ti scope-ovi definišu šta access token ima pravo da radi. -Ako je JWT dozvoljeno da kontaktira određeni API, ali **nema opseg** za izvršenje tražene radnje, **neće moći da izvrši radnju** sa tim JWT-om. +Ako je JWT ovlašćen da kontaktira određeni API ali **nema scope** za izvršenje tražene akcije, **neće moći da izvrši tu akciju** sa tim JWT-om. -### Primer dobijanja refresh & pristupnog tokena +### Primer dobijanja refresh i access tokena ```python # Code example from https://github.com/secureworks/family-of-client-ids-research import msal @@ -106,7 +106,7 @@ from typing import Any, Dict, List # LOGIN VIA CODE FLOW AUTHENTICATION azure_cli_client = msal.PublicClientApplication( -"04b07795-8ddb-461a-bbee-02f9e1bf7b46" # ID for Azure CLI client +"00b41c95-dab0-4487-9791-b9d2c32c80f2" # ID for Office 365 Management ) device_flow = azure_cli_client.initiate_device_flow( scopes=["https://graph.microsoft.com/.default"] @@ -144,31 +144,31 @@ scopes=["https://graph.microsoft.com/.default"], ) pprint(new_azure_cli_bearer_tokens_for_graph_api) ``` -### Ostala polja pristupnog tokena +### Ostala polja access token-a -- **appid**: ID aplikacije koji se koristi za generisanje tokena -- **appidacr**: Referenca klase konteksta autentifikacije aplikacije ukazuje na to kako je klijent autentifikovan, za javnog klijenta vrednost je 0, a ako se koristi tajna klijenta vrednost je 1 -- **acr**: Zahtev za referencom klase konteksta autentifikacije je "0" kada autentifikacija krajnjeg korisnika nije ispunila zahteve ISO/IEC 29115. -- **amr**: Metoda autentifikacije ukazuje na to kako je token autentifikovan. Vrednost “pwd” ukazuje da je korišćena lozinka. -- **groups**: Ukazuje na grupe u kojima je glavni korisnik član. -- **iss**: Izdavač identifikuje servis za bezbednosne tokene (STS) koji je generisao token. npr. https://sts.windows.net/fdd066e1-ee37-49bc-b08f-d0e152119b04/ (uuid je ID zakupca) -- **oid**: ID objekta glavnog korisnika -- **tid**: ID zakupca -- **iat, nbf, exp**: Izdato (kada je izdato), Ne pre (ne može se koristiti pre ovog vremena, obično ista vrednost kao iat), Vreme isteka. +- **appid**: ID aplikacije koji je korišćen za generisanje tokena +- **appidacr**: Application Authentication Context Class Reference ukazuje kako je klijent autentifikovan; za public client vrednost je 0, a ako se koristi client secret vrednost je 1 +- **acr**: Authentication Context Class Reference claim je "0" kada autentifikacija krajnjeg korisnika nije ispunila zahteve ISO/IEC 29115. +- **amr**: Authentication method pokazuje kako je token autentifikovan. Vrednost “pwd” označava da je korišćena lozinka. +- **groups**: Ukazuje na grupe čiji je principal član. +- **iss**: Identifikuje security token service (STS) koji je generisao token. e.g. https://sts.windows.net/fdd066e1-ee37-49bc-b08f-d0e152119b04/ (the uuid is the tenant ID) +- **oid**: Objektni ID principala +- **tid**: Tenant ID +- **iat, nbf, exp**: Issued at (kad je izdat), Not before (ne može se koristiti pre tog vremena, obično ista vrednost kao iat), Expiration time. -## FOCI Tokeni Eskalacija privilegija +## FOCI Tokens Privilege Escalation -Prethodno je pomenuto da bi refresh tokeni trebali biti vezani za **opsege** sa kojima su generisani, za **aplikaciju** i **zakupca** za koje su generisani. Ako se bilo koja od ovih granica prekine, moguće je eskalirati privilegije jer će biti moguće generisati pristupne tokene za druge resurse i zakupce kojima korisnik ima pristup i sa više opsega nego što je prvobitno predviđeno. +Ranije je pomenuto da refresh tokens treba biti vezan za **scopes** sa kojima je generisan, za **application** i **tenant** kome je generisan. Ako je bilo koja od ovih granica prekršena, moguće je eskalirati privilegije jer će biti moguće generisati access tokens za druge resurse i tenant-e kojima korisnik ima pristup i sa više scopes nego što je prvobitno bilo predviđeno. -Štaviše, **to je moguće sa svim refresh tokenima** u [Microsoft identity platform](https://learn.microsoft.com/en-us/entra/identity-platform/) (Microsoft Entra računi, Microsoft lični računi i društveni računi kao što su Facebook i Google) jer, kao što [**dokumentacija**](https://learn.microsoft.com/en-us/entra/identity-platform/refresh-tokens) pominje: "Refresh tokeni su vezani za kombinaciju korisnika i klijenta, ali **nisu vezani za resurs ili zakupca**. Klijent može koristiti refresh token za dobijanje pristupnih tokena **kroz bilo koju kombinaciju resursa i zakupca** gde ima dozvolu da to učini. Refresh tokeni su enkriptovani i samo Microsoft identity platform može da ih pročita." +Štaviše, **ovo je moguće sa svim refresh tokens** u [Microsoft identity platform](https://learn.microsoft.com/en-us/entra/identity-platform/) (Microsoft Entra accounts, Microsoft personal accounts, and social accounts like Facebook and Google) zato što, kako [**docs**](https://learn.microsoft.com/en-us/entra/identity-platform/refresh-tokens) navode: "Refresh tokens are bound to a combination of user and client, but **aren't tied to a resource or tenant**. A client can use a refresh token to acquire access tokens **across any combination of resource and tenant** where it has permission to do so. Refresh tokens are encrypted and only the Microsoft identity platform can read them." -Takođe, imajte na umu da su FOCI aplikacije javne aplikacije, tako da **nije potrebna tajna** za autentifikaciju na serveru. +Takođe, imajte na umu da su FOCI applications public applications, pa **no secret is needed** da bi se autentifikovalo prema serveru. -Poznati FOCI klijenti prijavljeni u [**originalnom istraživanju**](https://github.com/secureworks/family-of-client-ids-research/tree/main) mogu se [**pronaći ovde**](https://github.com/secureworks/family-of-client-ids-research/blob/main/known-foci-clients.csv). +Poznati FOCI klijenti prijavljeni u [**original research**](https://github.com/secureworks/family-of-client-ids-research/tree/main) mogu se [**found here**](https://github.com/secureworks/family-of-client-ids-research/blob/main/known-foci-clients.csv). -### Dobijanje različitog opsega +### Zahtev za drugi scope -Nastavljajući sa prethodnim primerom koda, u ovom kodu se traži novi token za različit opseg: +U nastavku prethodnog primera koda, u ovom kodu se zahteva novi token za drugačiji scope: ```python # Code from https://github.com/secureworks/family-of-client-ids-research azure_cli_bearer_tokens_for_outlook_api = ( @@ -185,7 +185,7 @@ scopes=[ ) pprint(azure_cli_bearer_tokens_for_outlook_api) ``` -### Dobijanje različitih klijenata i opsega +### Dobij drugog klijenta i scope-ove ```python # Code from https://github.com/secureworks/family-of-client-ids-research microsoft_office_client = msal.PublicClientApplication("d3590ed6-52b3-4102-aeff-aad2292ab01c") @@ -201,27 +201,28 @@ scopes=["https://graph.microsoft.com/.default"], # How is this possible? pprint(microsoft_office_bearer_tokens_for_graph_api) ``` -## Gde pronaći tokene +## Where to find tokens -Iz perspektive napadača, veoma je zanimljivo znati gde je moguće pronaći pristupne i osvežavajuće tokene kada je, na primer, PC žrtve kompromitovan: +Sa stanovišta napadača, korisno je znati gde je moguće pronaći access i refresh tokens, na primer kada je PC žrtve kompromitovan: - Unutar **`/.Azure`** -- **`azureProfile.json`** sadrži informacije o prijavljenim korisnicima iz prošlosti -- **`clouds.config` sadrži** informacije o pretplatama -- **`service_principal_entries.json`** sadrži akreditive aplikacija (tenant id, klijente i tajnu). Samo na Linuxu i macOS-u -- **`msal_token_cache.json`** sadrži pristupne tokene i osvežavajuće tokene. Samo na Linuxu i macOS-u -- **`service_principal_entries.bin`** i **`msal_token_cache.bin`** se koriste na Windows-u i su enkriptovani sa DPAPI +- **`azureProfile.json`** sadrži informacije o korisnicima koji su se ranije prijavljivali +- **`clouds.config`** sadrži informacije o pretplatama +- **`service_principal_entries.json`** sadrži kredencijale aplikacija (tenant id, clients i secret). Samo na Linux & macOS +- **`msal_token_cache.json`** sadrži access tokens i refresh tokens. Samo na Linux & macOS +- **`service_principal_entries.bin`** i `msal_token_cache.bin` se koriste na Windows i šifrovani su sa DPAPI - **`msal_http_cache.bin`** je keš HTTP zahteva -- Učitajte ga: `with open("msal_http_cache.bin", 'rb') as f: pickle.load(f)` -- **`AzureRmContext.json`** sadrži informacije o prethodnim prijavama koristeći Az PowerShell (ali ne i akreditive) -- Unutar **`C:\Users\\AppData\Local\Microsoft\IdentityCache\*`** se nalaze nekoliko `.bin` fajlova sa **pristupnim tokenima**, ID tokenima i informacijama o nalogu enkriptovanim sa korisnikovim DPAPI. -- Moguće je pronaći više **pristupnih tokena** u `.tbres` fajlovima unutar **`C:\Users\\AppData\Local\Microsoft\TokenBroken\Cache\`** koji sadrže base64 enkriptovane sa DPAPI pristupne tokene. -- Na Linuxu i macOS-u možete dobiti **pristupne tokene, osvežavajuće tokene i id tokene** iz Az PowerShell-a (ako se koristi) pokretanjem `pwsh -Command "Save-AzContext -Path /tmp/az-context.json"` -- Na Windows-u ovo samo generiše id tokene. -- Moguće je videti da li je Az PowerShell korišćen na Linuxu i macOS-u proverom da li `$HOME/.local/share/.IdentityService/` postoji (iako su sadržani fajlovi prazni i beskorisni) -- Ako je korisnik **prijavljen unutar Azure-a putem pregledača**, prema ovom [**postu**](https://www.infosecnoodle.com/p/obtaining-microsoft-entra-refresh?r=357m16&utm_campaign=post&utm_medium=web) moguće je započeti tok autentifikacije sa **preusmeravanjem na localhost**, omogućiti pretraživaču da automatski autorizuje prijavu i primiti osvežavajući token. Imajte na umu da postoji samo nekoliko FOCI aplikacija koje omogućavaju preusmeravanje na localhost (kao što su az cli ili PowerShell modul), tako da ove aplikacije moraju biti dozvoljene. +- Učitaj: `with open("msal_http_cache.bin", 'rb') as f: pickle.load(f)` +- **`AzureRmContext.json`** sadrži informacije o prethodnim prijavama korišćenjem Az PowerShell (ali bez kredencijala) +- Unutar **`C:\Users\\AppData\Local\Microsoft\IdentityCache\*`** nalazi se nekoliko `.bin` fajlova sa **access tokens**, ID tokens i informacijama o nalogu šifrovanim korisnikovim DPAPI. +- Moguće je pronaći još **access tokens** u `.tbres` fajlovima unutar **`C:\Users\\AppData\Local\Microsoft\TokenBroken\Cache\`** koji sadrže base64 šifrovan sa DPAPI sa access tokens. +- Na Linux i macOS možete dobiti **access tokens, refresh tokens and id tokens** iz Az PowerShell (ako je korišćen) pokretanjem `pwsh -Command "Save-AzContext -Path /tmp/az-context.json"` +- Na Windows ovo generiše samo id tokens. +- Moguće je proveriti da li je Az PowerShell korišćen na Linux i macSO proverom da li postoji `$HOME/.local/share/.IdentityService/` (iako su fajlovi unutar prazni i beskorisni) +- Ako je korisnik **ulogovan u Azure preko browsera**, prema ovom [**postu**](https://www.infosecnoodle.com/p/obtaining-microsoft-entra-refresh?r=357m16&utm_campaign=post&utm_medium=web) moguće je pokrenuti autentifikacioni flow sa **redirect to localhost**, naterati browser da automatski odobri prijavu i dobiti refresh token. Imajte na umu da postoji samo nekoliko FOCI aplikacija koje dozvoljavaju redirect to localhost (kao što su az cli ili powershell module), tako da te aplikacije moraju biti dozvoljene. +- Druga opcija objašnjena na blogu je da se koristi alat [**BOF-entra-authcode-flow**](https://github.com/sudonoodle/BOF-entra-authcode-flow) koji može koristiti bilo koju aplikaciju jer će **get the OAuth code to then get a refresh token from the title of the final auth** page koristeći redirect URI `https://login.microsoftonline.com/common/oauth2/nativeclient`. -## Reference +## References - [https://github.com/secureworks/family-of-client-ids-research](https://github.com/secureworks/family-of-client-ids-research) - [https://github.com/Huachao/azure-content/blob/master/articles/active-directory/active-directory-token-and-claims.md](https://github.com/Huachao/azure-content/blob/master/articles/active-directory/active-directory-token-and-claims.md)