Az - App Services

Reading time: 14 minutes

tip

Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Jifunze na fanya mazoezi ya Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Support HackTricks

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 VM zinazoshirikiwa
  • Programu katika ngazi za Kawaida na Kitaalamu zinafanya kazi kwenye VM zilizotengwa zinazoshirikiwa tu na programu katika mpango sawa 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 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 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.
  • Programu ya Wavuti + Hifadhidata: 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.
  • Konteina: Inawezekana kupeleka konteina kwa App Service kwa kuashiria URL ya konteina 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.
  • Mitandao: Inaweza kuwa inapatikana hadharani au inapatikana tu kupitia mwisho wa faragha kutoka VNet.

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 Uhamishaji 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 linahitajika. 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 mwisho wa 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 konteina 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 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 zinazochukua 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 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

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 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

Az - App Services Privesc

Mifano ya kuunda Programu za Mtandao

Python kutoka kwa eneo

Hii tutorial inategemea ile kutoka https://learn.microsoft.com/en-us/azure/app-service/quickstart-python.

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 lango la SCM au kuingia kupitia FTP inawezekana kuona katika /wwwroot faili iliyo na muundo 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 hazina ya Github.

  1. Fork hazina msdocs-python-flask-webapp-quickstart katika akaunti yako ya Github.
  2. Unda Web App mpya ya python katika Azure.
  3. Katika Kituo cha Utekelezaji, badilisha chanzo, ingia na Github, chagua hazina iliyoforked na bonyeza Hifadhi.

Kama katika kesi ya awali, kuingia kwenye lango la SCM au kuingia kupitia FTP inawezekana kuona katika /wwwroot faili iliyo na muundo output.tar.gz ambayo ina msimbo wa webapp.

tip

Kuungana tu kupitia FTP na kubadilisha faili output.tar.gz na kuanzisha tena utekelezaji haitoshi kubadilisha msimbo unaotekelezwa na webapp.

Kuinua Haki

Az - App Services Privesc

Marejeleo

tip

Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Jifunze na fanya mazoezi ya Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Support HackTricks