冰蝎研究分析(一)

阅读量725228

|

发布时间 : 2021-06-09 16:30:43

 

“冰蝎”是一个动态二进制加密网站管理客户端。在我们的攻防运用中越来越多,特征也被各大杀软加入特征库,于是想自己深入研究,修改一波。

传输解密分析

我们从原始的冰蝎jsp马看起,Class U 继承了ClassLoader类,Class g 传入字节数组b[] 。这里我们看下defineClass方法,

由此猜测冰蝎远程传输的是一个类的字节码,进行类的导入与实例化。

先执行whoami命令,看下冰蝎传输的包体。
POST发送的是一个经过AES加密、base64编码的POST数据。
用JAVA写了个解密

可以看到,是个class的字节码,并且里面有我们执行系统命令的指令,我们转换成java文件。(但这里的whoami在保存成JAVA文件不知道为啥看不到了。)

可以看面传输的类中有equals方法,我们回到shell.jsp中。

整句代码的意思就可以理解了,实例化经过base64解码,AES解密的类,并执行equals方法。

继续跟踪equals方法,发现里面有个runCmd()方法。

这里应该是执行系统命令的方法。

后面就是把执行结果和status放在map里返回。

 

冰蝎客户端分析

接下来分析冰蝎客户端的命令执行。

执行whoami命令,在ul.controller#getCurrentCmd方法中断点。

持续跟进至返回结果,这里是把前面的执行路径去掉,只取执行的系统命令。

持续跟进,重点在requestAndParse()方法,是负责发送数据与处理数据的方法。

里面有个sendPostRequestBinary方法,我们继续逐步跟踪调试。

获取当前代理方式,如果有设置代理是从这里判断。

设置请求为POST方法。

这里是设置请求头配置的地方,比如header-agent等。我们可以在常量文件里设置修改。

这里有个writedata是我们发送的POST数据 ,具体data数据内容我们在后面分析。

POST请求包的设置到这里就结束了,我们可以看到burp中与发送数据是一致的,说明我们找对了。

跟踪到这里差不多就结束了,后面就是对返回包进行解密与解码的操作。
返回了一个含有执行结果与状态的map。

还有个疑点,之前的data发送的是什么。再重新进行调试。

跟进到getdata方法,先判断类型是否为jsp,寻找对应的class类。

这里有个获取Class方法,根据className=Echo,这里应该传输的是一个Echo.class

在payload文件夹发现对应的echo.java。
整体的分析流程只分析了一小部分有关流量传输与执行命令的,后续有时间会出其他部分与整体思路。

本文由OldfishPG原创发布

转载,请参考转载声明,注明出处: https://www.anquanke.com/post/id/240796

安全客 - 有思想的安全新媒体

分享到:微信
+17赞
收藏
OldfishPG
分享到:微信

发表评论

内容需知
合作单位
  • 安全客
  • 安全客
Copyright © 北京奇虎科技有限公司 三六零数字安全科技集团有限公司 安全客 All Rights Reserved 京ICP备08010314号-66