# Az - Logic Apps

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

## Osnovne Informacije

Azure Logic Apps je usluga zasnovana na oblaku koju pruža Microsoft Azure koja omogućava programerima da **kreiraju i pokreću radne tokove koji integrišu različite usluge**, izvore podataka i aplikacije. Ovi radni tokovi su dizajnirani da **automatizuju poslovne procese**, orkestriraju zadatke i obavljaju integracije podataka između različitih platformi.

Logic Apps pruža vizuelni dizajner za kreiranje radnih tokova sa **širokim spektrom unapred napravljenih konektora**, što olakšava povezivanje i interakciju sa raznim uslugama, kao što su Office 365, Dynamics CRM, Salesforce i mnoge druge. Takođe možete kreirati prilagođene konektore za vaše specifične potrebe.

Kada kreirate Logic App, morate ili kreirati ili povezati eksterni nalog za skladištenje koji čuva stanje radnog toka, istoriju izvršavanja i artefakte. Ovo skladište može biti konfigurisano sa dijagnostičkim podešavanjima za praćenje i može biti zaštićeno mrežnim pristupnim ograničenjima ili integrisano u virtuelnu mrežu kako bi se kontrolisao ulazni i izlazni saobraćaj.

### Primeri

- **Automatizacija Podatkovnih Tokova**: Logic Apps mogu automatizovati **procese prenosa i transformacije podataka** u kombinaciji sa Azure Data Factory. Ovo je korisno za kreiranje skalabilnih i pouzdanih podatkovnih tokova koji premeštaju i transformišu podatke između različitih skladišta podataka, kao što su Azure SQL Database i Azure Blob Storage, pomažući u analitici i poslovnoj inteligenciji.
- **Integracija sa Azure Funkcijama**: Logic Apps mogu raditi zajedno sa Azure Funkcijama za razvoj **složenih, događajem pokretanih aplikacija koje se skaliraju po potrebi** i besprekorno se integrišu sa drugim Azure uslugama. Primer upotrebe je korišćenje Logic App-a za pokretanje Azure Funkcije kao odgovor na određene događaje, kao što su promene u Azure nalogu za skladištenje, omogućavajući dinamičku obradu podataka.

### Vizualizacija LogicAPP-a

Moguće je prikazati LogicApp sa grafikom:

<figure><img src="../../../images/image (197).png" alt=""><figcaption></figcaption></figure>

ili proveriti kod u sekciji "**Prikaz koda Logic app-a**".

### SSRF Zaštita

Čak i ako pronađete **Logic App ranjiv na SSRF**, nećete moći da pristupite kredencijalima iz metapodataka jer Logic Apps to ne dozvoljava.

Na primer, nešto poput ovoga neće vratiti token:
```bash
# The URL belongs to a Logic App vulenrable to SSRF
curl -XPOST 'https://prod-44.westus.logic.azure.com:443/workflows/2d8de4be6e974123adf0b98159966644/triggers/manual/paths/invoke?api-version=2016-10-01&sp=%2Ftriggers%2Fmanual%2Frun&sv=1.0&sig=_8_oqqsCXc0u2c7hNjtSZmT0uM4Xi3hktw6Uze0O34s' -d '{"url": "http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://management.azure.com/"}' -H "Content-type: application/json" -v
```
### Opcije hostovanja

Postoji nekoliko opcija hostovanja:

* **Potrošnja**
- **Višekorisnički**: pruža deljene računske resurse, funkcioniše u javnom oblaku i prati model cena po operaciji. Ovo je idealno za lagane i ekonomične radne opterećenja. Ovo implementira "Jedan Tok".
* **Standard**
- **Plan usluge radnog toka**: posvećeni računski resursi sa VNET integracijom za umrežavanje i naplaćuje se po instanci plana usluge radnog toka. Pogodno je za zahtevnija radna opterećenja koja zahtevaju veću kontrolu.
- **Okruženje usluge aplikacija V3**: posvećeni računski resursi sa potpunom izolacijom i skalabilnošću. Takođe se integriše sa VNET za umrežavanje i koristi model cena zasnovan na instancama usluge aplikacija unutar okruženja.
- **Hibridno**: dizajnirano za lokalnu obradu i podršku za više oblaka. Omogućava korisnički upravljane računske resurse sa lokalnim pristupom mreži i koristi Kubernetes Event-Driven Autoscaling (KEDA). Oslanja se na Okruženje povezane aplikacije kontejnera.

### Ključne karakteristike
- **Skladištenje**: Logic Apps zahteva eksterni Azure Storage nalog za čuvanje stanja radnog toka, istorije izvršenja… i mora biti u istoj grupi resursa kao Logic App.
- **Mrežno povezivanje i bezbednost**: Logic Apps mogu biti konfigurisane sa javnim ili privatnim pristupom. Po defaultu, aplikacija je otvorena za internet, ali može biti integrisana sa Azure Virtual Network za izolovanu povezanost.
- **Uvid u aplikacije**: Upravljanje performansama aplikacija (APM) putem Azure Monitor Application Insights može biti omogućeno za praćenje performansi, otkrivanje anomalija i pružanje analitike.
- **Kontrola pristupa**: Logic Apps podržavaju identitete koje upravlja sistem i identitete koje upravlja korisnik.

### "Jedan" Tokovi

