Az - App Services
Tip
Leer & oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer & oefen Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subscription plans!
- Sluit aan by die đŹ Discord group of die telegram group of volg ons op Twitter đŠ @hacktricks_live.
- Deel hacking tricks deur PRs in te dien by die HackTricks en HackTricks Cloud github repos.
App Service Basiese Inligting
Azure App Services stel ontwikkelaars in staat om webtoepassings, mobiele toepassings agtergronde, en APIâs naatloos te bou, te ontplooi en te skaal. Dit ondersteun verskeie programmeertale en integreer met verskeie Azure gereedskap en dienste vir verbeterde funksionaliteit en bestuur.
Elke toepassing loop binne ân sandbox, maar isolasie hang af van App Service planne:
- Toepassings in Gratis en Gedeelde vlakke loop op gedeelde VMâs
- Toepassings in Standaard en Premium vlakke loop op toegewyde VMâs wat slegs deur toepassings in dieselfde App Service plan gedeel word.
- Die Isolated vlakke loop op toegewyde VMâs op toegewyde virtuele netwerke, wat die isolasie van die toepassings verbeter.
Warning
Let daarop dat geen van daardie isolasies voorkom dat ander algemene web kwesbaarhede (soos lĂȘeroplaai, of inspuitings) voorkom nie. En as ân bestuursidentiteit gebruik word, kan dit in staat wees om privileges na hulle te eskaleer.
Toepassings het ân paar interessante konfigurasies:
- Always On: Verseker dat die toepassing altyd loop. As dit nie geaktiveer is nie, sal die toepassing stop loop na 20 minute van inaktiwiteit en weer begin wanneer ân versoek ontvang word.
- Dit is noodsaaklik as jy ân webjob het wat deurlopend moet loop, aangesien die webjob sal stop as die toepassing stop.
- SSH: As geaktiveer, kan ân gebruiker met genoeg toestemming aan die toepassing koppel met SSH.
- Debugging: As geaktiveer, kan ân gebruiker met genoeg toestemming die toepassing debugeer. Dit is egter outomaties elke 48 uur gedeaktiveer.
- Web App + Databasis: Die webkonsol laat jou toe om ân Toepassing met ân databasis te skep. In hierdie geval is dit moontlik om die databasis te kies om te gebruik (SQLAzure, PostgreSQL, MySQL, MongoDB) en dit laat jou ook toe om ân Azure Cache vir Redis te skep.
- Die URL wat die geloofsbriewe vir die databasis en Redis bevat, sal in die appsettings gestoor word.
- Container: Dit is moontlik om ân houer na die App Service te ontplooi deur die URL van die houer en die geloofsbriewe om toegang te verkry aan te dui.
- Mounts: Dit is moontlik om 5 mounts van Stoor rekeninge te skep, wat Azure Blob (Slegs Lees) of Azure Files is. Die konfigurasie sal die toegangsleutel oor die Stoor Rekening stoor.
- Netwerking: Kan publiek beskikbaar wees of slegs toeganklike private eindpunte vanaf ân VNet.
Basiese Verifikasie
Wanneer ân webtoepassing (en ân Azure funksie gewoonlik) geskep word, is dit moontlik om aan te dui of jy wil hĂȘ Basiese Verifikasie moet geaktiveer wees (standaard gedeaktiveer). Dit aktiveer SCM (Source Control Manager) en FTP (File Transfer Protocol) vir die toepassing sodat dit moontlik sal wees om die toepassing met hierdie tegnologieĂ« te ontplooi.
Om toegang tot die SCM en die FTP bedieners te verkry, is ân gebruikersnaam en wagwoord nodig. Daarom bied Azure ân paar APIâs om die URLâs na hierdie platforms en die geloofsbriewe te verkry.
Die FTP bediener het geen spesiale magie nie, net met die geldige URL, gebruikersnaam en wagwoord is dit moontlik om te koppel en lees- en skryfrechten oor die App omgewing te verkry.
Die SCM
Dit is moontlik om aan die SCM te koppel met ân webblaaier in https://<SMC-URL>/BasicAuth en al die lĂȘers en ontplooiings daar te kontroleer.
Kudu
Kudu is die platform wat sowel die SCM as ân web- en API-koppelvlak bestuur om ân App Service te bestuur, en bied Git-gebaseerde ontplooiings, afstandsdebuginstrumente, en lĂȘerbestuursvermoĂ«ns. Dit is toeganklik deur die SCM URL wat in die webtoepassing gedefinieer is.
Let daarop dat die Kudu weergawes wat deur App Services en deur Funksie Toepassings gebruik word, verskillend is, met die weergawe van die Funksie toepassings baie meer beperk.
Sommige interessante eindpunte wat jy in Kudu kan vind, is:
/BasicAuth: Jy moet hierdie pad toegang om binne Kudu aan te meld./DebugConsole: ân Konsol wat jou toelaat om opdragte in die omgewing waar Kudu loop uit te voer.- Let daarop dat hierdie omgewing nie toegang het tot die metadata diens om tokens te verkry nie.
/webssh/host: ân Web-gebaseerde SSH-kliĂ«nt wat jou toelaat om binne die houer waar die toepassing loop te koppel.- Hierdie omgewing het toegang tot die metadata diens om tokens van die toegewyde bestuurde identiteite te verkry.
/Env: Kry inligting oor die stelsel, app instellings, omgewing veranderlikes, verbinding stringe en HTTP koppe./wwwroot/: Die wortelgids van die webtoepassing. Jy kan al die lĂȘers hier aflaai.
Boonop was Kudu eens opensource in https://github.com/projectkudu/kudu maar die projek is gedeaktiveer en deur die gedrag van die huidige Kudu in Azure met die ou een te vergelyk, is dit moontlik om te sien dat verskeie dinge reeds verander het.
Bronne
App Services laat toe om die kode as ân zip-lĂȘer standaard op te laai, maar dit laat ook toe om met ân derdeparty diens te verbind en die kode daarvandaan te verkry.
- Die tans ondersteunde derdeparty bronne is Github en Bitbucket.
- Jy kan die verifikasietokens verkry deur
az rest --url "https://management.azure.com/providers/Microsoft.Web/sourcecontrols?api-version=2024-04-01"te loop. - Azure sal standaard ân Github Aksie opstel om die kode na die App Service te ontplooi elke keer as die kode opgedateer word.
- Dit is ook moontlik om ân afgeleĂ« git-repo (met gebruikersnaam en wagwoord) aan te dui om die kode daarvandaan te verkry.
- Jy kan die geloofsbriewe na die afgeleë repo verkry deur
az webapp deployment source show --name <app-name> --resource-group <res-group>ofaz 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". - Dit is ook moontlik om ân Azure Repository te gebruik.
- Dit is ook moontlik om ân lokale git-repo te konfigureer.
- Jy kan die URL van die git-repo verkry met
az webapp deployment source show --name <app-name> --resource-group <res-group>en dit gaan die SCM URL van die toepassing wees. - Om dit te kloon, sal jy die SCM geloofsbriewe nodig hĂȘ wat jy kan verkry met
az webapp deployment list-publishing-profiles --resource-group <res-group> -n <name>.
Webjobs
Azure WebJobs is agtergrondtake wat in die Azure App Service omgewing loop. Dit stel ontwikkelaars in staat om skripte of programme saam met hul webtoepassings uit te voer, wat dit makliker maak om asynchrone of tydsintensiewe operasies soos lĂȘerverwerking, datahantering, of geskeduleerde take te hanteer. Daar is 2 tipes webjobs:
- Deurlopend: Loop eindeloos in ân lus en word geaktiveer sodra dit geskep word. Dit is ideaal vir take wat konstante verwerking vereis. As die toepassing egter stop loop omdat Always On gedeaktiveer is en dit nie ân versoek in die laaste 20 minute ontvang het nie, sal die webjob ook stop.
- Geaktiveer: Loop op aanvraag of gebaseer op ân skedule. Dit is die beste geskik vir periodieke take, soos batch data-opdaterings of onderhoudsroetines.
Webjobs is baie interessant vanuit ân aanvallers perspektief, aangesien dit gebruik kan word om kode in die omgewing uit te voer en privileges na die aangehegte bestuurde identiteite te eskaleer.
Boonop is dit altyd interessant om die logs wat deur die Webjobs gegenereer word, te kontroleer, aangesien dit sensitiewe inligting kan bevat.
Slots
Azure App Service Slots word gebruik om verskillende weergawes van die toepassing na dieselfde App Service te ontplooi. Dit stel ontwikkelaars in staat om nuwe funksies of veranderinge in ân aparte omgewing te toets voordat hulle dit na die produksie omgewing ontplooi.
Boonop is dit moontlik om ân persentasie van die verkeer na ân spesifieke slot te lei, wat nuttig is vir A/B toetsing, en vir agterdeurdoeleindes.
Azure Funksie Toepassings
Basies Azure Funksie toepassings is ân substel van Azure App Service in die webkonsol en as jy na die webkonsol gaan en al die app dienste lys of az webapp list in az cli uitvoer, sal jy in staat wees om die Funksie toepassings ook daar gelys te sien.
Daarom het beide dienste eintlik meestal die dieselfde konfigurasies, funksies en opsies in die az cli, alhoewel hulle dit dalk ân bietjie anders konfigureer (soos standaardwaardes van appsettings of die gebruik van ân Stoor Rekening in die Funksie toepassings).
Enumerasie
# 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 (contains access key)
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>
# 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>
# Get configured SMC users by your account
az webapp deployment user show
## If any user is created, the username should appear in the "publishingUserName" field
Voorbeelde om Web Apps te genereer
Python van plaaslik
Hierdie tutoriaal is gebaseer op die een van https://learn.microsoft.com/en-us/azure/app-service/quickstart-python.
# 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
Inlog in die SCM-portaal of inlog via FTP, dit is moontlik om in /wwwroot die gecomprimeerde lĂȘer output.tar.gz te sien wat die kode van die webapp bevat.
Tip
Net om via FTP te verbind en die lĂȘer
output.tar.gzte wysig, is nie genoeg om die kode wat deur die webapp uitgevoer word, te verander nie.
ân Aanvaller kan hierdie lĂȘer aflaai, dit wysig en weer oplaai om arbitrĂȘre kode in die webapp uit te voer.
Python van Github
Hierdie tutoriaal is gebaseer op die vorige een, maar gebruik ân Github-bewaarplek.
- Fork die repo msdocs-python-flask-webapp-quickstart in jou Github-rekening.
- Skep ân nuwe python Web App in Azure.
- In
Deployment Centerverander die bron, log in met Github, kies die geforkte repo en klikSave.
Soos in die vorige geval, inlog in die SCM-portaal of inlog via FTP, dit is moontlik om in /wwwroot die gecomprimeerde lĂȘer output.tar.gz te sien wat die kode van die webapp bevat.
Tip
Net om via FTP te verbind en die lĂȘer
output.tar.gzte wysig en ân implementering weer te aktiveer, is nie genoeg om die kode wat deur die webapp uitgevoer word, te verander nie.
Privilege Escalation
References
- https://learn.microsoft.com/en-in/azure/app-service/overview
- https://learn.microsoft.com/en-us/azure/app-service/overview-hosting-plans
Tip
Leer & oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer & oefen Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subscription plans!
- Sluit aan by die đŹ Discord group of die telegram group of volg ons op Twitter đŠ @hacktricks_live.
- Deel hacking tricks deur PRs in te dien by die HackTricks en HackTricks Cloud github repos.
HackTricks Cloud

