免杀需积累,并不是修改一个特征值就可以实现。

观察特征

CobaltStrike中存在端口号,心跳值等特征,今天我们对他的请求值做特征消除。这里用cs4.5分析,4.8的我用反编译重新打包运行要么出现打不开的情况,要么就是参数并没有改变

生成一个exe木马后,传到靶机执行,会随机生成一个参数,靶机会去请求这个参数实现上线。新建两个监听器为http和https,我们生成四个exe,分别为http64,https64,http32,https32,观察它的请求内容

执行后对他的请求参数分析,四个分别为:/64位https的bADv/ /32位https的JNNv/ /64位vCBb/ /32位9tx7/

生成的参数全是有规律可寻的,带入源码中的checksum8函数,看到对于32位和64位产生的参数区别,对于协议无。92是32位固定值,93是64位固定值。为了免杀,我们可以将这些特征值换成其他的

public static long checksum8(String text) {
        if (text.length() < 4) {
            return 0L;
        }
        text = text.replace("/", "");
        long sum = 0L;
        for (int x = 0; x < text.length(); x++) {
            sum += text.charAt(x);
        }

        return sum%256L;
    }

反编译环境准备

反编译前需准备jdk环境,版本越新越好,可以向下兼容,最开始使用的是jdk1.8,但是反编译时会出现报错,于是又下载jdk22。idea最好是企业版

对于jar文件,我们解压后看到的是class文件,并不是源代码

我们需要使用到idea中下载的拓展java decompiler,先将class反编译成java源文件,再解压就可以看到了。

如果对jdk和idea添加了环境变量就使用第一条命令,没有就手动找到jdk和插件的位置使用下面一条,插件就在idea安装位置的plugins\java-decompiler\lib下。coba是提前需要创建的文件夹,存储反编译jar的,反编译需要一点时间

-反编译:
java -cp IDEA_HOME/plugins/java-decompiler/lib/java-decompiler.jar  org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler -dgs=true cobaltstrike.jar coba
-具体命令:
"C:\Program Files\Java\jdk-22\bin\java.exe" -cp "C:\Program Files\JetBrains\IntelliJ IDEA 2022.1.3\plugins\java-decompiler\lib\java-decompiler.jar" org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler -dgs=true cobaltstrike.jar coba

反编译后得到的还是jar文件,但是可以看到源码

idea配置

接着打开idea创建一个项目用于对修改的文件存储

在cs目录下创建一个lib文件存储没有被反编译的CobaltStrike.jar,将已经被反编译的CobaltStrike.jar解压到cs目录下

idea选择项目结构,模块-依赖 -jar或目录里面找到添加至lib下的CobaltStrike.jar,添加进去勾选后-应用-确定

工件-jar-第二个,主类点开搜索Agg选择这个,接着一路-确定-应用-就好,成功后会有图三

定位文件

搜索特征值92L,93也行找到文件

现目的是修改92和93的特征,可以换成一个固定参数,我们需要通过checksum8计算出修改的值,xiubaodejiqiu对应115,meiyongdedongxi对应74

修改文件

修改文件需要在src下创建一个同文件名的文件夹,且文件名也要一样,如我想修改当前的WebServer.java,他在/cobaltstrike/cloudstrike目录下,那我就在src下创建名为cloudstrike的文件夹,里面是WebServer.java

在src的cloudstrike/WebServer.java/修改内容如下,如果遇到3个错误,第一个int变量全删和第二个删掉string[],最后一个全删

只是一个判断32还是64位的函数,我们还要找到给我们参数的函数,将他替换为115和74对应的字符

搜索引用了checksum8函数的地方

也像创建webserver一样创建对应commonutils的目录,修改commonutils内容,遇到int类型不兼容报错,修改解释器版本为8

对修改的两个java文件分别重新编译,在out目录会产生对应的class文件,将该文件替换掉没有反编译的cobaltstrike.jar包中的源文件

上传文件

将更新的jar包上传到kail中

重新启动cobaltstrike,生成新的监听器和木马,上传到win10执行观察web日志,可以看到已经替换成功了,访问这俩参数值会下载文件,里面是上线payload

未完待续。。。