**Tok** je strukturisana sekvenca automatizovanih koraka ili zadataka koji izvršavaju određeni proces ili cilj. Definiše kako različite akcije, uslovi i odluke međusobno deluju kako bi se postigao željeni ishod, pojednostavljujući operacije i smanjujući manuelni trud. Tokovi mogu integrisati više sistema, pokretati događaje i pravila, osiguravajući doslednost i efikasnost u procesima.

Azure Logic Apps pruža funkcionalnost **kreiranja jednog toka bez potrebe za Logic App** samim.

Svaki tok ima različite **okidače**. Ovi okidači su koraci koje tok prati. Svaki okidač ima svoje parametre koji se mogu razlikovati u zavisnosti od tipa okidača:
- Ime veze
- **Tip autentifikacije** koji može biti, Pristupni ključ, Microsoft Entra ID, autentifikacija integrisanog servisnog principa i Logic Apps upravljani identitet.

Okidači takođe imaju različite postavke:
- Validacija šeme: Osigurava da dolazni podaci prate unapred definisanu strukturu.
- Kontrola konkurentnosti: Ograničava broj paralelnih izvršenja.
- Uslovi okidača: uslovi koji moraju biti ispunjeni pre nego što se okidač aktivira.
- Mrežno povezivanje: Konfiguriše veličinu paketa za prenos podataka i omogućava suzbijanje zaglavlja radnog toka u odgovorima.
- **Bezbednost**: Omogućava **Sigurne Ulaze/Izlaze za skrivanje** osetljivih podataka u logovima i izlazima.

**Postavke i API veze:**

Tok ima različite postavke kao što su:
- Dozvoljene ulazne IP adrese: Ova postavka vam omogućava da ograničite ko može da pokrene ili započne vašu Logic App. Opcije su Svaka IP, Samo druge Logic Apps i Specifični opsezi IP adresa.
- Integracioni nalog: Ovde možete povezati svoju Logic App sa Integracionim nalogom.
- Visok protok: Ova postavka omogućava vašoj Logic App da brzo obradi više zahteva.
- Zadržavanje istorije izvršenja: koliko dugo se čuva istorija izvršenja vaše Logic App.

Možete videti različite API veze koje tok ima. Unutar svake od ovih veza imaju različite osobine i mogućnost uređivanja API veze gde se tip autentifikacije može promeniti.

**Istorija i verzije:**
Ima opciju pristupa **istoriji** različitih izvršenja, prikazuje, Postavke, Izlaz, Parametre i Kod.

Takođe ima opciju pristupa različitim **verzijama** toka, gde možete proveriti kod i promeniti trenutni tok sa starijom verzijom.

**Autorizacija:**
Azure Logic Apps podržavaju **politike autorizacije** sa Entra ID za osiguranje okidača zasnovanih na zahtevima zahtevajući važeći pristupni token. Ovaj token mora uključivati specifične tvrdnje:
- Izdavač (iss) za verifikaciju identiteta provajdera
- Publika (aud) da osigura da je token namenjen za Logic App
- Subjekt (sub) za identifikaciju pozivaoca
- JWT ID (identifikator JSON Web Token-a)
- Prilagođena tvrdnja

Kada se zahtev primi, Logic Apps validira token prema ovim tvrdnjama i omogućava izvršenje samo ako se poklapaju sa konfigurisanim politikama. Ovo se može koristiti za omogućavanje drugom korisniku da pokrene tok ili odbijanje okidača iz drugih izvora, na primer, samo omogućavanje okidača ako dolazi sa https://login.microsoftonline.com/.

**Pristupni ključevi:**
Kada prvi put sačuvate okidač zasnovan na zahtevu, Logic Apps automatski kreira jedinstvenu tačku pristupa sa SAS potpisom (kreiranim iz Pristupnog ključa) koji daje dozvolu za pozivanje toka. Ovaj SAS potpis je ugrađen u URL okidača. Ovaj ključ se može regenerisati i daće novi SAS potpis, ali ključevi se ne mogu listati.

URL za pozivanje sa Pristupnim ključem:

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>

### Enumeracija

{{#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 }}



### Integracioni Nalozi
**Integracioni Nalozi** su funkcija Azure Logic Apps. Integracioni Nalozi se koriste za olakšavanje integracija na nivou preduzeća omogućavanjem naprednih B2B mogućnosti, kao što su EDI, AS2 i upravljanje XML shemama. Integracioni Nalozi su kontejner u Azure-u koji čuva sledeće artefakte korišćene za Logic Apps:

* Sheme: Upravljajte XML shemama za validaciju i obradu poruka u vašem integracionom nalogu.
* Mape: Konfigurišite XSLT transformacije za konvertovanje formata podataka unutar vaših integracionih radnih tokova.
* Skupovi: Upravljajte skupovima integracionog naloga kako biste pojednostavili logiku i obradu podataka.
* Sertifikati: Rukujte sertifikatima za enkripciju i potpisivanje poruka, obezbeđujući sigurnu komunikaciju.
* Partneri: Upravljajte informacijama o trgovinskim partnerima za B2B transakcije, omogućavajući besprekornu integraciju.
* Ugovori: Konfigurišite pravila i postavke za razmenu podataka sa trgovinskim partnerima (npr. EDI, AS2).
* Konfiguracije serija: Upravljajte konfiguracijama obrade serija kako biste grupisali i efikasno obrađivali poruke.
* RosettaNet PIP: Konfigurišite RosettaNet procese interfejsa partnera (PIPs) za standardizaciju B2B komunikacije.

#### Enumeracija

{{#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 }}


## Eskalacija privilegija

Isto kao privesc logičkih aplikacija:

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

## Post Eksploatacija

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

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