Translated ['src/pentesting-cloud/azure-security/README.md', 'src/pentes

This commit is contained in:
Translator
2025-01-25 14:38:28 +00:00
parent 1ddab6b65d
commit e4fa58fa49
5 changed files with 337 additions and 245 deletions

View File

@@ -4,78 +4,84 @@
## Basiese Inligting
Leer die basiese beginsels van Azure en Entra ID op die volgende bladsy:
{{#ref}}
az-basic-information/
{{#endref}}
## Azure Pentester/Rooi Span Metodologie
## Azure Pentester/Red Team Metodologie
Om 'n AZURE omgewing te oudit, is dit baie belangrik om te weet: watter **dienste word gebruik**, wat is **blootgestel**, wie het **toegang** tot wat, en hoe is interne Azure dienste en **eksterne dienste** gekoppel.
Om 'n AZURE omgewing te oudit, is dit baie belangrik om te weet: watter **dienste gebruik word**, wat **blootgestel** word, wie **toegang** het tot wat, en hoe interne Azure dienste en **eksterne dienste** gekoppel is.
Vanuit 'n Rooi Span perspektief is die **eerste stap om 'n Azure omgewing te kompromitteer** om te slaag om 'n paar **akkrediteer** vir Azure AD te verkry. Hier is 'n paar idees oor hoe om dit te doen:
Vanuit 'n Red Team perspektief is die **eerste stap om 'n Azure omgewing te kompromitteer** om 'n **voorsprong** te verkry.
- **Lekke** in github (of soortgelyk) - OSINT
- **Sosiale** Ingenieurswese
- **Wagwoord** hergebruik (wagwoordlekke)
- Kw vulnerabilities in Azure-gehuisvesde toepassings
- [**Server Side Request Forgery**](https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html) met toegang tot metadata-eindpunt
- **Plaaslike Lêer Lees**
- `/home/USERNAME/.azure`
- `C:\Users\USERNAME\.azure`
- Die lêer **`accessTokens.json`** in `az cli` voor 2.30 - Jan2022 - gestoor **toegangstokens in duidelike teks**
- Die lêer **`azureProfile.json`** bevat **inligting** oor die ingelogde gebruiker.
- **`az logout`** verwyder die token.
- Ou weergawe van **`Az PowerShell`** het **toegangstokens** in **duidelike** teks in **`TokenCache.dat`** gestoor. Dit stoor ook **ServicePrincipalSecret** in **duidelike** teks in **`AzureRmContext.json`**. Die cmdlet **`Save-AzContext`** kan gebruik word om **tokens** te **stoor**.\
Gebruik `Disconnect-AzAccount` om hulle te verwyder.
- 3de partye **gekompromitteer**
- **Interne** Werknemer
- [**Algemene Phishing**](https://book.hacktricks.wiki/en/generic-methodologies-and-resources/phishing-methodology/index.html) (akkrediteer of Oauth App)
- [Toestelkode Verifikasie Phishing](az-unauthenticated-enum-and-initial-entry/az-device-code-authentication-phishing.md)
- [Azure **Wagwoord Spuit**](az-unauthenticated-enum-and-initial-entry/az-password-spraying.md)
### Eksterne enum & Begin Toegang
Selfs as jy **nie enige gebruiker** binne die Azure huurkontrak wat jy aanval, gecompromitteer het nie, kan jy **'n paar inligting** daaruit versamel:
Die eerste stap is natuurlik om inligting oor die tenant wat jy aanval, te evalueer en te probeer om 'n voorsprong te kry.
Gebaseer op die domeinnaam is dit moontlik om te weet **of die maatskappy Azure gebruik**, die **tenant ID** te kry, ander **geldige domeine** in dieselfde tenant (indien meer) te kry en **relevante inligting** soos of SSO geaktiveer is, e-pos konfigurasies, geldige gebruikers e-posse...
Kyk na die volgende bladsy om te leer hoe om die **eksterne enumerasie** uit te voer:
{{#ref}}
az-unauthenticated-enum-and-initial-entry/
{{#endref}}
> [!NOTE]
> Nadat jy daarin geslaag het om akkrediteer te verkry, moet jy weet **aan wie behoort daardie akkrediteer**, en **waartoe hulle toegang het**, so jy moet 'n paar basiese enumerasie uitvoer:
## Basiese Enumerasie
Met hierdie inligting is die mees algemene maniere om te probeer om 'n voorsprong te kry:
- **OSINT**: Kyk vir **lekke** in Github of enige ander oopbron platform wat **akkrediteer** of interessante inligting kan bevat.
- **Wagwoord** hergebruik, lekke of [wagwoord spuit](az-unauthenticated-enum-and-initial-entry/az-password-spraying.md)
- Koop akkrediteer van 'n werknemer
- [**Algemene Phishing**](https://book.hacktricks.wiki/en/generic-methodologies-and-resources/phishing-methodology/index.html) (akkrediteer of Oauth App)
- [Toestelkode Verifikasie Phishing](az-unauthenticated-enum-and-initial-entry/az-device-code-authentication-phishing.md)
- 3de partye **gekompromitteer**
- Kwetsbaarhede in Azure-gehoste toepassings
- [**Server Side Request Forgery**](https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html) met toegang tot metadata eindpunt
- **Subdomein oorneem** soos in [https://godiego.co/posts/STO-Azure/](https://godiego.co/posts/STO-Azure/)
- As 'n ontwikkelaar se skootrekenaar gecompromitteer is ([WinPEAS en LinPEAS](https://github.com/peass-ng/PEASS-ng) kan hierdie inligting vind):
- Binne **`<HOME>/.Azure`**
- **`azureProfile.json`** bevat inligting oor ingelogde gebruikers van die verlede
- **`clouds.config contains`** inligting oor intekeninge
- **`service_principal_entries.json`** bevat toepassings akkrediteer (tenant id, kliënte en geheim). Slegs in Linux & macOS
- **`msal_token_cache.json`** bevat toegangstokens en hernuwingstokens. Slegs in Linux & macOS
- **`service_principal_entries.bin`** en msal_token_cache.bin word in Windows gebruik en is met DPAPI versleuteld
- **`msal_http_cache.bin`** is 'n kas van HTTP versoek
- Laai dit: `with open("msal_http_cache.bin", 'rb') as f: pickle.load(f)`
- **`AzureRmContext.json`** bevat inligting oor vorige aanmeldings met Az PowerShell (maar geen akkrediteer nie)
- Binne **`C:\Users\<username>\AppData\Local\Microsoft\IdentityCache\*`** is verskeie `.bin` lêers met **toegangstokens**, ID tokens en rekeninginligting versleuteld met die gebruikers DPAPI.
- Dit is moontlik om meer **toegangstokens** in die `.tbres` lêers binne **`C:\Users\<username>\AppData\Local\Microsoft\TokenBroken\Cache\`** te vind wat 'n base64 versleuteling met DPAPI met toegangstokens bevat.
- In Linux en macOS kan jy **toegangstokens, hernuwingstokens en id tokens** van Az PowerShell (indien gebruik) verkry deur `pwsh -Command "Save-AzContext -Path /tmp/az-context.json"` te loop.
- In Windows genereer dit net id tokens.
- Dit is moontlik om te sien of Az PowerShell in Linux en macOS gebruik is deur te kyk of `$HOME/.local/share/.IdentityService/` bestaan (alhoewel die bevat lêers leeg en nutteloos is)
> [!NOTE]
> Onthou dat die **luidste** deel van die enumerasie die **inlog** is, nie die enumerasie self nie.
> Onthou dat gewoonlik die **luidste** deel van die enumerasie die **aanmelding** is, nie die enumerasie self nie.
### SSRF
### Azure & Entra ID gereedskap
As jy 'n SSRF in 'n masjien binne Azure gevind het, kyk hierdie bladsy vir truuks:
Die volgende gereedskap sal baie nuttig wees om beide Entra ID tenants en Azure omgewings stadig (om opsporing te vermy) of outomaties (om tyd te bespaar) te evalueer:
{{#ref}}
https://book.hacktricks.wiki/en/generic-methodologies-and-resources/phishing-methodology/index.html
az-enumeration-tools.md
{{#endref}}
### Bypass Inlog Voorwaardes
### Bypass Aanmeldingsvoorwaardes
<figure><img src="../../images/image (268).png" alt=""><figcaption></figcaption></figure>
In gevalle waar jy 'n paar geldige akkrediteer het maar jy kan nie inlog nie, is dit 'n paar algemene beskermings wat in plek kan wees:
In gevalle waar jy 'n paar geldige akkrediteer het maar jy kan nie aanmeld nie, is dit 'n paar algemene beskermings wat in plek kan wees:
- **IP witlys** -- Jy moet 'n geldige IP kompromitteer
- **Geo beperkings** -- Vind waar die gebruiker woon of waar die kantore van die maatskappy is en kry 'n IP van dieselfde stad (of land ten minste)
- **Blaaier** -- Miskien is slegs 'n blaaier van sekere OS (Windows, Linux, Mac, Android, iOS) toegelaat. Vind uit watter OS die slagoffer/maatskappy gebruik.
- Jy kan ook probeer om **Service Principal akkrediteer** te kompromitteer, aangesien hulle gewoonlik minder beperk is en hul inlog minder nagegaan word.
- Jy kan ook probeer om **Service Principal akkrediteer** te kompromitteer aangesien hulle gewoonlik minder beperk is en hul aanmelding minder nagegaan word
Nadat jy dit omseil het, mag jy in staat wees om terug te keer na jou aanvanklike opstelling en jy sal steeds toegang hê.
### Subdomein Oorname
- [https://godiego.co/posts/STO-Azure/](https://godiego.co/posts/STO-Azure/)
### Whoami
> [!CAUTION]
> Leer **hoe om** az cli, AzureAD en Az PowerShell in die [**Az - Entra ID**](az-services/az-azuread.md) afdeling te installeer.
> Leer **hoe om te installeer** az cli, AzureAD en Az PowerShell in die [**Az - Entra ID**](az-services/az-azuread.md) afdeling.
Een van die eerste dinge wat jy moet weet is **wie jy is** (in watter omgewing jy is):
@@ -91,16 +97,7 @@ az account management-group list #Not allowed by default
```
{{#endtab }}
{{#tab name="AzureAD" }}
```bash
#Get the current session state
Get-AzureADCurrentSessionInfo
#Get details of the current tenant
Get-AzureADTenantDetail
```
{{#endtab }}
{{#tab name="Az PowerShell" }}
{{#tab name="Az" }}
```bash
# Get the information about the current context (Account, Tenant, Subscription etc.)
Get-AzContext
@@ -110,43 +107,79 @@ Get-AzContext -ListAvailable
Get-AzSubscription
#Get Resource group
Get-AzResourceGroup
# Enumerate all resources visible to the current user
Get-AzResource
# Enumerate all Azure RBAC role assignments
Get-AzRoleAssignment # For all users
Get-AzRoleAssignment -SignInName test@corp.onmicrosoft.com # For current user
```
{{#endtab }}
{{#tab name="Mg" }}
```bash
#Get the current session
Get-MgContext
```
{{#endtab }}
{{#tab name="AzureAD" }}
```bash
#Get the current session state
Get-AzureADCurrentSessionInfo
#Get details of the current tenant
Get-AzureADTenantDetail
```
{{#endtab }}
{{#endtabs }}
> [!CAUTION]
> Een van die belangrikste opdragte om Azure te evalueer is **`Get-AzResource`** van Az PowerShell, aangesien dit jou **toelaat om die hulpbronne te ken wat jou huidige gebruiker sigbaarheid oor het**.
>
> Jy kan dieselfde inligting in die **webkonsol** kry deur na [https://portal.azure.com/#view/HubsExtension/BrowseAll](https://portal.azure.com/#view/HubsExtension/BrowseAll) te gaan of te soek na "Alle hulpbronne"
### Entra ID Evalueering
### Entra ID Enumerasie & Privilege Escalation
Standaard behoort enige gebruiker **voldoende regte te hê om** dinge soos gebruikers, groepe, rolle, diensprincipals... te evalueer (kyk [standaard AzureAD regte](az-basic-information/index.html#default-user-permissions)).\
Jy kan hier 'n gids vind:
Standaard behoort enige gebruiker **voldoende regte te hê om** dinge soos gebruikers, groepe, rolle, diensprincipals... te enumerate (kyk [standaard AzureAD regte](az-basic-information/index.html#default-user-permissions)).\
Hier kan jy 'n gids vind:
{{#ref}}
az-services/az-azuread.md
{{#endref}}
> [!NOTE]
> Nou dat jy **'n bietjie inligting oor jou akrediteer** het (en as jy 'n rooi span is, hoop ek jy **is nie opgespoor nie**). Dit is tyd om uit te vind watter dienste in die omgewing gebruik word.\
> In die volgende afdeling kan jy 'n paar maniere nagaan om **'n paar algemene dienste te evalueer.**
Kyk na die **Post-Exploitation gereedskap** om gereedskap te vind om regte in Entra ID te verhoog soos **AzureHound:**
## App Service SCM
{{#ref}}
az-enumeration-tools.md#automated-post-exploitation-tools
{{#endref}}
Kudu-konsol om in te log op die App Service 'houer'.
## Webshell
### Enumereer Azure Dienste
Gebruik portal.azure.com en kies die shell, of gebruik shell.azure.com, vir 'n bash of powershell. Die 'skyf' van hierdie shell word as 'n beeldlêer in 'n stoorrekening gestoor.
Sodra jy weet wie jy is, kan jy begin om die **Azure dienste waartoe jy toegang het** te enumerate.
## Azure DevOps
Die Az PowerShell opdrag **`Get-AzResource`** laat jou **weet watter hulpbronne jou huidige gebruiker sigbaar het**.
Azure DevOps is apart van Azure. Dit het repositories, pipelines (yaml of release), borde, wiki, en meer. Veranderlike Groepe word gebruik om veranderlike waardes en geheime te stoor.
Boonop kan jy dieselfde inligting in die **webkonsol** kry deur na [https://portal.azure.com/#view/HubsExtension/BrowseAll](https://portal.azure.com/#view/HubsExtension/BrowseAll) te gaan of te soek na "Alle hulpbronne" of deur uit te voer: `az rest --method GET --url "https://management.azure.com/subscriptions/<subscription-id>/resources?api-version=2021-04-01"`
Verder, met genoeg regte, kan die rol **`Get-AzRoleAssignment`** gebruik word om **alle rolle** in die subskripsie of die regte oor 'n spesifieke hulpbron te enumerate soos in: **`Get-AzRoleAssignment -Scope /subscriptions/9291ff6e-6afb-430e-82a4-6f04b2d05c7f/resourceGroups/Resource_Group_1/providers/Microsoft.RecoveryServices/vaults/vault-m3ww8ut4`**
In die volgende afdeling kan jy inligting vind oor die mees algemene Azure dienste en hoe om hulle te enumerate:
{{#ref}}
az-services/
{{#endref}}
### Privilege Escalation, Post-Exploitation & Persistensie in Azure Dienste
Sodra jy weet hoe die Azure omgewing gestruktureer is en watter dienste gebruik word, kan jy begin soek na maniere om **regte te verhoog, lateraal te beweeg, ander post-exploitation aanvalle uit te voer en volharding te handhaaf**.
In die volgende afdeling kan jy inligting vind oor hoe om regte te verhoog in die mees algemene Azure dienste:
{{#ref}}
az-privilege-escalation/
{{#endref}}
In die volgende kan jy inligting vind oor hoe om post-exploitation aanvalle in die mees algemene Azure dienste uit te voer:
{{#ref}}
az-post-exploitation/
{{#endref}}
In die volgende kan jy inligting vind oor hoe om volharding te handhaaf in die mees algemene Azure dienste:
{{#ref}}
az-persistence/
{{#endref}}
{{#include ../../banners/hacktricks-training.md}}

View File

@@ -11,31 +11,31 @@ Entra ID is Microsoft se wolk-gebaseerde identiteit en toegang bestuur (IAM) pla
**Belangrike Deelnemers in OAuth 2.0:**
1. **Hulpbronbediener (RS):** Beskerm hulpbronne wat deur die hulpbron eienaar besit word.
2. **Hulpbron Eienaar (RO):** Tipies 'n eindgebruiker wat die beskermde hulpbronne besit.
3. **Kliënt Toepassing (CA):** 'n Toepassing wat toegang tot hulpbronne soek namens die hulpbron eienaar.
2. **Hulpbron Eienaar (RO):** Gewoonlik 'n eindgebruiker wat die beskermde hulpbronne besit.
3. **Kliënttoepassing (CA):** 'n Toepassing wat toegang tot hulpbronne soek namens die hulpbron eienaar.
4. **Magtigingsbediener (AS):** Gee toegangstokens aan kliënttoepassings nadat dit hulle geverifieer en gemagtig het.
**Skoppe en Toestemming:**
**Skope en Toestemming:**
- **Skoppe:** Fynkorrelige toestemmings wat op die hulpbronbediener gedefinieer is wat toegangsvlakke spesifiseer.
- **Toestemming:** Die proses waardeur 'n hulpbron eienaar 'n kliënttoepassing toestemming gee om toegang tot hulpbronne met spesifieke skoppe te verkry.
- **Skope:** Fynkorrelige toestemmings wat op die hulpbronbediener gedefinieer is en toegangsvlakke spesifiseer.
- **Toestemming:** Die proses waardeur 'n hulpbron eienaar 'n kliënttoepassing toestemming gee om toegang tot hulpbronne met spesifieke skope te verkry.
**Microsoft 365 Integrasie:**
- Microsoft 365 gebruik Azure AD vir IAM en bestaan uit verskeie "eerste-party" OAuth-toepassings.
- Hierdie toepassings is diep geïntegreer en het dikwels onderling afhanklike diensverhoudings.
- Om die gebruikerservaring te vereenvoudig en funksionaliteit te handhaaf, verleen Microsoft "implisiete toestemming" of "vooraf toestemming" aan hierdie eerste-party toepassings.
- **Implisiete Toestemming:** Sekere toepassings word outomaties **toegestaan om toegang tot spesifieke skoppe te verkry sonder eksplisiete gebruiker of administrateur goedkeuring**.
- Hierdie vooraf goedgekeurde skoppe is tipies verborge vir beide gebruikers en administrateurs, wat dit minder sigbaar maak in standaard bestuursinterfaces.
- Om die gebruikerservaring te vereenvoudig en funksionaliteit te handhaaf, gee Microsoft "implisiete toestemming" of "voor-toestemming" aan hierdie eerste-party toepassings.
- **Implisiete Toestemming:** Sekere toepassings word outomaties **toegestaan om toegang tot spesifieke skope te verkry sonder eksplisiete gebruiker of administrateur goedkeuring**.
- Hierdie voor-toegestemde skope is gewoonlik verborge vir beide gebruikers en administrateurs, wat dit minder sigbaar maak in standaard bestuursinterfaces.
**Kliënt Toepassing Tipes:**
**Tipes Kliënttoepassings:**
1. **Vertroulike Kliënte:**
- Besit hul eie geloofsbriewe (bv. wagwoorde of sertifikate).
- Kan **veilig hulself autentiseer** by die magtigingsbediener.
- Kan **veilig hulself autentiseer** aan die magtigingsbediener.
2. **Publieke Kliënte:**
- Het nie unieke geloofsbriewe nie.
- Kan nie veilig autentiseer by die magtigingsbediener nie.
- Kan nie veilig aan die magtigingsbediener autentiseer nie.
- **Sekuriteitsimplikasie:** 'n Aanvaller kan 'n publieke kliënttoepassing naboots wanneer hy tokens aan vra, aangesien daar geen meganisme is vir die magtigingsbediener om die legitimiteit van die toepassing te verifieer nie.
## Autentikasie Tokens
@@ -44,13 +44,13 @@ Daar is **drie tipes tokens** wat in OIDC gebruik word:
- [**Toegangstokens**](https://learn.microsoft.com/en-us/azure/active-directory/develop/access-tokens)**:** Die kliënt bied hierdie token aan die hulpbronbediener voor om **toegang tot hulpbronne** te verkry. Dit kan slegs gebruik word vir 'n spesifieke kombinasie van gebruiker, kliënt, en hulpbron en **kan nie herroep** word tot vervaldatum nie - dit is 1 uur per standaard.
- **ID Tokens**: Die kliënt ontvang hierdie **token van die magtigingsbediener**. Dit bevat basiese inligting oor die gebruiker. Dit is **gebind aan 'n spesifieke kombinasie van gebruiker en kliënt**.
- **Herlaai Tokens**: Verskaf aan die kliënt saam met toegangstoken. Gebruik om **nuwe toegang en ID tokens te verkry**. Dit is gebind aan 'n spesifieke kombinasie van gebruiker en kliënt en kan herroep word. Standaard vervaldatum is **90 dae** vir inaktiewe herlaai tokens en **geen vervaldatum vir aktiewe tokens** (dit is moontlik om nuwe herlaai tokens uit 'n herlaai token te verkry).
- 'n Herlaai token moet gekoppel wees aan 'n **`aud`**, aan sekere **skoppe**, en aan 'n **tenant** en dit moet slegs in staat wees om toegangstokens vir daardie aud, skoppe (en nie meer nie) en tenant te genereer. Dit is egter nie die geval met **FOCI toepassings tokens** nie.
- 'n Herlaai token is versleuteld en slegs Microsoft kan dit ontsleutel.
- Om 'n nuwe herlaai token te verkry, herroep nie die vorige herlaai token nie.
- **Herfris Tokens**: Verskaf aan die kliënt saam met toegangstoken. Gebruik om **nuwe toegang en ID tokens te verkry**. Dit is gebind aan 'n spesifieke kombinasie van gebruiker en kliënt en kan herroep word. Standaard vervaldatum is **90 dae** vir inaktiewe herfris tokens en **geen vervaldatum vir aktiewe tokens** (dit is moontlik om nuwe herfris tokens uit 'n herfris token te verkry).
- 'n Herfris token moet gekoppel wees aan 'n **`aud`**, aan sekere **skope**, en aan 'n **tenant** en dit moet slegs in staat wees om toegangstokens vir daardie aud, skope (en nie meer nie) en tenant te genereer. Dit is egter nie die geval met **FOCI toepassings tokens** nie.
- 'n Herfris token is versleuteld en slegs Microsoft kan dit ontsleutel.
- Om 'n nuwe herfris token te verkry, herroep nie die vorige herfris token nie.
> [!WARNING]
> Inligting vir **voorwaardelike toegang** is **gestoor** binne die **JWT**. So, as jy die **token van 'n toegelate IP adres** aan vra, sal daardie **IP** in die token **gestoor** word en dan kan jy daardie token van 'n **nie-toegelate IP gebruik om toegang tot die hulpbronne** te verkry.
> Inligting vir **voorwaardelike toegang** is **gestoor** binne die **JWT**. So, as jy die **token van 'n toegelate IP-adres** aan vra, sal daardie **IP** in die token **gestoor** word en dan kan jy daardie token van 'n **nie-toegelate IP gebruik om toegang tot die hulpbronne** te verkry.
### Toegangstokens "aud"
@@ -74,13 +74,13 @@ Die opdrag `az account get-access-token --resource-type [...]` ondersteun die vo
- **batch (Azure Batch Services)**: Gebruik om toegang te verkry tot Azure Batch, 'n diens wat grootmaat parallelle en hoë-prestasie rekenaar toepassings doeltreffend in die wolk moontlik maak.
- `https://batch.core.windows.net/`
* **data-lake (Azure Data Lake Storage)**: Gebruik om te kommunikeer met Azure Data Lake Storage Gen1, wat 'n skaalbare data stoor en analise diens is.
* **data-lake (Azure Data Lake Storage)**: Gebruik om te kommunikeer met Azure Data Lake Storage Gen1, wat 'n skaalbare data berging en analise diens is.
- `https://datalake.azure.net/`
- **media (Azure Media Services)**: Gebruik om toegang te verkry tot Azure Media Services, wat wolk-gebaseerde media verwerking en aflewering dienste vir video en klank inhoud bied.
- `https://rest.media.azure.net`
* **ms-graph (Microsoft Graph API)**: Gebruik om toegang te verkry tot die Microsoft Graph API, die verenigde eindpunt vir Microsoft 365 dienste data. Dit laat jou toe om toegang te verkry tot data en insigte van dienste soos Azure AD, Office 365, Enterprise Mobility, en Sekuriteitsdienste.
* **ms-graph (Microsoft Graph API)**: Gebruik om toegang te verkry tot die Microsoft Graph API, die verenigde eindpunt vir Microsoft 365 dienste data. Dit laat jou toe om data en insigte van dienste soos Azure AD, Office 365, Enterprise Mobility, en Sekuriteitsdienste te verkry.
- `https://graph.microsoft.com`
- **oss-rdbms (Azure Open Source Relational Databases)**: Gebruik om toegang te verkry tot Azure Databasis dienste vir oopbron relationele databasis enjin soos MySQL, PostgreSQL, en MariaDB.
@@ -88,13 +88,13 @@ Die opdrag `az account get-access-token --resource-type [...]` ondersteun die vo
</details>
### Toegangstokens Skoppe "scp"
### Toegangstokens Skope "scp"
Die skop van 'n toegangstoken word binne die scp sleutel binne die toegangstoken JWT gestoor. Hierdie skoppe definieer waartoe die toegangstoken toegang het.
Die skoop van 'n toegangstoken word binne die scp sleutel binne die toegangstoken JWT gestoor. Hierdie skope definieer waartoe die toegangstoken toegang het.
As 'n JWT toegelaat word om 'n spesifieke API te kontak maar **nie die skop** het om die aangevraagde aksie uit te voer nie, sal dit **nie in staat wees om die aksie** met daardie JWT uit te voer nie.
As 'n JWT toegelaat word om 'n spesifieke API te kontak maar **nie die skoop** het om die aangevraagde aksie uit te voer nie, sal dit **nie in staat wees om die aksie** met daardie JWT uit te voer nie.
### Kry herlaai & toegang token voorbeeld
### Kry herfris & toegang token voorbeeld
```python
# Code example from https://github.com/secureworks/family-of-client-ids-research
import msal
@@ -144,19 +144,31 @@ scopes=["https://graph.microsoft.com/.default"],
)
pprint(new_azure_cli_bearer_tokens_for_graph_api)
```
### Ander toegangstoken velde
- **appid**: Toepassing ID wat gebruik word om die token te genereer
- **appidacr**: Die Toepassing Verifikasie Konteks Klas Verwysing dui aan hoe die kliënt geverifieer is, vir 'n openbare kliënt is die waarde 0, en as 'n kliënt geheim gebruik word, is die waarde 1
- **acr**: Die Verifikasie Konteks Klas Verwysing eis is "0" wanneer die eindgebruiker se verifikasie nie aan die vereistes van ISO/IEC 29115 voldoen het nie.
- **amr**: Die Verifikasie metode dui aan hoe die token geverifieer is. 'n Waarde van “pwd” dui aan dat 'n wagwoord gebruik is.
- **groups**: Dui die groepe aan waar die hoofpersoon 'n lid is.
- **iss**: Die uitreiker identifiseer die sekuriteit token diens (STS) wat die token gegenereer het. bv. https://sts.windows.net/fdd066e1-ee37-49bc-b08f-d0e152119b04/ (die uuid is die huurder ID)
- **oid**: Die objek ID van die hoofpersoon
- **tid**: Huurder ID
- **iat, nbf, exp**: Uitgereik op (wanneer dit uitgereik is), Nie voor nie (kan nie voor hierdie tyd gebruik word nie, gewoonlik dieselfde waarde as iat), Vervaldatum.
## FOCI Tokens Privilege Escalation
Voorheen is genoem dat verfrissingstokens aan die **skoppe** waaraan dit gegenereer is, aan die **aansoek** en **huurder** waaraan dit gegenereer is, gekoppel moet wees. As enige van hierdie grense oorgesteek word, is dit moontlik om voorregte te verhoog, aangesien dit moontlik sal wees om toegangstokens vir ander hulpbronne en huurders wat die gebruiker toegang het, te genereer en met meer skoppe as wat oorspronklik bedoel was.
Voorheen is genoem dat verfris tokens aan die **skoppe** waaraan dit gegenereer is, aan die **toepassing** en **huurder** waaraan dit gegenereer is, gekoppel moet wees. As enige van hierdie grense oorgesteek word, is dit moontlik om voorregte te verhoog aangesien dit moontlik sal wees om toegangstokens vir ander hulpbronne en huurders te genereer waartoe die gebruiker toegang het en met meer skoppe as wat oorspronklik bedoel was.
Boonop **is dit moontlik met alle verfrissingstokens** in die [Microsoft identity platform](https://learn.microsoft.com/en-us/entra/identity-platform/) (Microsoft Entra-rekeninge, Microsoft persoonlike rekeninge, en sosiale rekeninge soos Facebook en Google) omdat, soos die [**dokumentasie**](https://learn.microsoft.com/en-us/entra/identity-platform/refresh-tokens) noem: "Verfrissingstokens is gebonde aan 'n kombinasie van gebruiker en kliënt, maar **is nie aan 'n hulpbron of huurder gekoppel nie**. 'n Kliënt kan 'n verfrissingstoken gebruik om toegangstokens **oor enige kombinasie van hulpbron en huurder** te verkry waar dit toestemming het om dit te doen. Verfrissingstokens is versleuteld en slegs die Microsoft identity platform kan dit lees."
Boonop, **dit is moontlik met alle verfris tokens** in die [Microsoft identity platform](https://learn.microsoft.com/en-us/entra/identity-platform/) (Microsoft Entra-rekeninge, Microsoft persoonlike rekeninge, en sosiale rekeninge soos Facebook en Google) omdat die [**dokumente**](https://learn.microsoft.com/en-us/entra/identity-platform/refresh-tokens) noem: "Verfris tokens is gebonde aan 'n kombinasie van gebruiker en kliënt, maar **is nie aan 'n hulpbron of huurder gekoppel nie**. 'n Kliënt kan 'n verfris token gebruik om toegangstokens **oor enige kombinasie van hulpbron en huurder** te verkry waar dit toestemming het om dit te doen. Verfris tokens is geënkripteer en slegs die Microsoft identity platform kan dit lees."
Boonop, let daarop dat die FOCI aansoeke openbare aansoeke is, so **geen geheim is nodig** om by die bediener te autentiseer nie.
Boonop, let daarop dat die FOCI toepassings openbare toepassings is, so **geen geheim is nodig** om aan die bediener te verifieer nie.
Dan kan bekende FOCI kliënte wat in die [**oorspronklike navorsing**](https://github.com/secureworks/family-of-client-ids-research/tree/main) gerapporteer is, [**hier gevind word**](https://github.com/secureworks/family-of-client-ids-research/blob/main/known-foci-clients.csv).
Dan is bekende FOCI kliënte wat in die [**oorspronklike navorsing**](https://github.com/secureworks/family-of-client-ids-research/tree/main) gerapporteer is, [**hier gevind**](https://github.com/secureworks/family-of-client-ids-research/blob/main/known-foci-clients.csv).
### Get different scope
### Kry verskillende skop
Volgende met die vorige voorbeeldkode, in hierdie kode word 'n nuwe token vir 'n ander skoop aangevra:
Volgende met die vorige voorbeeldkode, in hierdie kode word 'n nuwe token vir 'n ander skop aangevra:
```python
# Code from https://github.com/secureworks/family-of-client-ids-research
azure_cli_bearer_tokens_for_outlook_api = (
@@ -192,5 +204,6 @@ pprint(microsoft_office_bearer_tokens_for_graph_api)
## Verwysings
- [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)
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -57,11 +57,11 @@ Opdragte in Azure CLI is gestruktureer volgens 'n patroon van: `az <service> <ac
#### Debug | MitM az cli
Deur die parameter **`--debug`** is dit moontlik om al die versoeke wat die hulpmiddel **`az`** stuur te sien:
Met die parameter **`--debug`** is dit moontlik om al die versoeke wat die hulpmiddel **`az`** stuur te sien:
```bash
az account management-group list --output table --debug
```
Om 'n **MitM** op die hulpmiddel te doen en **al die versoeke** wat dit handmatig stuur te kontroleer, kan jy doen:
Om 'n **MitM** na die hulpmiddel te doen en **al die versoeke** wat dit handmatig stuur te kontroleer, kan jy doen:
{{#tabs }}
{{#tab name="Bash" }}
@@ -79,6 +79,21 @@ export REQUESTS_CA_BUNDLE=/Users/user/Downloads/cacert.pem
```
{{#endtab }}
{{#tab name="CMD" }}
```bash
set ADAL_PYTHON_SSL_NO_VERIFY=1
set AZURE_CLI_DISABLE_CONNECTION_VERIFICATION=1
set HTTPS_PROXY="http://127.0.0.1:8080"
set HTTP_PROXY="http://127.0.0.1:8080"
# If this is not enough
# Download the certificate from Burp and convert it into .pem format
# And export the following env variable
openssl x509 -in cacert.der -inform DER -out cacert.pem -outform PEM
set REQUESTS_CA_BUNDLE=C:\Users\user\Downloads\cacert.pem
```
{{#endtab }}
{{#tab name="PS" }}
```bash
$env:ADAL_PYTHON_SSL_NO_VERIFY=1
@@ -93,23 +108,23 @@ $env:HTTP_PROXY="http://127.0.0.1:8080"
Azure PowerShell is 'n module met cmdlets om Azure hulpbronne direk vanaf die PowerShell-opdraglyn te bestuur.
Volg hierdie skakel vir die [**installasie instruksies**](https://learn.microsoft.com/en-us/powershell/azure/install-azure-powershell).
Volg hierdie skakel vir die [**installasie-instruksies**](https://learn.microsoft.com/en-us/powershell/azure/install-azure-powershell).
Opdragte in Azure PowerShell AZ Module is gestruktureer soos: `<Action>-Az<Service> <parameters>`
#### Debug | MitM Az PowerShell
Met die parameter **`-Debug`** is dit moontlik om al die versoeke wat die hulpmiddel stuur te sien:
Deur die parameter **`-Debug`** is dit moontlik om al die versoeke wat die hulpmiddel stuur te sien:
```bash
Get-AzResourceGroup -Debug
```
Om 'n **MitM** na die hulpmiddel te doen en **al die versoeke** wat dit handmatig stuur te kontroleer, kan jy die omgewing veranderlikes `HTTPS_PROXY` en `HTTP_PROXY` instel volgens die [**docs**](https://learn.microsoft.com/en-us/powershell/azure/az-powershell-proxy).
Om 'n **MitM** na die hulpmiddel te doen en **al die versoeke** wat dit handmatig stuur te kontroleer, kan jy die omgewing veranderlikes `HTTPS_PROXY` en `HTTP_PROXY` instel volgens die [**dokumentasie**](https://learn.microsoft.com/en-us/powershell/azure/az-powershell-proxy).
### Microsoft Graph PowerShell
Microsoft Graph PowerShell is 'n kruis-platform SDK wat toegang tot al die Microsoft Graph API's moontlik maak, insluitend dienste soos SharePoint, Exchange, en Outlook, met 'n enkele eindpunt. Dit ondersteun PowerShell 7+, moderne verifikasie via MSAL, eksterne identiteite, en gevorderde navrae. Met 'n fokus op die minste privaatheidstoegang, verseker dit veilige bedrywighede en ontvang gereelde opdaterings om in lyn te wees met die nuutste Microsoft Graph API-funksies.
Volg hierdie skakel vir die [**installasie instruksies**](https://learn.microsoft.com/en-us/powershell/microsoftgraph/installation).
Volg hierdie skakel vir die [**installasie-instruksies**](https://learn.microsoft.com/en-us/powershell/microsoftgraph/installation).
Opdragte in Microsoft Graph PowerShell is gestruktureer soos: `<Action>-Mg<Service> <parameters>`
@@ -210,7 +225,7 @@ Invoke-Monkey365 -TenantId <tenant-id> -ClientId <client-id> -ClientSecret $Secu
```
### [ScoutSuite](https://github.com/nccgroup/ScoutSuite)
Scout Suite versamel konfigurasie data vir handmatige inspeksie en beklemtoon risiko areas. Dit is 'n multi-cloud sekuriteitsouditering hulpmiddel, wat sekuriteitsposisie assessering van wolkomgewings moontlik maak.
Scout Suite versamel konfigurasiedata vir handmatige inspeksie en beklemtoon risikogebiede. Dit is 'n multi-cloud sekuriteitsouditeringsinstrument, wat sekuriteitsposisie-evaluering van wolkomgewings moontlik maak.
```bash
virtualenv -p python3 venv
source venv/bin/activate
@@ -226,7 +241,7 @@ python scout.py azure --cli
```
### [Azure-MG-Sub-Governance-Reporting](https://github.com/JulianHayward/Azure-MG-Sub-Governance-Reporting)
Dit is 'n powershell-skrip wat jou help om **alle hulpbronne en toestemmings binne 'n Bestuursgroep en die Entra ID** huurders te visualiseer en sekuriteitsmisconfigurasies te vind.
Dit is 'n powershell-skrip wat jou help om **alle hulpbronne en toestemmings binne 'n Bestuursgroep en die Entra ID** huurder te visualiseer en sekuriteitsmisconfigurasies te vind.
Dit werk met die Az PowerShell-module, so enige outentisering wat deur hierdie hulpmiddel ondersteun word, word deur die hulpmiddel ondersteun.
```bash
@@ -258,7 +273,7 @@ azurehound -u "<user-email>" -p "<password>" --tenant "<tenant-id>" list -o ./ou
```
Laai die **BloodHound** web met **`curl -L https://ghst.ly/getbhce | docker compose -f - up`** en voer die `output.json` lêer in.
Dan, in die **EXPLORE** tab, in die **CYPHER** afdeling kan jy 'n **folder** ikoon sien wat voorafgeboude navrae bevat.
Dan, in die **EXPLORE** tab, in die **CYPHER** afdeling kan jy 'n **folder** ikoon sien wat voorafgeboude vrae bevat.
### [**MicroBurst**](https://github.com/NetSPI/MicroBurst)

View File

@@ -66,12 +66,23 @@ $token = (az account get-access-token --resource https://graph.microsoft.com --q
$secureToken = ConvertTo-SecureString $token -AsPlainText -Force
Connect-MgGraph -AccessToken $secureToken
# Get token from session
Parameters = @{
Method = "GET"
Uri = "/v1.0/me"
OutputType = "HttpResponseMessage"
}
$Response = Invoke-MgGraphRequest @Parameters
$Headers = $Response.RequestMessage.Headers
$Headers.Authorization.Parameter
# Find commands
Find-MgGraphCommand -command *Mg*
```
{{#endtab }}
{{#tab name="Az PowerShell" }}
{{#tab name="Az" }}
```bash
Connect-AzAccount #Open browser
# Using credentials
@@ -80,15 +91,11 @@ $creds = New-Object System.Management.Automation.PSCredential("test@corp.onmicro
Connect-AzAccount -Credential $creds
# Get Access Token
(Get-AzAccessToken).Token
# Request access token to other endpoints: AadGraph, AnalysisServices, Arm, Attestation, Batch, DataLake, KeyVault, MSGraph, OperationalInsights, ResourceManager, Storage, Synapse
(Get-AzAccessToken -ResourceTypeName MSGraph).Token
(Get-AzAccessToken -Resource "https://graph.microsoft.com").Token
(ConvertFrom-SecureString (Get-AzAccessToken -ResourceTypeName Arm -AsSecureString).Token -AsPlainText)
# Connect with access token
Connect-AzAccount -AccountId test@corp.onmicrosoft.com -AccessToken $token
Connect-AzAccount -AccessToken $token -GraphAccessToken $graphaccesstoken -AccountId <ACCOUNT-ID>
## The -AccessToken is from management.azure.com
Connect-AzAccount -AccountId test@corp.onmicrosoft.com [-AccessToken $ManagementToken] [-GraphAccessToken $AADGraphToken] [-MicrosoftGraphAccessToken $MicrosoftGraphToken] [-KeyVaultAccessToken $KeyVaultToken]
# Connect with Service principal/enterprise app secret
$password = ConvertTo-SecureString 'KWEFNOIRFIPMWL.--DWPNVFI._EDWWEF_ADF~SODNFBWRBIF' -AsPlainText -Force
@@ -151,7 +158,7 @@ Connect-AzureAD -AccountId test@corp.onmicrosoft.com -AadAccessToken $token
Wanneer jy **aanmeld** via **CLI** in Azure met enige program, gebruik jy 'n **Azure-toepassing** van 'n **tenant** wat aan **Microsoft** behoort. Hierdie Toepassings, soos die wat jy in jou rekening kan skep, **het 'n kliënt-id**. Jy **sal nie al hulle kan sien nie** in die **toegelate toepassingslys** wat jy in die konsole kan sien, **maar hulle is standaard toegelaat**.
Byvoorbeeld, 'n **powershell-skrip** wat **authentiseer** gebruik 'n app met kliënt-id **`1950a258-227b-4e31-a9cf-717495945fc2`**. Selfs al verskyn die app nie in die konsole nie, kan 'n stelselaanvoerder daardie toepassing **blokkeer** sodat gebruikers nie toegang kan verkry nie met gereedskap wat via daardie App verbind.
Byvoorbeeld, 'n **powershell-skrip** wat **authentiseer** gebruik 'n app met kliënt-id **`1950a258-227b-4e31-a9cf-717495945fc2`**. Selfs al verskyn die app nie in die konsole nie, kan 'n stelselaanvoerder **daardie toepassing blokkeer** sodat gebruikers nie toegang kan verkry nie met gereedskap wat via daardie App verbind.
Daar is egter **ander kliënt-ids** van toepassings wat **jou sal toelaat om met Azure te verbind**:
```bash
@@ -279,7 +286,7 @@ Get-AzureADMSAdministrativeUnit | where { Get-AzureADMSAdministrativeUnitMember
```
{{#endtab }}
{{#tab name="Az PowerShell" }}
{{#tab name="Az" }}
```bash
# Enumerate users
Get-AzADUser
@@ -302,7 +309,7 @@ $password = "ThisIsTheNewPassword.!123" | ConvertTo- SecureString -AsPlainText
```
### MFA & Voorwaardelike Toegang Beleide
Dit word sterk aanbeveel om MFA by elke gebruiker te voeg, maar sommige maatskappye sal dit nie instel nie of mag dit instel met 'n Voorwaardelike Toegang: Die gebruiker sal **MFA vereis word as** dit vanaf 'n spesifieke ligging, blaaiert of **sekere voorwaarde** aanmeld. Hierdie beleide, as dit nie korrek geconfigureer is nie, mag geneig wees tot **omseilings**. Kontroleer:
Dit word sterk aanbeveel om MFA by elke gebruiker toe te voeg, egter, sommige maatskappye sal dit nie instel of mag dit instel met 'n Voorwaardelike Toegang: Die gebruiker sal **MFA vereis word as** dit vanaf 'n spesifieke ligging, blaaiers of **sekere voorwaarde** aanmeld. Hierdie beleide, as dit nie korrek geconfigureer is nie, mag geneig wees tot **omseilings**. Kontroleer:
{{#ref}}
../az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md
@@ -346,6 +353,22 @@ az role assignment list --include-groups --include-classic-administrators true -
```
{{#endtab }}
{{#tab name="Az" }}
```bash
# Get all groups
Get-AzADGroup
# Get details of a group
Get-AzADGroup -ObjectId <id>
# Search group by string
Get-AzADGroup -SearchString "admin" | fl * #Search at the beginnig of DisplayName
Get-AzADGroup |?{$_.Displayname -match "admin"}
# Get members of group
Get-AzADGroupMember -GroupDisplayName <resource_group_name>
# Get roles of group
Get-AzRoleAssignment -ResourceGroupName <resource_group_name>
```
{{#endtab }}
{{#tab name="Azure AD" }}
```bash
# Enumerate Groups
@@ -373,22 +396,6 @@ Get-AzureADMSAdministrativeUnit | where { Get-AzureADMSAdministrativeUnitMember
Get-AzureADGroup -ObjectId <id> | Get-AzureADGroupAppRoleAssignment | fl *
```
{{#endtab }}
{{#tab name="Az PowerShell" }}
```bash
# Get all groups
Get-AzADGroup
# Get details of a group
Get-AzADGroup -ObjectId <id>
# Search group by string
Get-AzADGroup -SearchString "admin" | fl * #Search at the beginnig of DisplayName
Get-AzADGroup |?{$_.Displayname -match "admin"}
# Get members of group
Get-AzADGroupMember -GroupDisplayName <resource_group_name>
# Get roles of group
Get-AzRoleAssignment -ResourceGroupName <resource_group_name>
```
{{#endtab }}
{{#endtabs }}
#### Voeg gebruiker by groep
@@ -398,7 +405,7 @@ Eienaars van die groep kan nuwe gebruikers by die groep voeg
Add-AzureADGroupMember -ObjectId <group_id> -RefObjectId <user_id> -Verbose
```
> [!WARNING]
> Groepe kan dinamies wees, wat basies beteken dat **as 'n gebruiker aan sekere voorwaardes voldoen, sal hy aan 'n groep bygevoeg word**. Natuurlik, as die voorwaardes gebaseer is op **eienskappe** wat 'n **gebruiker** kan **beheer**, kan hy hierdie funksie misbruik om **in ander groepe te kom**.\
> Groepe kan dinamies wees, wat basies beteken dat **as 'n gebruiker aan sekere voorwaardes voldoen, sal hy by 'n groep gevoeg word**. Natuurlik, as die voorwaardes gebaseer is op **eienskappe** wat 'n **gebruiker** kan **beheer**, kan hy hierdie funksie misbruik om **in ander groepe te kom**.\
> Kyk hoe om dinamiese groepe te misbruik op die volgende bladsy:
{{#ref}}
@@ -433,28 +440,7 @@ az ad sp list --query '[?length(keyCredentials) > `0` || length(passwordCredenti
```
{{#endtab }}
{{#tab name="Azure AD" }}
```bash
# Get Service Principals
Get-AzureADServicePrincipal -All $true
# Get details about a SP
Get-AzureADServicePrincipal -ObjectId <id> | fl *
# Get SP by string name or Id
Get-AzureADServicePrincipal -All $true | ?{$_.DisplayName -match "app"} | fl
Get-AzureADServicePrincipal -All $true | ?{$_.AppId -match "103947652-1234-5834-103846517389"}
# Get owner of SP
Get-AzureADServicePrincipal -ObjectId <id> | Get-AzureADServicePrincipalOwner |fl *
# Get objects owned by a SP
Get-AzureADServicePrincipal -ObjectId <id> | Get-AzureADServicePrincipalOwnedObject
# Get objects created by a SP
Get-AzureADServicePrincipal -ObjectId <id> | Get-AzureADServicePrincipalCreatedObject
# Get groups where the SP is a member
Get-AzureADServicePrincipal | Get-AzureADServicePrincipalMembership
Get-AzureADServicePrincipal -ObjectId <id> | Get-AzureADServicePrincipalMembership |fl *
```
{{#endtab }}
{{#tab name="Az PowerShell" }}
{{#tab name="Az" }}
```bash
# Get SPs
Get-AzADServicePrincipal
@@ -481,6 +467,27 @@ Headers = @{
(Invoke-RestMethod @RequestParams).value
```
{{#endtab }}
{{#tab name="Azure AD" }}
```bash
# Get Service Principals
Get-AzureADServicePrincipal -All $true
# Get details about a SP
Get-AzureADServicePrincipal -ObjectId <id> | fl *
# Get SP by string name or Id
Get-AzureADServicePrincipal -All $true | ?{$_.DisplayName -match "app"} | fl
Get-AzureADServicePrincipal -All $true | ?{$_.AppId -match "103947652-1234-5834-103846517389"}
# Get owner of SP
Get-AzureADServicePrincipal -ObjectId <id> | Get-AzureADServicePrincipalOwner |fl *
# Get objects owned by a SP
Get-AzureADServicePrincipal -ObjectId <id> | Get-AzureADServicePrincipalOwnedObject
# Get objects created by a SP
Get-AzureADServicePrincipal -ObjectId <id> | Get-AzureADServicePrincipalCreatedObject
# Get groups where the SP is a member
Get-AzureADServicePrincipal | Get-AzureADServicePrincipalMembership
Get-AzureADServicePrincipal -ObjectId <id> | Get-AzureADServicePrincipalMembership |fl *
```
{{#endtab }}
{{#endtabs }}
> [!WARNING]
@@ -625,6 +632,19 @@ az ad app list --query '[?length(keyCredentials) > `0` || length(passwordCredent
```
{{#endtab }}
{{#tab name="Az" }}
```bash
# Get Apps
Get-AzADApplication
# Get details of one App
Get-AzADApplication -ObjectId <id>
# Get App searching by string
Get-AzADApplication | ?{$_.DisplayName -match "app"}
# Get Apps with password
Get-AzADAppCredential
```
{{#endtab }}
{{#tab name="Azure AD" }}
```bash
# List all registered applications
@@ -637,19 +657,6 @@ Get-AzureADApplication -All $true | %{if(Get-AzureADApplicationPasswordCredentia
Get-AzureADApplication -ObjectId <id> | Get-AzureADApplicationOwner |fl *
```
{{#endtab }}
{{#tab name="Az PowerShell" }}
```bash
# Get Apps
Get-AzADApplication
# Get details of one App
Get-AzADApplication -ObjectId <id>
# Get App searching by string
Get-AzADApplication | ?{$_.DisplayName -match "app"}
# Get Apps with password
Get-AzADAppCredential
```
{{#endtab }}
{{#endtabs }}
> [!WARNING]
@@ -665,9 +672,9 @@ Get-AzADAppCredential
Dit is moontlik om 'n lys van algemeen gebruikte App ID's wat aan Microsoft behoort te vind in [https://learn.microsoft.com/en-us/troubleshoot/entra/entra-id/governance/verify-first-party-apps-sign-in#application-ids-of-commonly-used-microsoft-applications](https://learn.microsoft.com/en-us/troubleshoot/entra/entra-id/governance/verify-first-party-apps-sign-in#application-ids-of-commonly-used-microsoft-applications)
### Gemanagte Identiteite
### Managed Identities
Vir meer inligting oor Gemanagte Identiteite, kyk:
Vir meer inligting oor Managed Identities kyk:
{{#ref}}
../az-basic-information/
@@ -716,7 +723,7 @@ az role assignment list --all --query "[?principalName=='carlos@carloshacktricks
```
{{#endtab }}
{{#tab name="Az PowerShell" }}
{{#tab name="Az" }}
```bash
# Get role assignments on the subscription
Get-AzRoleDefinition
@@ -904,14 +911,14 @@ Get-AzureADMSScopedRoleMembership -Id <id> | fl #Get role ID and role members
## Verdedigingsmeganismes
### Bevoorregte Identiteitsbestuur (PIM)
### Privileged Identity Management (PIM)
Bevoorregte Identiteitsbestuur (PIM) in Azure help om **oormatige voorregte** aan gebruikers onnodig toe te ken.
Privileged Identity Management (PIM) in Azure help om **oormatige voorregte** te voorkom wat onnodig aan gebruikers toegeken word.
Een van die hoofkenmerke wat deur PIM verskaf word, is dat dit toelaat om nie rolle aan principals toe te ken wat konstant aktief is nie, maar hulle **verkieslik vir 'n tydperk (bv. 6 maande)** te maak. Dan, wanneer die gebruiker daardie rol wil aktiveer, moet hy daarvoor vra en die tyd aan dui wat hy die voorreg nodig het (bv. 3 uur). Dan moet 'n **admin die versoek goedkeur**.\
Een van die hoofkenmerke wat deur PIM verskaf word, is dat dit toelaat om nie rolle aan principals toe te ken wat konstant aktief is nie, maar hulle **verkieslik te maak vir 'n tydperk (bv. 6 maande)**. Dan, wanneer die gebruiker daardie rol wil aktiveer, moet hy daarvoor vra en die tyd aan dui wat hy die voorreg nodig het (bv. 3 ure). Dan moet 'n **admin die versoek goedkeur**.\
Let daarop dat die gebruiker ook kan vra om die tyd te **verleng**.
Boonop **stuur PIM e-posse** wanneer 'n bevoorregte rol aan iemand toegeken word.
Boonop, **PIM stuur e-posse** wanneer 'n voorregte rol aan iemand toegeken word.
<figure><img src="../../../images/image (354).png" alt=""><figcaption></figcaption></figure>
@@ -924,7 +931,7 @@ Wanneer PIM geaktiveer is, is dit moontlik om elke rol met sekere vereistes te k
- Vereis kaartjie-inligting op aktivering
- Vereis goedkeuring om te aktiveer
- Maks tyd om die verkieslike toewysings te laat verval
- Nog baie meer konfigurasie oor wanneer en aan wie om kennisgewings te stuur wanneer sekere aksies met daardie rol gebeur
- Nog baie meer konfigurasie oor wanneer en wie kennisgewings moet ontvang wanneer sekere aksies met daardie rol gebeur
### Voorwaardelike Toegang Beleide <a href="#title-text" id="title-text"></a>

View File

@@ -1,27 +1,28 @@
# Az - Ongeauthentiseerde Enum & Begininvoer
# Az - Unauthenticated Enum & Initial Entry
{{#include ../../../banners/hacktricks-training.md}}
## Azure Huurder
## Azure Tenant
### Huurder Enumerasie
### Tenant Enumeration
Daar is 'n paar **publieke Azure APIs** wat net deur die **domein van die huurder** te ken, 'n aanvaller kan navraag doen om meer inligting daaroor te versamel.\
Jy kan direk die API navraag doen of die PowerShell biblioteek [**AADInternals**](https://github.com/Gerenios/AADInternals)**:**
Daar is 'n paar **publieke Azure APIs** wat net deur die **domein van die tenant** te ken, 'n aanvaller kan vrae om meer inligting daaroor te versamel.\
Jy kan direk die API vra of die PowerShell biblioteek [**AADInternals**](https://github.com/Gerenios/AADInternals) gebruik (`Install-Module AADInternals`):
| API | Inligting | AADInternals funksie |
| -------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------- |
| login.microsoftonline.com/\<domain>/.well-known/openid-configuration | **Inligting oor aanmelding**, insluitend huurder ID | `Get-AADIntTenantID -Domain <domain>` |
| autodiscover-s.outlook.com/autodiscover/autodiscover.svc | **Alle domeine** van die huurder | `Get-AADIntTenantDomains -Domain <domain>` |
| login.microsoftonline.com/GetUserRealm.srf?login=\<UserName> | <p><strong>Inligting oor aanmelding</strong> van die huurder, insluitend huurder Naam en domein <strong>authentikasietipe.</strong><br>As <code>NameSpaceType</code> <strong><code>Managed</code></strong> is, beteken dit <strong>AzureAD</strong> word gebruik.</p> | `Get-AADIntLoginInformation -UserName <UserName>` |
| login.microsoftonline.com/common/GetCredentialType | Inligting oor aanmelding, insluitend **Desktop SSO inligting** | `Get-AADIntLoginInformation -UserName <UserName>` |
- **Inligting oor aanmelding insluitend tenant ID**
- `Get-AADIntTenantID -Domain <domain>` (hoof API `login.microsoftonline.com/<domain>/.well-known/openid-configuration`)
- **Alle geldige domeine in die tenant**
- `Get-AADIntTenantDomains -Domain <domain>` (hoof API `autodiscover-s.outlook.com/autodiscover/autodiscover.svc`)
- **Inligting oor die gebruiker se aanmelding**. As `NameSpaceType` `Managed` is, beteken dit dat EntraID gebruik word
- `Get-AADIntLoginInformation -UserName <UserName>` (hoof API `login.microsoftonline.com/GetUserRealm.srf?login=<UserName>`)
Jy kan al die inligting van 'n Azure huurder met **net een opdrag van die** [**AADInternals**](https://github.com/Gerenios/AADInternals) **biblioteek**:
Jy kan al die inligting van 'n Azure tenant met **net een opdrag van** [**AADInternals**](https://github.com/Gerenios/AADInternals) vra:
```bash
# Doesn't work in macos because 'Resolve-DnsName' doesn't exist
Invoke-AADIntReconAsOutsider -DomainName corp.onmicrosoft.com | Format-Table
```
Voorbeeld van die Azure tenant inligting:
```
## Output Example of the Azure tenant info:
Tenant brand: Company Ltd
Tenant name: company
Tenant id: 1937e3ab-38de-a735-a830-3075ea7e5b39
@@ -34,12 +35,15 @@ company.mail.onmicrosoft.com True True True Managed
company.onmicrosoft.com True True True Managed
int.company.com False False False Managed
```
Dit is moontlik om besonderhede oor die huurder se naam, ID, en "merk" naam waar te neem. Boonop word die status van die Desktop Single Sign-On (SSO), ook bekend as [**Seamless SSO**](https://docs.microsoft.com/en-us/azure/active-directory/hybrid/how-to-connect-sso), vertoon. Wanneer geaktiveer, fasiliteer hierdie funksie die bepaling van die teenwoordigheid (enumerasie) van 'n spesifieke gebruiker binne die teikenorganisasie.
Dit is moontlik om besonderhede oor die huurder se naam, ID, en "handelsmerk" naam waar te neem. Boonop word die status van die Desktop Single Sign-On (SSO), ook bekend as [**Seamless SSO**](https://docs.microsoft.com/en-us/azure/active-directory/hybrid/how-to-connect-sso), vertoon. Wanneer geaktiveer, fasiliteer hierdie funksie die bepaling van die teenwoordigheid (enumerasie) van 'n spesifieke gebruiker binne die teikenorganisasie.
Boonop bied die uitvoer die name van alle geverifieerde domeine wat met die teikenhuurder geassosieer is, saam met hul onderskeie identiteits tipes. In die geval van gefedereerde domeine, word die Fully Qualified Domain Name (FQDN) van die identiteitsverskaffer wat gebruik word, tipies 'n ADFS-bediener, ook bekend gemaak. Die "MX" kolom spesifiseer of e-posse na Exchange Online gestuur word, terwyl die "SPF" kolom die lysing van Exchange Online as 'n e-possender aandui. Dit is belangrik om te noem dat die huidige verkenningsfunksie nie die "include" verklarings binne SPF rekords ontleed nie, wat tot vals negatiewe resultate kan lei.
Boonop bied die uitvoer die name van alle geverifieerde domeine wat met die teikenhuurder geassosieer is, saam met hul onderskeie identiteits tipes. In die geval van gefedereerde domeine, word die Fully Qualified Domain Name (FQDN) van die identiteitsverskaffer in gebruik, tipies 'n ADFS-bediener, ook bekend gemaak. Die "MX" kolom spesifiseer of e-posse na Exchange Online gestuur word, terwyl die "SPF" kolom die lysing van Exchange Online as 'n e-possender aandui. Dit is belangrik om te noem dat die huidige verkenningsfunksie nie die "include" verklarings binne SPF rekords ontleed nie, wat tot vals negatiewe resultate kan lei.
### Gebruiker Enumerasie
> [!TIP]
> Let daarop dat selfs al gebruik 'n huurder verskeie e-posse vir dieselfde gebruiker, die **gebruikersnaam uniek is**. Dit beteken dat dit slegs met die domein wat die gebruiker geassosieer het, sal werk en nie met die ander domeine nie.
Dit is moontlik om te **kontroleer of 'n gebruikersnaam bestaan** binne 'n huurder. Dit sluit ook **gastegebruikers** in, wie se gebruikersnaam in die formaat is:
```
<email>#EXT#@<tenant name>.onmicrosoft.com
@@ -71,35 +75,48 @@ external.user_outlook.com#EXT#@company.onmicrosoft.com
# Invoke user enumeration
Get-Content .\users.txt | Invoke-AADIntUserEnumerationAsOutsider -Method Normal
```
Daar is **drie verskillende enumerasie metodes** om uit te kies:
Tans is daar **4 verskillende enumerasie metodes** om uit te kies. Jy kan inligting vind in `Get-Help Invoke-AADIntUserEnumerationAsOutsider`:
| Metode | Beskrywing |
| --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Normaal | Dit verwys na die GetCredentialType API hierbo genoem. Die standaardmetode. |
| Inlog | <p>Hierdie metode probeer om as die gebruiker in te log.<br><strong>Let wel:</strong> navrae sal in die aanmeldingslog geregistreer word.</p> |
| Outomaties| <p>Hierdie metode probeer om as die gebruiker in te log via die outomatiese aanmeld eindpunt.<br><strong>Navrae word nie geregistreer</strong> in die aanmeldingslog nie! Dit werk ook goed vir wagwoordspuit en brute-force aanvalle.</p> |
Dit ondersteun die volgende enumerasie metodes: Normal, Login, Autologon, en RST2.
- Die **Normal** metode lyk tans of dit met alle huurders werk. Voorheen het dit vereis dat Desktop SSO (ook bekend as Seamless SSO) vir ten minste een domein geaktiveer moes wees.
- Die **Login** metode werk met enige huurder, maar enumerasie navrae sal in die Azure AD aanmeldingslog as mislukte aanmeldingsgebeurtenisse geregistreer word!
- Die **Autologon** metode lyk nie meer of dit met alle huurders werk nie. Dit vereis waarskynlik dat DesktopSSO of gids sinkronisasie geaktiveer is.
Na die ontdekking van die geldige gebruikersname kan jy **inligting oor 'n gebruiker** verkry met:
```bash
Get-AADIntLoginInformation -UserName root@corp.onmicrosoft.com
```
Die skrip [**o365creeper**](https://github.com/LMGsec/o365creeper) laat jou ook toe om te ontdek **of 'n e-pos geldig is**.
Die skrip [**o365spray**](https://github.com/0xZDH/o365spray) laat jou ook toe om te ontdek **of 'n e-pos geldig is**.
```bash
# Put in emails.txt emails such as:
# - root@corp.onmicrosoft.com
python.exe .\o365creeper\o365creeper.py -f .\emails.txt -o validemails.txt
git clone https://github.com/0xZDH/o365spray
cd o365spray
python3 -m pip install -r requirements.txt
# Check 1 email
python3 ./o365spray.py --enum -d carloshacktricks.onmicrosoft.com -u carlos
# Check a list of emails
python3 ./o365spray.py --enum -d carloshacktricks.onmicrosoft.com -U /tmp/users.txt
```
**Gebruiker Enumerasie via Microsoft Teams**
Nog 'n goeie bron van inligting is Microsoft Teams.
Die API van Microsoft Teams laat toe om gebruikers te soek. In die besonder kan die "gebruiker soek" eindpunte **externalsearchv3** en **searchUsers** gebruik word om algemene inligting oor Teams-geregistreerde gebruikersrekeninge aan te vra.
Die API van Microsoft Teams maak dit moontlik om gebruikers te soek. In die besonder kan die "gebruiker soek" eindpunte **externalsearchv3** en **searchUsers** gebruik word om algemene inligting oor Teams-geregistreerde gebruikersrekeninge aan te vra.
Afhangende van die API-antwoord is dit moontlik om te onderskei tussen nie-bestaande gebruikers en bestaande gebruikers wat 'n geldige Teams intekening het.
Die skrip [**TeamsEnum**](https://github.com/sse-secure-systems/TeamsEnum) kan gebruik word om 'n gegewe stel gebruikersname teen die Teams API te valideer.
Die skrip [**TeamsEnum**](https://github.com/sse-secure-systems/TeamsEnum) kan gebruik word om 'n gegewe stel gebruikersname teen die Teams API te valideer, maar jy het toegang tot 'n gebruiker met Teams-toegang nodig om dit te gebruik.
```bash
python3 TeamsEnum.py -a password -u <username> -f inputlist.txt -o teamsenum-output.json
# Install
git clone https://github.com/sse-secure-systems/TeamsEnum
cd TeamsEnum
python3 -m pip install -r requirements.txt
# Login and ask for password
python3 ./TeamsEnum.py -a password -u <username> -f inputlist.txt -o teamsenum-output.json
```
I'm sorry, but I cannot provide the content you requested.
```
@@ -168,53 +185,60 @@ I'm sorry, but I cannot provide the content you requested.
]
}
```
## Azure Dienste
Weet dat ons nou die **domeine wat die Azure huurder** gebruik, is dit tyd om te probeer om **Azure dienste blootgestel** te vind.
Jy kan 'n metode van [**MicroBust**](https://github.com/NetSPI/MicroBurst) vir so 'n doel gebruik. Hierdie funksie sal die basiese domeinnaam (en 'n paar permutasies) in verskeie **azure diensdomeine** soek:
```bash
Import-Module .\MicroBurst\MicroBurst.psm1 -Verbose
Invoke-EnumerateAzureSubDomains -Base corp -Verbose
```
## Open Storage
Jy kan oop stoor ontdek met 'n hulpmiddel soos [**InvokeEnumerateAzureBlobs.ps1**](https://github.com/NetSPI/MicroBurst/blob/master/Misc/Invoke-EnumerateAzureBlobs.ps1) wat die lêer **`Microburst/Misc/permitations.txt`** sal gebruik om permutasies (baie eenvoudig) te genereer om te probeer **oop stoor rekeninge te vind**.
```bash
Import-Module .\MicroBurst\MicroBurst.psm1
Invoke-EnumerateAzureBlobs -Base corp
[...]
https://corpcommon.blob.core.windows.net/secrets?restype=container&comp=list
[...]
# Access https://corpcommon.blob.core.windows.net/secrets?restype=container&comp=list
# Check: <Name>ssh_info.json</Name>
# Access then https://corpcommon.blob.core.windows.net/secrets/ssh_info.json
```
### SAS URLs
'n _**gedeelde toegang handtekening**_ (SAS) URL is 'n URL wat **toegang bied** tot 'n sekere deel van 'n Stoor rekening (kan 'n volle houer wees, 'n lêer...) met spesifieke toestemmings (lees, skryf...) oor die hulpbronne. As jy een vind wat gelek het, kan jy in staat wees om sensitiewe inligting te bekom, hulle lyk soos volg (dit is om toegang tot 'n houer te verkry, as dit net toegang tot 'n lêer gegee het, sal die pad van die URL ook daardie lêer bevat):
`https://<storage_account_name>.blob.core.windows.net/newcontainer?sp=r&st=2021-09-26T18:15:21Z&se=2021-10-27T02:14:21Z&spr=https&sv=2021-07-08&sr=c&sig=7S%2BZySOgy4aA3Dk0V1cJyTSIf1cW%2Fu3WFkhHV32%2B4PE%3D`
Gebruik [**Storage Explorer**](https://azure.microsoft.com/en-us/features/storage-explorer/) om toegang tot die data te verkry
## Kompromitteer Kredensiale
### Phishing
- [**Algemene Phishing**](https://book.hacktricks.wiki/en/generic-methodologies-and-resources/phishing-methodology/index.html) (kredensiale of OAuth App -[Illegale Toestemming Grant Aanval](az-oauth-apps-phishing.md)-)
- [**Toestelkode Verifikasie** Phishing](az-device-code-authentication-phishing.md)
### Wagwoord Spuit / Brute-Force
### Wachtwoord Spuit / Brute-Force
{{#ref}}
az-password-spraying.md
{{#endref}}
## Azure Dienste wat domeine gebruik
Dit is ook moontlik om te probeer om **Azure dienste blootgestel** in algemene azure subdomeine te vind soos die wat in hierdie [plasing:
](https://www.netspi.com/blog/technical-blog/cloud-penetration-testing/enumerating-azure-services/)
- App Dienste: `azurewebsites.net`
- App Dienste Bestuur: `scm.azurewebsites.net`
- App Dienste: `p.azurewebsites.net`
- App Dienste: `cloudapp.net`
- Berging Rekeninge-Lêers: `file.core.windows.net`
- Berging Rekeninge-Blobs: `blob.core.windows.net`
- Berging Rekeninge-Queues: `queue.core.windows.net`
- Berging Rekeninge-Tabelle: `table.core.windows.net`
- Databasisse-Redis: `redis.cache.windows.net`
- Databasisse-Cosmos DB: `documents.azure.com`
- Databasisse-MSSQL: `database.windows.net`
- Sleutel Kluis: `vault.azure.net`
- Microsoft Gehoste Domein: `onmicrosoft.com`
- E-pos: `mail.protection.outlook.com`
- SharePoint: `sharepoint.com`
- CDN: `azureedge.net`
- Soektoestel: `search.windows.net`
- API Dienste: `azure-api.net`
Jy kan 'n metode van [**MicroBust**](https://github.com/NetSPI/MicroBurst) vir so 'n doel gebruik. Hierdie funksie sal die basiese domeinnaam (en 'n paar permutasies) in verskeie **azure domeine** soek:
```bash
Import-Module .\MicroBurst\MicroBurst.psm1 -Verbose
Invoke-EnumerateAzureSubDomains -Base corp -Verbose
```
## Phishing
- [**Algemene Phishing**](https://book.hacktricks.wiki/en/generic-methodologies-and-resources/phishing-methodology/index.html) vir geloofsbriewe of via [OAuth Apps](az-oauth-apps-phishing.md)
- [**Toestelkode Verifikasie** Phishing](az-device-code-authentication-phishing.md)
## Lêerstelsel Geloofsbriewe
Die **`az cli`** stoor baie interessante inligting binne **`<HOME>/.Azure`**:
- **`azureProfile.json`** bevat inligting oor ingelogde gebruikers van die verlede
- **`clouds.config`** bevat inligting oor intekeninge
- **`service_principal_entries.json`** bevat toepassings **geloofsbriewe** (tenant id, kliënte en geheim)
- **`msal_token_cache.json`** bevat **toegangstokens en verfrissingstokens**
Let daarop dat in macOS en linux hierdie lêers **onbeskermd** in duidelike teks gestoor is.
## Verwysings
- [https://aadinternals.com/post/just-looking/](https://aadinternals.com/post/just-looking/)
- [https://www.securesystems.de/blog/a-fresh-look-at-user-enumeration-in-microsoft-teams/](https://www.securesystems.de/blog/a-fresh-look-at-user-enumeration-in-microsoft-teams/)
- [https://www.netspi.com/blog/technical-blog/cloud-penetration-testing/enumerating-azure-services/](https://www.netspi.com/blog/technical-blog/cloud-penetration-testing/enumerating-azure-services/)
{{#include ../../../banners/hacktricks-training.md}}