Translated ['src/pentesting-cloud/azure-security/az-services/az-app-serv

This commit is contained in:
Translator
2025-01-04 00:42:01 +00:00
parent b59c4346a0
commit 0059aed198
2 changed files with 287 additions and 1 deletions

View File

@@ -0,0 +1,286 @@
# 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 za programu za simu, na APIs bila shida**. Inasaidia lugha nyingi za programu na inajumuisha zana na huduma mbalimbali za Azure kwa ajili ya kuboresha kazi 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 **VMs zinazoshirikiwa**
- Programu katika ngazi za Kawaida na Premium zinafanya kazi kwenye **VMs zilizotengwa zinazoshirikiwa tu na programu** katika mpango huo wa App Service.
- Ngazi za Kutengwa zinafanya kazi kwenye **VMs zilizotengwa kwenye mitandao halisi iliyotengwa**, kuboresha kutengwa kwa programu.
> [!WARNING]
> Kumbuka kwamba **hakuna** ya kutengwa hizo **inaepusha** 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.
- **Urekebishaji**: Ikiwa imewashwa, mtumiaji mwenye ruhusa ya kutosha anaweza kurekebisha 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 **Uthibitishaji wa Msingi kuwashwa** (imezimwa kwa default). Hii kimsingi **inawasha SCM (Meneja wa Udhibiti wa Chanzo) na FTP (Protokali ya Uhamasishaji wa Faili)** kwa ajili ya 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, urekebishaji wa 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 kuyapata 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/`: Katalogi 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](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 default, 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 default 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 kwenye repo ya mbali kwa kukimbia `az webapp deployment source show --name <app-name> --resource-group <res-group>` au `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"`
- Pia inawezekana kutumia **Azure Repository**.
- Pia inawezekana kuunda **hifadhi ya git ya ndani**.
- Unaweza kupata URL ya repo 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 za muda mrefu kama 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 katika mazingira tofauti kabla ya kuyapeleka kwenye 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 zikiwa zimeorodheshwa huko**.
Kwa hivyo, huduma zote mbili kwa kweli zina **mipangilio, vipengele na chaguzi sawa katika az cli**, ingawa zinaweza kuzisakinisha kidogo tofauti (kama vile thamani za default za appsettings au matumizi ya Akaunti ya Hifadhi katika Function apps).
## 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 (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 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 }}
#### Pata akreditivu na upate ufikiaji wa msimbo wa wavuti
```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}}
## Mifano ya kuunda Web Apps
### Python kutoka kwa eneo la ndani
Hii tutorial inategemea ile kutoka [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
```
Kuingia kwenye portal ya 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.gz` haitoshi 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.
1. Fork hifadhi msdocs-python-flask-webapp-quickstart katika akaunti yako ya Github.
2. Unda Web App mpya ya python katika Azure.
3. Katika `Deployment Center` badilisha chanzo, ingia na Github, chagua hifadhi iliyoforked na bonyeza `Save`.
Kama katika kesi ya awali, kuingia kwenye portal ya 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.gz` na kuanzisha tena uhamasishaji 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-in/azure/app-service/overview)
- [https://learn.microsoft.com/en-us/azure/app-service/overview-hosting-plans](https://learn.microsoft.com/en-us/azure/app-service/overview-hosting-plans)
{{#include ../../../banners/hacktricks-training.md}}