某多重混淆应急响应

在一次攻防演练中,发现一个有趣的shell,文件做过多层混淆。

源文件

静态分析

Unicode混淆

根据内容可大概得知为unicode编码,对其进行解码,解码之后内容如下:

第一次解码

字节码Base64解码

其中clzBytecodeBase64Str参数值为base64编码,直接使用base64解码之后发现存在乱码,猜测为字节码文件进行base64编码。提取clzBytecodeBase64Str值,使用工具对其进行解码还原为class文件,其内容如下:

Vicennial类

ZKM14混淆

根据内容猜测其为ZKM14混淆,对其进行还原。然后查看反混淆之后的内容:

VicennialOut

第二次字节码解码

同理将s3进行解码,得到如下内容

shell

根据上图可得知其为webshell

动态分析

由于java所有代码都需要进到JVM,可直接dump出JVM中的类文件即可。
启动tomcat,访问一次原始文件页面,让tomcat将其加载至JVM中。使用arthas加载tomcat,首先要寻找对应的类名。
通过jvisualvm工具,查看内存中的类。
jvisualvm通过dump Sklater命令直接将class导出

dump shell

总结

1.这个webshell结合了上次说的编码、classload,还加了ZKM混淆;
2.在这次事件上,静态分析可以对整个流程理解更深刻,动态分析可以更快得到结果。