为了免杀,给哥斯拉做做核酸!

admin 2023年6月14日08:57:19为了免杀,给哥斯拉做做核酸!已关闭评论41 views字数 1862阅读6分12秒阅读模式

漏洞原理

首先需要理解什么是Classloader(类加载器),用通俗的话来说Classloader的具体作用就是把class文件加载到JVM虚拟机当中去。或许是从优化方面考量,并不会一次性加载完所有class文件,而是在需要的时候去动态加载

通过一个小demo来了解Classloader的利用方式

自定义类继承Classloader这个抽象类,并复写findClass方法和loadClassData方法

blockchain

再创建一个利用Classloader装载的业务类,通过javac编译成class文件
blockchain

blockchain

加载完成后成功访问Student.class的say方法
blockchain

若是我们在Student的方法当中做一些危险操作,如执行命令
blockchain

成功弹出我们心爱的计算器
blockchain

那么重点来了,Classloader的defineClass方法是支持byte数组的方式来实例化类的,也就是说,我们在本地把一个危险类转为byte数组,通过http请求的方式发送到对方服务器,不就把这个类给整出来了嘛,哥斯拉就是通过这种方式来实现的免杀哈


首先利用本地的类加载器,调用父类的构造方法,再调用defineClass传入byte数组
blockchain

读取class字节流入byte数组,成功触发命令
blockchain

每次都通过反射去调用方法,看起来又臭又长,那么有没有什么办法,直接调用方法呢,答案当然还是有的

每一个类的父类都是Object类,我们只要复写Object的方法就可以直接调用了

复写toString方法执行命令
blockchain

又弹出计算器了
blockchain

这个时候就有人要问了哈,靓仔,这不还剩下一条赋值的时候还是用的反射呀,不慌,这里我们也可以把赋值的改为Object存在的方法比如”equals”那么这个时候有些小伙伴就觉得熟悉了!你猜的没错,哥斯拉jsp木马就是这样干的!(右边为哥斯拉3的jsp木马)
blockchain

哥斯拉前面创建的X类继承的Classloader就是把客户端传来的字节码转化为恶意类
blockchain


当然现在这一切都是我们瞎猜的,为了验证我们的想法,我们去翻翻哥斯拉的源码

嘿!瞧我在shells/payloads/java/assets发现了payloads.classs

这玩意就是哥斯拉本地的恶意类,转换为byte数组后发送给木马,然后调用Classloader实例化,这里复写的toString方法调用了run()来执行客户端的命令,equals调用handle来获取参数
blockchain

该类主要有以下方法,这些就是哥斯拉干坏事所执行的方法,什么文件上传、删除文件啥的
blockchain

跟进handle看看咋赋值的,最终跟进到”handlePayloadContext”方法,主要是拿出传入的pageContext的request、servletContext、Session的数据
blockchain

通过Wireshark看看哥斯拉的数据包,这么大一坨就是恶意类的字节码哈,我们解码看以下具体有哪些方法

blockchain

在jsp木马里加上那么一串代码,然后查看数据包,把所有字节码的方法都解析出来了,事实证明,我没有欺骗大家
blockchain

blockchain

好,说了那么多废话,下面正式开始jsp木马的改造计划,把哥斯拉发送过来的类的toString方法改一下,改成hashCode,然后编译后去替换掉哥斯拉的payloads.classs替换之后谁知道他奶奶的做了hash校验
blockchain

那没办法了,只能把byte写死在代码里面,把他的payload替换成我自己的
blockchain

执行命令的toString就可以改为hashCode了,至于一些关键字替换就不做介绍了,比如写结果的response.getWriter().write改为out.write等等等等
blockchain

因为木马采用了AES解密,无良的火绒,检测到使用了AES就说是后门,太不要脸了。
为了免杀,给哥斯拉做做核酸!
通过fuzz测试出存在javax.crypto.Cipher关键字就一棒子打死说我是后门,虽然我确实是后门哈。但是这我也忍不了,那怎么办!把关键字转换为变量,把变量转换常量,把常量进行编码!这不就把javax.crypto.Cipher给藏起来了嘛,说干就干
blockchain

好,现在终于把右边的2句话搞定的AES解密转换为左边的一大坨狗屎了,不过也成功的把javax.crypto.Cipher变成了常量,下面开始用base64对常量编码,这样就把特征给藏起来了
blockchain

再用火绒扫描一下,检测不出来了,我也成功上线了,哎呀火绒你气不气,你气不气
为了免杀,给哥斯拉做做核酸!
为了免杀,给哥斯拉做做核酸!
过D盾啥的闭着眼睛都能过,毕竟他们也只是匹配一下特征,改一下变量啥的哥斯拉估计就过了,D盾啊怀都不怀疑一下,真的好吗
blockchain

下载地址:http://124.223.89.192:8000/file/xiaotong2.jsp

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年6月14日08:57:19
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   为了免杀,给哥斯拉做做核酸!https://cn-sec.com/archives/1803564.html