在Windows上,PowerShell的默认配置是不允许执行脚本文件的。这对于一些渗透测试人员,系统管理员,程序员等来说,是一个必须面对的障碍。本文中,我将提出15种不需要本地管理员权限就绕过该执行保护策略的方法。我确定依然有许多甚至我不知道的方法没有提到,但是我希望本文对那些需要的人来说是一个良好的开端。
PowerShell执行策略是用来限制哪些类型的PowerShell脚本能在系统上直接运行。默认它的设置时Restricted
,即任何脚本都不行。但是,我们需要明确该设置从来都没打算设计成为一个安全控制策略,相反,它本来是为了防止系统管理员发生搬起石头砸自己的脚的情况。这就是为什么有许多围绕它的选项。其中包括一些微软自身提供的。若想了解更多PowerShell的执行策略设置和其他默认安全设置,我推荐你读Carlos Perez的博客,它提供了一个比较全面的概述。
为什么PowerShell如此流行,我听到过不少的答案,最常听到就是它可以实现自动化,以下是一些管理员,渗透测试人员,黑客之所以喜欢它的一些原因:
在使用PowerShell的所有惊奇的特性前,攻击者要做的第一件事就是绕过Restricted
执行策略。可以通过命令Get-ExectionPolicy
来获得当前策略。如果你是第一次使用这个命令,则应该是设置为Restricted
的,如下:
同样可以将执行策略设置为不同的级别。如下查看支持的所有级别,若想了解更多关于”Set-ExecutionPolicy”的信息,查看 Set-ExecutionPolicy
我会使用如下一个脚本来作为例子,runme.ps1,该明白用来向控制台输出一句话:
当我在默认策略的主机上,尝试执行该脚本时,会出现如下错误:
如果你的策略太open,你想使用更严格的方式来测试如下的方案,你需要切换到管理员身份,执行Set-ExecutionPolicy Restricted
。OK,接下来是15种方式:
如下,将你的脚本粘贴到console中。但是,你要记住,你的受限程度取决于你当前用户的权限。假如你有一个可以交互式的窗口,则这是最基本的一种方法,而且不需要做任何的配置改变和写入到磁盘中。
此方法有个缺点就是会写入脚本到本地磁盘中,但是你可以从一个网络共享中读取脚本,来避免写内容到磁盘中。
此方法和直接粘贴脚本内容执行的方式很像,但是此方法不需要一个交互式的窗口。它适用于简单脚本的执行,对于复杂脚本会发生解析错误。该方法同样不会写内容到磁盘中。
你可以将该命令写到一个bat文件中,然后放到启动目录中,来帮助提权。
该方法和上一个方法很相似,但是此方式脚本内容是Unicode/base64 encode的字符串。使用编码的好处是可以让你避免执行使用Command
参数时产生一些糟糕的解析问题。以下的例子是摘自Posh-SecMod。该工具套件还包括一个小的压缩方法来减少由于encode后字符串太长的情况。
该方法最cool点在于对抗那些PowerShell remoting开启的Remote系统。
如下命令,可用来从一个远程系统上抓取执行策略同时运用到本地计算机中.
这个方法是微软提供的用来绕过执行策略的一种方式。当指定该标志后,即视为什么都不做,什么警告也不提示。
该标志和bypass很像,但是当使用该标志时,即意味着加载所有的配置文件和执行所有的脚本。如果你运行一个从网上下载的未签名的脚本,会给出权限提示。
创建你的脚本,然后按指南签名。最后运行:
非常有创造性的一个。如下函数可以在交互式窗口中使用,也可以在Command参数中指定。一旦该函数被执行,则会换出认证管理器,同时默认策略改为unrestricted。但是该方法只在一个会话范围内有效。
我们之前介绍中提到过,执行策略可以应用到过个级别。其中就包括你完全控制的process。使用该方法仅限于当前session中,执行策略会变为unrestricted
。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)