mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-02-04 19:11:41 -08:00
Translated ['src/pentesting-cloud/azure-security/az-privilege-escalation
This commit is contained in:
@@ -12,7 +12,7 @@ Za više informacija o Azure App uslugama, proverite:
|
||||
|
||||
### Microsoft.Web/sites/publish/Action, Microsoft.Web/sites/basicPublishingCredentialsPolicies/read, Microsoft.Web/sites/config/read, Microsoft.Web/sites/read
|
||||
|
||||
Ove dozvole omogućavaju pristup **SSH shell** unutar web aplikacije. Takođe omogućavaju **debug** aplikacije.
|
||||
Ove dozvole omogućavaju pristup **SSH shell-u** unutar web aplikacije. Takođe omogućavaju **debug** aplikacije.
|
||||
|
||||
- **SSH u jednoj komandi**:
|
||||
```bash
|
||||
@@ -23,7 +23,7 @@ az webapp ssh --name <name> --resource-group <res-group>
|
||||
```bash
|
||||
az webapp create-remote-connection --name <name> --resource-group <res-group>
|
||||
|
||||
## If successfull you will get a message such as:
|
||||
## If successful you will get a message such as:
|
||||
#Verifying if app is running....
|
||||
#App is running. Trying to establish tunnel connection...
|
||||
#Opening tunnel on port: 39895
|
||||
@@ -32,16 +32,16 @@ az webapp create-remote-connection --name <name> --resource-group <res-group>
|
||||
## So from that machine ssh into that port (you might need generate a new ssh session to the jump host)
|
||||
ssh root@127.0.0.1 -p 39895
|
||||
```
|
||||
- **Debugujte aplikaciju**:
|
||||
- **Debug the application**:
|
||||
1. Instalirajte Azure ekstenziju u VScode.
|
||||
2. Prijavite se u ekstenziju sa Azure nalogom.
|
||||
3. Prikazujte sve App usluge unutar pretplate.
|
||||
4. Izaberite App uslugu koju želite da debugujete, desni klik i izaberite "Start Debugging".
|
||||
5. Ako aplikacija nema omogućeno debugovanje, ekstenzija će pokušati da ga omogući, ali vaš nalog treba da ima dozvolu `Microsoft.Web/sites/config/write` da bi to uradio.
|
||||
4. Izaberite App uslugu koju želite da debagujete, kliknite desnim tasterom i izaberite "Start Debugging".
|
||||
5. Ako aplikacija nema omogućeno debagovanje, ekstenzija će pokušati da ga omogući, ali vaš nalog treba da ima dozvolu `Microsoft.Web/sites/config/write` da bi to uradio.
|
||||
|
||||
### Dobijanje SCM kredencijala i omogućavanje osnovne autentifikacije
|
||||
### Obtaining SCM Credentials & Enabling Basic Authentication
|
||||
|
||||
Da biste dobili SCM kredencijale, možete koristiti sledeće **komande i dozvole**:
|
||||
Da biste dobili SCM akreditive, možete koristiti sledeće **komande i dozvole**:
|
||||
|
||||
- Dozvola **`Microsoft.Web/sites/publishxml/action`** omogućava pozivanje:
|
||||
```bash
|
||||
@@ -124,14 +124,14 @@ az webapp deployment user set \
|
||||
--user-name hacktricks \
|
||||
--password 'W34kP@ssw0rd123!'
|
||||
```
|
||||
Zatim, možete koristiti ove kredencijale da **pristupite SCM i FTP platformama**. Ovo je takođe odličan način za održavanje postojanosti.
|
||||
Zatim, možete koristiti ove kredencijale da **pristupite SCM i FTP platformama**. Ovo je takođe odličan način da održite postojanost.
|
||||
|
||||
Zapamtite da za pristup SCM platformi sa **veb-a morate pristupiti `<SCM-URL>/BasicAuth`**.
|
||||
|
||||
> [!WARNING]
|
||||
> Imajte na umu da svaki korisnik može konfigurisati svoje kredencijale pozivajući prethodnu komandu, ali ako korisnik nema dovoljno dozvola za pristup SCM ili FTP, kredencijali neće raditi.
|
||||
> Imajte na umu da svaki korisnik može konfigurisati svoje kredencijale pozivajući prethodnu komandu, ali ako korisnik nema dovoljno dozvola za pristup SCM-u ili FTP-u, kredencijali neće raditi.
|
||||
|
||||
- Ako vidite da su ti kredencijali **REDAKTOVANI**, to je zato što **morate omogućiti opciju osnovne autentifikacije SCM** i za to vam je potrebna druga dozvola (`Microsoft.Web/sites/basicPublishingCredentialsPolicies/write):`
|
||||
- Ako vidite da su ti kredencijali **REDAKTOVANI**, to je zato što **morate omogućiti opciju osnovne autentifikacije SCM** i za to vam je potrebna druga dozvola (`Microsoft.Web/sites/basicPublishingCredentialsPolicies/write`):
|
||||
```bash
|
||||
# Enable basic authentication for SCM
|
||||
az rest --method PUT \
|
||||
@@ -149,7 +149,7 @@ az rest --method PUT \
|
||||
"properties": {
|
||||
"allow": true
|
||||
}
|
||||
}
|
||||
}'
|
||||
```
|
||||
### Objavite kod koristeći SCM akreditive
|
||||
|
||||
@@ -157,15 +157,15 @@ Samo sa validnim SCM akreditivima moguće je **objaviti kod** na App servisu. To
|
||||
|
||||
Za ovaj python primer možete preuzeti repozitorijum sa https://github.com/Azure-Samples/msdocs-python-flask-webapp-quickstart, napraviti bilo kakve **promene** koje želite i zatim **zipovati pokretanjem: `zip -r app.zip .`**.
|
||||
|
||||
Zatim možete **objaviti kod** sledećom komandom:
|
||||
Zatim možete **objaviti kod** u web aplikaciji sa sledećom komandom:
|
||||
```bash
|
||||
curl -X POST "<SMC-URL>/api/publish?type=zip" --data-binary "@./app.zip" -u '<username>:<password>' -H "Content-Type: application/octet-stream"
|
||||
```
|
||||
### Microsoft.Web/sites/publish/Action | SCM kredencijali
|
||||
### Webjobs: Microsoft.Web/sites/publish/Action | SCM kredencijali
|
||||
|
||||
Pomenuta Azure dozvola omogućava izvođenje nekoliko zanimljivih akcija koje se takođe mogu izvesti sa SCM kredencijalima:
|
||||
|
||||
- Čitanje **Webjobs** logova:
|
||||
- Čitaj **Webjobs** logove:
|
||||
```bash
|
||||
# Using Azure credentials
|
||||
az rest --method GET --url "<SCM-URL>/vfs/data/jobs/<continuous | triggered>/rev5/job_log.txt" --resource "https://management.azure.com/"
|
||||
@@ -173,7 +173,7 @@ az rest --method GET --url "https://lol-b5fyaeceh4e9dce0.scm.canadacentral-01.az
|
||||
|
||||
# Using SCM username and password:
|
||||
curl "<SCM-URL>/vfs/data/jobs/continuous/job_name/job_log.txt" \
|
||||
--user '<username>:<password>>' -v
|
||||
--user '<username>:<password>' -v
|
||||
```
|
||||
- Pročitajte **Webjobs** izvorni kod:
|
||||
```bash
|
||||
@@ -203,20 +203,20 @@ curl -X PUT \
|
||||
--data-binary "@/Users/carlospolop/Downloads/rev.js" \
|
||||
--user '<username>:<password>'
|
||||
```
|
||||
### Microsoft.Web/sites/write, Microsoft.Web/sites/read, Microsoft.ManagedIdentity/userAssignedIdentities/assign/action
|
||||
|
||||
Ove dozvole omogućavaju da se **dodeli upravljana identitet** usluzi aplikacije, tako da ako je usluga aplikacije prethodno kompromitovana, ovo će omogućiti napadaču da dodeli nove upravljane identitete usluzi aplikacije i **poveća privilegije** za njih.
|
||||
```bash
|
||||
az webapp identity assign --name <app-name> --resource-group <res-group> --identities /subscriptions/<subcripttion-id>/resourceGroups/<res_group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<managed-identity-name>
|
||||
```
|
||||
### Microsoft.Web/sites/config/list/action
|
||||
|
||||
Ova dozvola omogućava da se prikažu **connection strings** i **appsettings** App servisa koji mogu sadržati osetljive informacije poput kredencijala za bazu podataka.
|
||||
Ova dozvola omogućava listanje **connection strings** i **appsettings** usluge aplikacije koja može sadržati osetljive informacije kao što su kredencijali za bazu podataka.
|
||||
```bash
|
||||
az webapp config connection-string list --name <name> --resource-group <res-group>
|
||||
az webapp config appsettings list --name <name> --resource-group <res-group>
|
||||
```
|
||||
### Microsoft.Web/sites/write, Microsoft.Web/sites/read, Microsoft.ManagedIdentity/userAssignedIdentities/assign/action
|
||||
|
||||
Ove dozvole omogućavaju da se **dodeli upravljana identitet** servisu aplikacije, tako da ako je servis aplikacije prethodno bio kompromitovan, ovo će omogućiti napadaču da dodeli nove upravljane identitete servisu aplikacije i **poveća privilegije** na njih.
|
||||
```bash
|
||||
az webapp identity assign --name <app-name> --resource-group <res-group> --identities /subscriptions/<subcripttion-id>/resourceGroups/<res_group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<managed-identity-name>
|
||||
```
|
||||
### Pročitajte Konfigurisane Treće Strane Akreditive
|
||||
### Pročitajte Konfigurisane Akreditive Treće Strane
|
||||
|
||||
Pokretanjem sledeće komande moguće je **pročitati akreditive treće strane** konfigurisane u trenutnom nalogu. Imajte na umu da, na primer, ako su neki Github akreditive konfigurisani za drugog korisnika, nećete moći da pristupite tokenu iz drugog.
|
||||
```bash
|
||||
@@ -250,7 +250,7 @@ https://graph.microsoft.com/v1.0/me/drive/root/children
|
||||
```
|
||||
### Ažurirajte kod aplikacije iz izvora
|
||||
|
||||
- Ako je konfigurisan izvor treće strane kao što su Github, BitBucket ili Azure Repository, možete **ažurirati kod** usluge aplikacije kompromitovanjem izvornog koda u repozitorijumu.
|
||||
- Ako je konfigurisani izvor treća strana kao što su Github, BitBucket ili Azure Repository, možete **ažurirati kod** usluge aplikacije kompromitovanjem izvornog koda u repozitorijumu.
|
||||
- Ako je aplikacija konfigurisana koristeći **daljinski git repozitorijum** (sa korisničkim imenom i lozinkom), moguće je dobiti **URL i osnovne autentifikacione podatke** za kloniranje i slanje izmena sa:
|
||||
- Koristeći dozvolu **`Microsoft.Web/sites/sourcecontrols/read`**: `az webapp deployment source show --name <app-name> --resource-group <res-group>`
|
||||
- Koristeći dozvolu **`Microsoft.Web/sites/config/list/action`**:
|
||||
@@ -266,11 +266,11 @@ https://graph.microsoft.com/v1.0/me/drive/root/children
|
||||
> Imajte na umu da je, imajući dozvolu `Microsoft.Web/sites/config/list/action` i SCM akreditive, uvek moguće implementirati u webapp (čak i ako je konfigurisana da koristi treću stranu) kao što je pomenuto u prethodnom odeljku.
|
||||
|
||||
> [!WARNING]
|
||||
> Imajte na umu da je, imajući dozvole u nastavku, takođe **moguće izvršiti proizvoljan kontejner** čak i ako je webapp konfigurisana drugačije.
|
||||
> Imajte na umu da je, imajući dozvole u nastavku, takođe **moguće izvršiti proizvoljni kontejner** čak i ako je webapp konfigurisana drugačije.
|
||||
|
||||
### `Microsoft.Web/sites/config/Write`, `Microsoft.Web/sites/config/Read`, `Microsoft.Web/sites/config/list/Action`, `Microsoft.Web/sites/Read`
|
||||
|
||||
Ovo je skup dozvola koji omogućava **modifikaciju kontejnera koji se koristi** od strane webapp-a. Napadač bi mogao da ga zloupotrebi da natera webapp da izvrši maliciozni kontejner.
|
||||
Ovo je skup dozvola koje omogućavaju **modifikaciju kontejnera koji se koristi** od strane webapp-a. Napadač bi mogao da zloupotrebi to da natera webapp da izvrši zlonamerni kontejner.
|
||||
```bash
|
||||
az webapp config container set \
|
||||
--name <app-name> \
|
||||
|
||||
@@ -13,9 +13,9 @@ Svaka aplikacija radi unutar sandbox-a, ali izolacija zavisi od App Service plan
|
||||
- Izolovani nivoi rade na **posvećenim VM-ovima na posvećenim virtuelnim mrežama**, poboljšavajući izolaciju aplikacija.
|
||||
|
||||
> [!WARNING]
|
||||
> Imajte na umu da **nijedna** od tih izolacija **ne sprečava** druge uobičajene **web ranjivosti** (kao što su upload fajlova ili injekcije). I ako se koristi **identitet za upravljanje**, može biti u mogućnosti da **poveća privilegije na njih**.
|
||||
> Imajte na umu da **nijedna** od tih izolacija **ne sprečava** druge uobičajene **web ranjivosti** (kao što su upload fajlova ili injekcije). A ako se koristi **identitet za upravljanje**, može biti u mogućnosti da **poveća privilegije na njih**.
|
||||
|
||||
Aplikacije imaju neka zanimljiva podešavanja:
|
||||
Aplikacije imaju neke zanimljive konfiguracije:
|
||||
|
||||
- **Always On**: Osigurava da aplikacija uvek radi. Ako nije omogućeno, aplikacija će prestati da radi nakon 20 minuta neaktivnosti i ponovo će se pokrenuti kada se primi zahtev.
|
||||
- Ovo je bitno ako imate webjob koji treba da radi kontinuirano, jer će webjob prestati ako aplikacija prestane.
|
||||
@@ -28,7 +28,7 @@ Aplikacije imaju neka zanimljiva podešavanja:
|
||||
|
||||
## Osnovna autentifikacija
|
||||
|
||||
Kada kreirate web aplikaciju (i obično Azure funkciju), moguće je naznačiti da li želite da **osnovna autentifikacija bude omogućena** (podrazumevano je onemogućena). Ovo u suštini **omogućava SCM (Source Control Manager) i FTP (File Transfer Protocol)** za aplikaciju, tako da će biti moguće implementirati aplikaciju koristeći te tehnologije.
|
||||
Kada kreirate web aplikaciju (i obično Azure funkciju), moguće je naznačiti da želite da **osnovna autentifikacija bude omogućena** (podrazumevano je onemogućena). Ovo u suštini **omogućava SCM (Source Control Manager) i FTP (File Transfer Protocol)** za aplikaciju, tako da će biti moguće implementirati aplikaciju koristeći te tehnologije.
|
||||
|
||||
Da biste pristupili SCM i FTP serverima, potrebni su **korisničko ime i lozinka**. Stoga, Azure pruža neke **API-je za dobijanje URL-ova** za te platforme i kredencijale.
|
||||
|
||||
@@ -41,14 +41,14 @@ Moguće je povezati se na SCM koristeći web pregledač na `https://<SMC-URL>/Ba
|
||||
|
||||
Kudu je platforma koja **upravlja i SCM-om i web i API interfejsom** za upravljanje App Service-om, i pruža Git-bazirane implementacije, daljinsko debagovanje i mogućnosti upravljanja fajlovima. Dostupan je kroz SCM URL definisan u web aplikaciji.
|
||||
|
||||
Imajte na umu da su Kudu verzije koje koriste App Services i Function Apps različite, pri čemu je verzija Function aplikacija mnogo ograničenija.
|
||||
Imajte na umu da su verzije Kudu koje koriste App Services i Function Apps različite, pri čemu je verzija Function aplikacija mnogo ograničenija.
|
||||
|
||||
Neki zanimljivi krajnji tački koje možete pronaći u Kudu su:
|
||||
- `/BasicAuth`: Morate pristupiti ovom putu da biste **prijavili u Kudu**.
|
||||
- `/BasicAuth`: Morate pristupiti ovom putu da **prijavite u Kudu**.
|
||||
- `/DebugConsole`: Konzola koja vam omogućava da izvršavate komande u okruženju gde Kudu radi.
|
||||
- Imajte na umu da ovo okruženje **nema pristup** metapodacima servisa za dobijanje tokena.
|
||||
- `/webssh/host`: Web-bazirani SSH klijent koji vam omogućava da se povežete unutar kontejnera gde aplikacija radi.
|
||||
- Ovo okruženje **ima pristup** metapodacima servisa kako bi dobilo tokene od dodeljenih upravljanih identiteta.
|
||||
- Ovo okruženje **ima pristup** metapodacima servisa kako bi dobilo tokene od dodeljenih identiteta za upravljanje.
|
||||
- `/Env`: Dobijte informacije o sistemu, podešavanjima aplikacije, env varijablama, konekcionim stringovima i HTTP header-ima.
|
||||
- `/wwwroot/`: Glavni direktorijum web aplikacije. Možete preuzeti sve fajlove odavde.
|
||||
|
||||
@@ -72,10 +72,10 @@ App Services omogućava da se kod učita kao zip fajl podrazumevano, ali takođe
|
||||
|
||||
Azure WebJobs su **pozadinski zadaci koji se izvršavaju u Azure App Service okruženju**. Omogućavaju programerima da izvršavaju skripte ili programe zajedno sa svojim web aplikacijama, olakšavajući rukovanje asinhronim ili vremenski intenzivnim operacijama kao što su obrada fajlova, rukovanje podacima ili zakazani zadaci.
|
||||
Postoje 2 tipa web jobova:
|
||||
- **Kontinuirani**: Radi neprekidno u petlji i aktivira se čim se kreira. Idealno je za zadatke koji zahtevaju konstantno procesiranje. Međutim, ako aplikacija prestane da radi jer je Always On onemogućen i nije primila zahtev u poslednjih 20 minuta, web job će takođe prestati.
|
||||
- **Okidač**: Radi na zahtev ili na osnovu rasporeda. Najbolje je prilagođen za periodične zadatke, kao što su ažuriranja podataka ili rutine održavanja.
|
||||
- **Kontinuirani**: Radi neprekidno u petlji i aktivira se čim se kreira. Idealno je za zadatke koji zahtevaju konstantno procesiranje. Međutim, ako aplikacija prestane da radi jer je Always On onemogućeno i nije primila zahtev u poslednjih 20 minuta, web job će takođe prestati.
|
||||
- **Pokrenuti**: Radi na zahtev ili na osnovu rasporeda. Najbolje je prilagođen za periodične zadatke, kao što su ažuriranja podataka ili rutinske održavanja.
|
||||
|
||||
Webjobs su veoma zanimljivi iz perspektive napadača jer se mogu koristiti za **izvršavanje koda** u okruženju i **povećanje privilegija** na dodeljene upravljane identitete.
|
||||
Webjobs su veoma zanimljivi iz perspektive napadača jer se mogu koristiti za **izvršavanje koda** u okruženju i **povećanje privilegija** na dodeljene identitete za upravljanje.
|
||||
|
||||
Pored toga, uvek je zanimljivo proveriti **logove** koje generišu Webjobs jer mogu sadržati **osetljive informacije**.
|
||||
|
||||
@@ -89,7 +89,7 @@ Pored toga, moguće je usmeriti **procenat saobraćaja** na određeni slot, što
|
||||
|
||||
U suštini, **Azure Function aplikacije su podskup Azure App Service** u web konzoli i ako odete u web konzolu i navedete sve app servise ili izvršite `az webapp list` u az cli, moći ćete da **vidite i Function aplikacije navedene tamo**.
|
||||
|
||||
Stoga, obe usluge zapravo imaju većinom **iste konfiguracije, funkcije i opcije u az cli**, iako ih možda malo drugačije konfigurišu (kao što su podrazumevane vrednosti appsettings ili korišćenje Storage naloga u Function aplikacijama).
|
||||
Stoga, obe usluge zapravo imaju većinom **iste konfiguracije, funkcije i opcije u az cli**, iako ih možda konfigurišu malo drugačije (kao što su podrazumevane vrednosti appsettings ili korišćenje Storage naloga u Function aplikacijama).
|
||||
|
||||
## Enumeracija
|
||||
|
||||
@@ -156,6 +156,9 @@ az webapp config storage-account list --name <name> --resource-group <res-group>
|
||||
# Get configured container (if any) in the webapp, it could contain credentials
|
||||
az webapp config container show --name <name> --resource-group <res-group>
|
||||
|
||||
# Get git URL to access the code
|
||||
az webapp deployment source config-local-git --resource-group <res-group> -n <name>
|
||||
|
||||
# Get Webjobs
|
||||
az webapp webjob continuous list --resource-group <res-group> --name <app-name>
|
||||
az webapp webjob triggered list --resource-group <res-group> --name <app-name>
|
||||
@@ -217,24 +220,7 @@ done
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
#### Dobijanje kredencijala i pristup kodu web aplikacije
|
||||
```bash
|
||||
# Get connection strings that could contain credentials (with DBs for example)
|
||||
az webapp config connection-string list --name <name> --resource-group <res-group>
|
||||
## Check how to use the DBs connection strings in the SQL page
|
||||
|
||||
# Get credentials to access the code and DB credentials if configured.
|
||||
az webapp deployment list-publishing-profiles --resource-group <res-group> -n <name>
|
||||
|
||||
|
||||
# Get git URL to access the code
|
||||
az webapp deployment source config-local-git --resource-group <res-group> -n <name>
|
||||
|
||||
# Access/Modify the code via git
|
||||
git clone 'https://<username>:<password>@name.scm.azurewebsites.net/repo-name.git'
|
||||
## In my case the username was: $nameofthewebapp and the password some random chars
|
||||
## If you change the code and do a push, the app is automatically redeployed
|
||||
```
|
||||
{{#ref}}
|
||||
../az-privilege-escalation/az-app-services-privesc.md
|
||||
{{#endref}}
|
||||
@@ -252,12 +238,12 @@ cd msdocs-python-flask-webapp-quickstart
|
||||
# Create webapp from this code
|
||||
az webapp up --runtime PYTHON:3.9 --sku B1 --logs
|
||||
```
|
||||
Prijavljivanje na SCM portal ili prijavljivanje putem FTP-a omogućava da se u `/wwwroot` vidi kompresovani fajl `output.tar.gz` koji sadrži kod web aplikacije.
|
||||
Prijavljivanjem na SCM portal ili prijavljivanjem putem FTP-a moguće je videti u `/wwwroot` kompresovani fajl `output.tar.gz` koji sadrži kod web aplikacije.
|
||||
|
||||
> [!TIP]
|
||||
> Samo povezivanje putem FTP-a i modifikovanje fajla `output.tar.gz` nije dovoljno da se promeni kod koji izvršava web aplikacija.
|
||||
|
||||
**Napadač bi mogao da preuzme ovaj fajl, modifikuje ga i ponovo ga otpremi da bi izvršio proizvoljan kod u web aplikaciji.**
|
||||
**Napadač bi mogao preuzeti ovaj fajl, modifikovati ga i ponovo ga otpremiti da bi izvršio proizvoljan kod u web aplikaciji.**
|
||||
|
||||
### Python sa Github-a
|
||||
|
||||
@@ -267,7 +253,7 @@ Ovaj tutorijal se zasniva na prethodnom, ali koristi Github repozitorijum.
|
||||
2. Kreirajte novu python Web App u Azure-u.
|
||||
3. U `Deployment Center` promenite izvor, prijavite se sa Github-om, izaberite forkovani repozitorijum i kliknite na `Save`.
|
||||
|
||||
Kao u prethodnom slučaju, prijavljivanje na SCM portal ili prijavljivanje putem FTP-a omogućava da se u `/wwwroot` vidi kompresovani fajl `output.tar.gz` koji sadrži kod web aplikacije.
|
||||
Kao u prethodnom slučaju, prijavljivanjem na SCM portal ili prijavljivanjem putem FTP-a moguće je videti u `/wwwroot` kompresovani fajl `output.tar.gz` koji sadrži kod web aplikacije.
|
||||
|
||||
> [!TIP]
|
||||
> Samo povezivanje putem FTP-a i modifikovanje fajla `output.tar.gz` i ponovo pokretanje implementacije nije dovoljno da se promeni kod koji izvršava web aplikacija.
|
||||
|
||||
Reference in New Issue
Block a user