18 KiB
Az - App Services
{{#include ../../../banners/hacktricks-training.md}}
App Service Basic Information
Azure App Services inaruhusu waendelezaji kuunda, kupeleka, na kupanua programu za wavuti, nyuma ya programu za simu, na APIs bila shida. Inasaidia lugha nyingi za programu na inajumuisha zana na huduma mbalimbali za Azure kwa ajili ya kuboresha utendaji na usimamizi.
Kila programu inafanya kazi ndani ya sandbox lakini kutengwa kunategemea mipango ya App Service:
- Programu katika ngazi za Bure na Kushiriki zinafanya kazi kwenye VM zinazoshirikiwa
- Programu katika ngazi za Kawaida na Kitaalamu zinafanya kazi kwenye VM zilizotengwa zinazoshirikiwa tu na programu katika mpango huo wa App Service.
- Ngazi za Kutengwa zinafanya kazi kwenye VM zilizotengwa kwenye mitandao halisi iliyotengwa, kuboresha kutengwa kwa programu.
Warning
Kumbuka kwamba hakuna ya kutengwa hizo inaweza kuzuia udhaifu mwingine wa kawaida wa wavuti (kama vile kupakia faili, au sindano). Na ikiwa utambulisho wa usimamizi unatumika, inaweza kuwa na uwezo wa kuinua mamlaka kwao.
Programu zina baadhi ya mipangilio ya kuvutia:
- Daima On: Inahakikisha kwamba programu inafanya kazi kila wakati. Ikiwa haijawashwa, programu itasimama kufanya kazi baada ya dakika 20 za kutokuwa na shughuli na itaanza tena wakati ombi litakapopokelewa.
- Hii ni muhimu ikiwa una kazi ya wavuti inayohitaji kufanya kazi bila kukatika kwani kazi ya wavuti itasimama ikiwa programu itasimama.
- SSH: Ikiwa imewashwa, mtumiaji mwenye ruhusa ya kutosha anaweza kuungana na programu kwa kutumia SSH.
- Kusafisha: Ikiwa imewashwa, mtumiaji mwenye ruhusa ya kutosha anaweza kusafisha programu. Hata hivyo, hii inazuiliwa kiotomatiki kila masaa 48.
- Web App + Database: Kihifadhi cha wavuti kinaruhusu kuunda Programu yenye hifadhidata. Katika kesi hii inawezekana kuchagua hifadhidata ya kutumia (SQLAzure, PostgreSQL, MySQL, MongoDB) na pia inaruhusu kuunda Cache ya Azure kwa Redis.
- URL inayoshikilia taarifa za kuingia kwa hifadhidata na Redis itahifadhiwa katika appsettings.
- Container: Inawezekana kupeleka kontena kwa App Service kwa kuashiria URL ya kontena na taarifa za kuingia.
- Mounts: Inawezekana kuunda mounts 5 kutoka kwa akaunti za Hifadhi ikiwa ni pamoja na Azure Blob (Soma tu) au Azure Files. Mipangilio itahifadhi funguo za ufikiaji juu ya Akaunti ya Hifadhi.
Basic Authentication
Wakati wa kuunda programu ya wavuti (na kazi ya Azure kwa kawaida) inawezekana kuashiria ikiwa unataka Mamlaka ya Msingi iwe imewashwa (imezimwa kwa chaguo-msingi). Hii kimsingi inawezesha SCM (Meneja wa Udhibiti wa Chanzo) na FTP (Protokali ya Uhamishaji wa Faili) kwa programu ili iwezekane kupeleka programu kwa kutumia teknolojia hizo.
Ili kufikia seva za SCM na FTP, jina la mtumiaji na nenosiri inahitajika. Kwa hivyo, Azure inatoa baadhi ya APIs kupata URL za majukwaa haya na taarifa za kuingia.
Seva ya FTP haina uchawi maalum, kwa URL halali, jina la mtumiaji na nenosiri inawezekana kuungana na kupata ruhusa za kusoma na kuandika juu ya mazingira ya App.
SCM
Inawezekana kuungana na SCM kwa kutumia kivinjari cha wavuti katika https://<SMC-URL>/BasicAuth na kuangalia faili zote na uhamasishaji huko.
Kudu
Kudu ni jukwaa ambalo linasimamia SCM na kiolesura cha wavuti na API ili kusimamia App Service, na inatoa uhamasishaji wa msingi wa Git, kusafisha kwa mbali, na uwezo wa usimamizi wa faili. Inapatikana kupitia URL ya SCM iliyofafanuliwa katika programu ya wavuti.
Kumbuka kwamba toleo la Kudu linalotumiwa na App Services na na Function Apps ni tofauti, toleo la Function apps likiwa na mipaka zaidi.
Baadhi ya maeneo ya kuvutia unaweza kupata katika Kudu ni:
/BasicAuth: Unahitaji kufikia njia hii ili kuingia ndani ya Kudu./DebugConsole: Kihifadhi kinachokuruhusu kutekeleza amri katika mazingira ambapo Kudu inafanya kazi.- Kumbuka kwamba mazingira haya hayana ufikiaji wa huduma ya metadata ili kupata tokeni.
/webssh/host: Mteja wa SSH wa wavuti unaokuruhusu kuungana ndani ya kontena ambapo programu inafanya kazi.- Mazingira haya yana ufikiaji wa huduma ya metadata ili kupata tokeni kutoka kwa utambulisho wa usimamizi uliotolewa.
/Env: Pata taarifa kuhusu mfumo, mipangilio ya programu, mabadiliko ya mazingira, nyuzi za muunganisho na vichwa vya HTTP./wwwroot/: Saraka ya mzizi ya programu ya wavuti. Unaweza kupakua faili zote kutoka hapa.
Zaidi ya hayo, Kudu ilikuwa ya wazi katika https://github.com/projectkudu/kudu lakini mradi huo ulisitishwa na kulinganisha tabia ya Kudu ya sasa katika Azure na ile ya zamani inawezekana kuona kwamba mambo kadhaa tayari yamebadilika.
Sources
App Services inaruhusu kupakia msimbo kama faili ya zip kwa chaguo-msingi, lakini pia inaruhusu kuungana na huduma ya upande wa tatu na kupata msimbo kutoka huko.
- Vyanzo vya upande wa tatu vinavyoungwa mkono kwa sasa ni Github na Bitbucket.
- Unaweza kupata tokeni za uthibitishaji kwa kukimbia
az rest --url "https://management.azure.com/providers/Microsoft.Web/sourcecontrols?api-version=2024-04-01" - Azure kwa chaguo-msingi itaanzisha Github Action ili kupeleka msimbo kwa App Service kila wakati msimbo unaposasishwa.
- Pia inawezekana kuashiria hifadhi ya git ya mbali (ikiwa na jina la mtumiaji na nenosiri) ili kupata msimbo kutoka huko.
- Unaweza kupata taarifa za kuingia kwa hifadhi ya mbali kwa kukimbia
az webapp deployment source show --name <app-name> --resource-group <res-group>auaz 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" - Pia inawezekana kutumia Azure Repository.
- Pia inawezekana kuunda hifadhi ya git ya ndani.
- Unaweza kupata URL ya hifadhi ya git kwa
az webapp deployment source show --name <app-name> --resource-group <res-group>na itakuwa URL ya SCM ya programu. - Ili kuikopi, utahitaji taarifa za kuingia za SCM ambazo unaweza kupata kwa
az webapp deployment list-publishing-profiles --resource-group <res-group> -n <name>
Webjobs
Azure WebJobs ni kazi za nyuma zinazofanya kazi katika mazingira ya Azure App Service. Zinawaruhusu waendelezaji kutekeleza skripti au programu pamoja na programu zao za wavuti, na kufanya iwe rahisi kushughulikia shughuli zisizo za kawaida au zinazohitaji muda kama vile usindikaji wa faili, usimamizi wa data, au kazi za ratiba. Kuna aina 2 za kazi za wavuti:
- Endelea: Inafanya kazi bila kikomo katika mzunguko na inasababishwa mara tu inapotengenezwa. Ni bora kwa kazi zinazohitaji usindikaji wa mara kwa mara. Hata hivyo, ikiwa programu itasimama kufanya kazi kwa sababu Daima On imezimwa na haijapokea ombi katika dakika 20 zilizopita, kazi ya wavuti pia itasimama.
- Iliyosababishwa: Inafanya kazi kwa ombi au kulingana na ratiba. Inafaa zaidi kwa kazi za mara kwa mara, kama vile masasisho ya data ya kundi au taratibu za matengenezo.
Webjobs ni za kuvutia sana kutoka kwa mtazamo wa washambuliaji kwani zinaweza kutumika kutekeleza msimbo katika mazingira na kuinua mamlaka kwa utambulisho wa usimamizi uliounganishwa.
Zaidi ya hayo, kila wakati ni muhimu kuangalia kumbukumbu zinazozalishwa na Webjobs kwani zinaweza kuwa na taarifa nyeti.
Slots
Azure App Service Slots zinatumika kupeleka matoleo tofauti ya programu kwa App Service moja. Hii inaruhusu waendelezaji kujaribu vipengele au mabadiliko mapya katika mazingira tofauti kabla ya kuyapeleka katika mazingira ya uzalishaji.
Zaidi ya hayo, inawezekana kuelekeza asilimia ya trafiki kwa slot maalum, ambayo ni muhimu kwa majaribio ya A/B, na kwa madhumuni ya nyuma.
Azure Function Apps
Kimsingi Azure Function apps ni sehemu ya Azure App Service katika kihifadhi cha wavuti na ikiwa utaenda kwenye kihifadhi cha wavuti na kuorodhesha huduma zote za programu au kutekeleza az webapp list katika az cli utaweza kuona Function apps pia zimeorodheshwa huko.
Kwa hivyo, huduma zote mbili kwa kweli zina mipangilio, vipengele na chaguo sawa katika az cli, ingawa zinaweza kuziweka kidogo tofauti (kama vile thamani za chaguo-msingi za appsettings au matumizi ya Akaunti ya Hifadhi katika Function apps).
Enumeration
{{#tabs }} {{#tab name="az" }}
# 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>
{{#endtab }}
{{#tab name="Az Powershell" }}
Get-Command -Module Az.Websites
# Get App Services and Function Apps
Get-AzWebApp
# Get only App Services
Get-AzWebApp | ?{$_.Kind -notmatch "functionapp"}
# Retrieves details of a specific App Service Environment in the specified resource group.
Get-AzAppServiceEnvironment -ResourceGroupName <ResourceGroupName> -Name <Name>
# Retrieves the access restriction configuration for a specified Web App.
Get-AzWebAppAccessRestrictionConfig -ResourceGroupName <ResourceGroupName> -Name <Name>
# Retrieves the SSL certificates for a specified resource group.
Get-AzWebAppCertificate -ResourceGroupName <ResourceGroupName>
# Retrieves the continuous deployment URL for a containerized Web App.
Get-AzWebAppContainerContinuousDeploymentUrl -ResourceGroupName <ResourceGroupName> -Name <Name>
# Retrieves the list of continuous WebJobs for a specified Web App.
Get-AzWebAppWebJob -ResourceGroupName <ResourceGroupName> -AppName <AppName>
# Retrieves the list of triggered WebJobs for a specified Web App.
Get-AzWebAppTriggeredWebJob -ResourceGroupName <ResourceGroupName> -AppName <AppName>
# Retrieves details of a deleted Web App in the specified resource group.
Get-AzDeletedWebApp -ResourceGroupName <ResourceGroupName> -Name <Name>
# Retrieves a list of snapshots for a specified Web App.
Get-AzWebAppSnapshot -ResourceGroupName <ResourceGroupName> -Name <Name>
# Retrieves the history of a specific triggered WebJob for a Web App.
Get-AzWebAppTriggeredWebJobHistory -ResourceGroupName <ResourceGroupName> -AppName <AppName> -Name <Name>
# Retrieves information about deployment slots for a specified Web App.
Get-AzWebAppSlot -ResourceGroupName <ResourceGroupName> -Name <Name>
# Retrieves the continuous WebJobs for a specific deployment slot of a Web App.
Get-AzWebAppSlotWebJob -ResourceGroupName <ResourceGroupName> -AppName <AppName> -SlotName <SlotName>
# Retrieves the triggered WebJobs for a specific deployment slot of a Web App.
Get-AzWebAppSlotTriggeredWebJob -ResourceGroupName <ResourceGroupName> -AppName <AppName> -SlotName <SlotName>
# Retrieves the history of a specific triggered WebJob for a deployment slot of a Web App.
Get-AzWebAppSlotTriggeredWebJobHistory -ResourceGroupName <ResourceGroupName> -AppName <AppName> -SlotName <SlotName> -Name <Name>
# Retrieves the continuous WebJobs for a Web App.
Get-AzWebAppContinuousWebJob -ResourceGroupName <ResourceGroupName> -AppName <AppName>
# Retrieves the continuous WebJobs for a specific deployment slot of a Web App.
Get-AzWebAppSlotContinuousWebJob -ResourceGroupName <ResourceGroupName> -AppName <AppName> -SlotName <SlotName>
# Retrieves the traffic routing rules for a Web App.
Get-AzWebAppTrafficRouting -ResourceGroupName <ResourceGroupName> -WebAppName <WebAppName> -RuleName <RuleName>
# Retrieves details of a specific backup for a Web App.
Get-AzWebAppBackup -ResourceGroupName <ResourceGroupName> -Name <Name> -BackupId <BackupId>
# Retrieves the backup configuration for a Web App.
Get-AzWebAppBackupConfiguration -ResourceGroupName <ResourceGroupName> -Name <Name>
# Retrieves the list of all backups for a Web App.
Get-AzWebAppBackupList -ResourceGroupName <ResourceGroupName> -Name <Name>
{{#endtab }}
{{#tab name="az pata yote" }}
#!/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 }}
{{#ref}} ../az-privilege-escalation/az-app-services-privesc.md {{#endref}}
Mifano ya kuunda Web Apps
Python kutoka kwa eneo
Hii tutorial inategemea ile kutoka 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
Kuingia kwenye lango la SCM au kuingia kupitia FTP inawezekana kuona katika /wwwroot faili iliyo na muundo wa output.tar.gz ambayo ina msimbo wa webapp.
Tip
Kuungana tu kupitia FTP na kubadilisha faili
output.tar.gzhaitoshi kubadilisha msimbo unaotekelezwa na webapp.
Mshambuliaji anaweza kupakua faili hii, kuibadilisha, na kuipakia tena ili kutekeleza msimbo wowote katika webapp.
Python kutoka Github
Mafunzo haya yanategemea yale ya awali lakini yanatumia hifadhi ya Github.
- Fork hifadhi msdocs-python-flask-webapp-quickstart katika akaunti yako ya Github.
- Unda Web App mpya ya python katika Azure.
- Katika
Deployment Centerbadilisha chanzo, ingia na Github, chagua hifadhi iliyoforked na bonyezaSave.
Kama katika kesi ya awali, kuingia kwenye lango la SCM au kuingia kupitia FTP inawezekana kuona katika /wwwroot faili iliyo na muundo wa output.tar.gz ambayo ina msimbo wa webapp.
Tip
Kuungana tu kupitia FTP na kubadilisha faili
output.tar.gzna kuanzisha tena uanzishaji haitoshi kubadilisha msimbo unaotekelezwa na webapp.
Privilege Escalation
{{#ref}} ../az-privilege-escalation/az-app-services-privesc.md {{#endref}}
References
- https://learn.microsoft.com/en-in/azure/app-service/overview
- https://learn.microsoft.com/en-us/azure/app-service/overview-hosting-plans
{{#include ../../../banners/hacktricks-training.md}}