# Az - Logic Apps

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

## Informations de base

Azure Logic Apps est un service basé sur le cloud fourni par Microsoft Azure qui permet aux développeurs de **créer et d'exécuter des workflows intégrant divers services**, sources de données et applications. Ces workflows sont conçus pour **automatiser les processus métier**, orchestrer des tâches et effectuer des intégrations de données à travers différentes plateformes.

Logic Apps fournit un concepteur visuel pour créer des workflows avec une **large gamme de connecteurs préconçus**, ce qui facilite la connexion et l'interaction avec divers services, tels qu'Office 365, Dynamics CRM, Salesforce, et bien d'autres. Vous pouvez également créer des connecteurs personnalisés pour vos besoins spécifiques.

### Exemples

- **Automatisation des pipelines de données** : Logic Apps peut automatiser **les processus de transfert et de transformation des données** en combinaison avec Azure Data Factory. Cela est utile pour créer des pipelines de données évolutifs et fiables qui déplacent et transforment des données entre divers magasins de données, comme Azure SQL Database et Azure Blob Storage, aidant ainsi dans les opérations d'analytique et d'intelligence d'affaires.
- **Intégration avec Azure Functions** : Logic Apps peut fonctionner aux côtés d'Azure Functions pour développer **des applications sophistiquées, déclenchées par des événements qui s'adaptent selon les besoins** et s'intègrent parfaitement avec d'autres services Azure. Un exemple d'utilisation est d'utiliser une Logic App pour déclencher une Azure Function en réponse à certains événements, tels que des changements dans un compte de stockage Azure, permettant un traitement dynamique des données.

### Visualiser un LogicAPP

Il est possible de visualiser un LogicApp avec des graphiques :

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

ou de vérifier le code dans la section "**Vue du code de l'application Logic**".

### Protection SSRF

Même si vous trouvez la **Logic App vulnérable au SSRF**, vous ne pourrez pas accéder aux identifiants depuis les métadonnées car Logic Apps ne le permet pas.

Par exemple, quelque chose comme ceci ne renverra pas le 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
```
### Options d'hébergement

Il existe plusieurs options d'hébergement :

* **Consommation**
- **Multi-tenant** : fournit des ressources de calcul partagées, fonctionne dans le cloud public et suit un modèle de tarification à la consommation. Cela est idéal pour des charges de travail légères et rentables.
* **Standard**
- **Workflow Service Plan** : ressources de calcul dédiées avec intégration VNET pour le réseau et facturation par instance de plan de service de flux de travail. Il convient aux charges de travail plus exigeantes nécessitant un plus grand contrôle.
- **App Service Environment V3** ressources de calcul dédiées avec isolation complète et évolutivité. Il s'intègre également avec VNET pour le réseau et utilise un modèle de tarification basé sur les instances de service d'application au sein de l'environnement. Cela est idéal pour des applications à l'échelle d'entreprise nécessitant une haute isolation.
- **Hybride** conçu pour le traitement local et le support multi-cloud. Il permet des ressources de calcul gérées par le client avec accès au réseau local et utilise l'autoscaling basé sur les événements Kubernetes (KEDA).

### Énumération

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

az rest \
--method GET \
--uri "https://examplelogicapp1994.scm.azurewebsites.net/api/functions/admin/download?includeCsproj=true&includeAppSettings=true" \
--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>
```
{{#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 }}



### Comptes d'intégration
**Comptes d'intégration**, sont une fonctionnalité d'Azure Logic Apps. Les Comptes d'intégration sont utilisés pour faciliter les intégrations au niveau de l'entreprise en permettant des capacités B2B avancées, telles que la gestion EDI, AS2 et XML schema. Les Comptes d'intégration sont un conteneur dans Azure qui stocke les artefacts suivants utilisés pour les Logic Apps :

* Schémas : Gérer les schémas XML pour valider et traiter les messages dans votre compte d'intégration.
* Cartes : Configurer des transformations basées sur XSLT pour convertir les formats de données dans vos flux de travail d'intégration.
* Assemblages : Gérer les assemblages du compte d'intégration pour rationaliser la logique et le traitement des données.
* Certificats : Gérer les certificats pour chiffrer et signer les messages, garantissant une communication sécurisée.
* Partenaires : Gérer les informations sur les partenaires commerciaux pour les transactions B2B, permettant des intégrations sans faille.
* Accords : Configurer des règles et des paramètres pour échanger des données avec des partenaires commerciaux (par exemple, EDI, AS2).
* Configurations de lot : Gérer les configurations de traitement par lot pour regrouper et traiter les messages efficacement.
* RosettaNet PIP : Configurer les processus d'interface partenaire RosettaNet (PIPs) pour standardiser la communication B2B.

#### Énumération

{{#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" }}
```powershell
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 }}


## Escalade de privilèges

Identique à la privesc des applications logiques :

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

## Post-exploitation

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

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