# Azure Pentesting

{{#include ../../banners/hacktricks-training.md}}

## Basiese Inligting

Leer die basiese beginsels van Azure en Entra ID op die volgende bladsy:

{{#ref}}
az-basic-information/
{{#endref}}

## Azure Pentester/Red Team Metodologie

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 Red Team perspektief is die **eerste stap om 'n Azure omgewing te kompromitteer** om 'n **voothold** te verkry.

### Eksterne enum & Begin Toegang

Die eerste stap is natuurlik om inligting oor die tenant wat jy aanval, te evalueer en te probeer om 'n voet in die deur te kry.

Op grond van 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}}

Met hierdie inligting is die mees algemene maniere om 'n voet in die deur te kry:
- **OSINT**: Kyk vir **leaks** in Github of enige ander oopbron platform wat **akkrediteer** of interessante inligting kan bevat.
- **Wagwoord** hergebruik, leaks 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/)
- **Ander azure dienste misconfigurasies**
- 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 bevat`** 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 verfrissingstokens. 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 cache 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, verfrissingstokens 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)

Vind **ander Azure Dienste misconfigurasies** wat tot 'n voet in die deur kan lei op die volgende bladsy:

{{#ref}}
az-unauthenticated-enum-and-initial-entry/
{{#endref}}

> [!NOTE]
> Onthou dat gewoonlik die **luidste** deel van die enumerasie die **aanmelding** is, nie die enumerasie self nie.

### Azure & Entra ID gereedskap

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}}
az-enumeration-tools.md
{{#endref}}

### Bypass Toegang Beleide

<figure><img src="../../images/image (268).png" alt=""><figcaption></figcaption></figure>

In gevalle waar jy 'n paar geldige akkrediteer het maar nie kan 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 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ê.

Kyk:

{{#ref}}
az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md
{{#endref}}

### Whoami

> [!CAUTION]
> Leer **hoe om** az cli, AzureAD en Az PowerShell te installeer 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):

{{#tabs }}
{{#tab name="az cli" }}
```bash
az account list
az account tenant list # Current tenant info
az account subscription list # Current subscription info
az ad signed-in-user show # Current signed-in user
az ad signed-in-user list-owned-objects # Get owned objects by current user
az account management-group list #Not allowed by default
```
{{#endtab }}

{{#tab name="Az" }}
```bash
# Get the information about the current context (Account, Tenant, Subscription etc.)
Get-AzContext
# List all available contexts
Get-AzContext -ListAvailable
# Enumerate subscriptions accessible by the current user
Get-AzSubscription
#Get Resource group
Get-AzResourceGroup
```
{{#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 }}


### Entra ID Enumerasie & Privesc

Standaard behoort enige gebruiker **voldoende regte te hê om** dinge soos gebruikers, groepe, rolle, diensprincipals... te enumereer (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}}

Kyk na die **Post-Exploitation gereedskap** om gereedskap te vind om regte in Entra ID te eskaleer soos **AzureHound:**

{{#ref}}
az-enumeration-tools.md#automated-post-exploitation-tools
{{#endref}}


### Azure Enumerasie

Sodra jy weet wie jy is, kan jy begin om die **Azure dienste waartoe jy toegang het** te enumereer.

Jy moet begin om die **regte wat jy het** oor die hulpbronne uit te vind. Hiervoor:

1. **Vind die hulpbron waartoe jy toegang het**:

> [!TIP]
> Dit vereis nie enige spesiale regte nie.

Die Az PowerShell opdrag **`Get-AzResource`** laat jou **weet watter hulpbronne jou huidige gebruiker sigbaarheid oor het**.

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 die volgende uit te voer:
```bash
az rest --method GET --url "https://management.azure.com/subscriptions/<subscription-id>/resources?api-version=2021-04-01"
```
2. **Vind die toestemmings wat jy oor die hulpbronne het wat jy kan sien**:

> [!TIP]
> Dit vereis nie enige spesiale toestemming nie.

Deur met die API **`https://management.azure.com/{resource_id}/providers/Microsoft.Authorization/permissions?api-version=2022-04-01`** te praat, kan jy die toestemmings wat jy oor die gespesifiseerde hulpbron in die **`resource_id`** het, verkry.

Daarom, **deur elkeen van die hulpbronne wat jy toegang tot het na te gaan**, kan jy die toestemmings wat jy oor hulle het, verkry.

> [!WARNING]
> Jy kan hierdie opsporing outomatiseer met die hulpmiddel **[Find_My_Az_Management_Permissions](https://github.com/carlospolop/Find_My_Az_Management_Permissions)**.


<details>
<summary>Enumerate permissions with **`Microsoft.Authorization/roleAssignments/read`**</summary>

> [!TIP]
> Let daarop dat jy die toestemming **`Microsoft.Authorization/roleAssignments/read`** nodig het om hierdie aksie uit te voer.

- Met genoeg toestemmings kan die rol **`Get-AzRoleAssignment`** gebruik word om **alle rolle** in die intekening of die toestemming oor 'n spesifieke hulpbron te **opspoor** deur dit soos volg aan te dui:
```bash
Get-AzRoleAssignment -Scope /subscriptions/<subscription-id>/resourceGroups/Resource_Group_1/providers/Microsoft.RecoveryServices/vaults/vault-m3ww8ut4
```
Dit is ook moontlik om hierdie inligting te verkry deur te loop:
```bash
az rest --method GET --uri "https://management.azure.com/<Scope>/providers/Microsoft.Authorization/roleAssignments?api-version=2022-04-01" | jq ".value"
```
soos in:
```bash
az rest --method GET --uri "https://management.azure.com//subscriptions/<subscription-id>/resourceGroups/Resource_Group_1/providers/Microsoft.KeyVault/vaults/vault-m3ww8ut4/providers/Microsoft.Authorization/roleAssignments?api-version=2022-04-01" | jq ".value"
```
- 'n Ander opsie is om **die rolle wat aan jou in azure geheg is, te kry**. Dit vereis ook die toestemming **`Microsoft.Authorization/roleAssignments/read`**:
```bash
az role assignment list --assignee "<email>" --all --output table
```
Of die volgende uit te voer (As die resultate leeg is, kan dit wees omdat jy nie die toestemming het om dit te verkry nie):
```bash
az rest --method GET --uri 'https://management.azure.com/subscriptions/<subscription-id>/providers/Microsoft.Authorization/roleAssignments?api-version=2022-04-01&$filter=principalId eq '<user-id>'
```
- **Vind die fynkorrelasie toestemmings van die rolle wat aan jou geheg is**:

Dan, om die fynkorrelasie toestemming te kry, kan jy **`(Get-AzRoleDefinition -Id "<RoleDefinitionId>").Actions`** uitvoer.

Of bel die API direk met
```bash
az rest --method GET --uri "https://management.azure.com//subscriptions/<subscription-id>/providers/Microsoft.Authorization/roleDefinitions/<RoleDefinitionId>?api-version=2022-04-01" | jq ".properties"
```
</details>

In die volgende afdeling kan jy **inligting oor die mees algemene Azure dienste en hoe om hulle te enumerate** vind:

{{#ref}}
az-services/
{{#endref}}

### Privilege Escalation, Post-Exploitation & Persistence

Sodra jy weet hoe die Azure omgewing gestruktureer is en watter dienste gebruik word, kan jy begin soek na maniere om **privileges 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 privileges 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 uit te voer in die mees algemene Azure dienste:

{{#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}}
