搞点花样 | 利用冰蝎4来钓鱼

admin 2022年9月14日15:31:32评论175 views字数 3172阅读10分34秒阅读模式


01


前言

冰蝎在2022年7月份进行了一次比较大的更新,让笔者比较关注的是冰蝎4(以下称冰蝎)带来的自定义加解密功能,该功能在冰蝎中名为“传输协议”。


笔者空闲时间不多,接触到冰蝎的时候比较晚了,刚看到这个功能就想到,用户自定义输入+代码执行,这妥妥的是危险功能。


但WebShell管理工具本身就属于“危险”的攻击工具,所以危险又谈何而来?笔者无事,琢磨了如何使用、怎么样更优雅、如何捕获猎物这几点来进行技术分享。


这也是笔者新开的栏目,叫搞点花样,目的不是追求前沿技术,而是来点思维碰撞,整点轻松易懂而又令人有点想不到的技术。


效果展示

保存“加密函数”之后,执行命令。

搞点花样 | 利用冰蝎4来钓鱼


02


技术讲解

代码分析

冰蝎使用的编程语言为java,UI框架使用的是javafx。


冰蝎不开源,可以使用工具反编译,github上也有其他人反编译的源码。


源码链接:https://github.com/MountCloud/BehinderClientSource

下载好后导入文件,程序属于maven工程,需要运行的请安装maven。


在Main.fxml找到事件id:"shellListTable",该id事件在加载首页UI时会进行初始化。

搞点花样 | 利用冰蝎4来钓鱼


shellListTable属于TableView类,跟进跳转到ui/controller/MainController.java。

搜索"打开",根据关键字寻找"打开"按钮,按钮名为openBtn。

搞点花样 | 利用冰蝎4来钓鱼


跟进寻找openBtn的事件。先获取首页的url、ShellID,然后传到本类中的openShell方法。

搞点花样 | 利用冰蝎4来钓鱼


openShell中加载FXML,根据所指的MainWindow.fxml找到fx:controller,controller指向MainWindowController。

搞点花样 | 利用冰蝎4来钓鱼
搞点花样 | 利用冰蝎4来钓鱼


所以在加载时,会自动初始化MainWindowController的initialize方法。initialize调用initControls方法。

搞点花样 | 利用冰蝎4来钓鱼


MainWindowController.initControls方法中,标红第一行是设置监听器,当urlText文本内容变更时运行。监听器内关键的方法是doConnect与getBasicInfo,是本篇文章的重点关注方法。

搞点花样 | 利用冰蝎4来钓鱼


设置完监听器回到openShell方法,在进到init方法之前,先获取鼠标所选的Shell信息,返回的是一个JSONObject,里面存取了Shell的id、传输协议、脚本类型等等。

搞点花样 | 利用冰蝎4来钓鱼


进到MainWindowController.init方法,先传入JSONObject到ShellService实例化一个对象。接着urlText更改内容,触发了urlText的监听器。再接着进到MainWindowController.initTabs方法。接下来可以不用继续跟了,返回到MainWindowController.initControls中。

搞点花样 | 利用冰蝎4来钓鱼


urlText监听器被触发,首先进入的是MainWindowController.doConnect方法。

搞点花样 | 利用冰蝎4来钓鱼


doConnect指向ShellService.doConnect方法。

搞点花样 | 利用冰蝎4来钓鱼


跟进echo方法。

搞点花样 | 利用冰蝎4来钓鱼


ShellService.echo方法,传入CustomCryptor的对象、字符串Echo、Map、以及字符串effectType(Shell类型,此时值为jsp)到Utils.getData方法。

搞点花样 | 利用冰蝎4来钓鱼


cryptor.getTransProtocol方法获取TransProtocol(里面存取了自定义加解密的代码等等),传入Params.getParamedClass方法。

搞点花样 | 利用冰蝎4来钓鱼


Params.getParamedClass方法调用getTransProtocoledClass方法,传入了className(此时值为字符串Echo)、TransProtocol对象。

搞点花样 | 利用冰蝎4来钓鱼


Params.getTransProtocoledClass第一次调用进入else分支,进行了读取Echo类并随机命名,接着编译用户自定义加密的代码,然后移除Echo类原有的Encrypt方法,将编译好的用户自定义加密的代码放进随机命名的新类中。保存,最后返回新的字节码。

搞点花样 | 利用冰蝎4来钓鱼


返回Utils.getData方法,接着走这一句对字节码进行加密。

搞点花样 | 利用冰蝎4来钓鱼


CustomCryptor.encrypt方法,里面是反射的代码。首先调用getEncodeCls方法。

搞点花样 | 利用冰蝎4来钓鱼


获取了用户自定义加密的代码,先进行格式化,然后将代码编译为字节码。

搞点花样 | 利用冰蝎4来钓鱼


格式化代码就是将用户自定义加密代码放到test类中。

搞点花样 | 利用冰蝎4来钓鱼

public class test{n %sn}


接着走getEncodeClas方法中的第三行。将格式化后的代码传入define方法。define方法加载字节码,返回类。

搞点花样 | 利用冰蝎4来钓鱼


获取Encrypt方法,实例化,反射调用,返回加密后的字符串。CustomCryptor.encrypt方法,是本文重点关注方法。

搞点花样 | 利用冰蝎4来钓鱼


echo方法接着的是网络请求,然后将响应内容转换为JSONObject。

搞点花样 | 利用冰蝎4来钓鱼


接着往下走,CustomCryptor.decrypt方法传入了响应内容中的body。

搞点花样 | 利用冰蝎4来钓鱼


CustomCryptor.decrypt方法与CustomCryptor.encrypt方法原理一样,加载用户自定义的解密方法,然后通过反射执行,将加密字符串还原为明文字符。

搞点花样 | 利用冰蝎4来钓鱼


到了这里,只讲解了doConnect方法反射调用用户自定义加解密代码的内容,前面说getBasicInfo也是重点关注的方法,这里就不再细说了,因为getBasicInfo等方法调用自定义加解密的方法与doConnect的逻辑是一致的。


还有在“传输协议配置”,也存在代码执行,分别是“加密”、“解密”、“保存”。加密反射调用了加密代码,解密反射调用了解密代码,保存调用了加密与解密的代码。

搞点花样 | 利用冰蝎4来钓鱼


利用思路

加密代码会被两处地方用到,一处是修改payload字节码时,一处是加密payload字节码时。

修改payload字节码是直接将加密代码移动到字节码中,而加密字节码时,会先格式化,再进行反射。这是两者的不同。


解密代码只有一处地方用到。响应内容是加密的,获取到之后会使用CustomCryptor.decrypt方法对加密内容进行解密。在反射解密之前,也会进行格式化。


加密代码与解密代码会被反射调用,代码就会被执行。用户自定义输入+代码执行,这妥妥的危险操作。


所以说,只要在加密代码或者解密代码处写上恶意代码,就能在每次通信时执行。以下是写入了一个图片并打开。代码空间很大,任凭读者发挥想象。

搞点花样 | 利用冰蝎4来钓鱼


优雅使用

代码执行是成功了,但是看起来不够隐蔽。不过很简单,只要都写在一行就行了。

搞点花样 | 利用冰蝎4来钓鱼


再把代码用空格推到右边,就跟原来一模一样,不右划根本发现不了。

搞点花样 | 利用冰蝎4来钓鱼


捕获猎物

方法1 分享配置文件

“传输协议配置”有个“分享”功能,分享可以导出配置。

搞点花样 | 利用冰蝎4来钓鱼


导入配置文件时,会提示有同名配置。

搞点花样 | 利用冰蝎4来钓鱼


为了能顺畅导入配置,需要修改配置中三个name字段,只要不跟原有的配置名相同即可。

搞点花样 | 利用冰蝎4来钓鱼


修改后再进行导入,就不会有警告信息。

搞点花样 | 利用冰蝎4来钓鱼


方法2 分享数据库文件

分享数据库文件需要用点小心思,最好能让别人认为你是不小心泄露了冰蝎数据库文件。

首先自己把Shell信息配置好。url可以填上蜜罐或者靶场,传输协议选有恶意代码的配置文件。

搞点花样 | 利用冰蝎4来钓鱼


可以把目录列表映射到公网。

搞点花样 | 利用冰蝎4来钓鱼


目标下载了data.db,放到冰蝎目录下,然后打开冰蝎。

搞点花样 | 利用冰蝎4来钓鱼

只要打开了第5个,那么就会执行恶意代码。

搞点花样 | 利用冰蝎4来钓鱼


上图左下角有报错信息。配置文件写了一个showPic方法,因为payload中没有showPic方法,所以会报错。

如果想让鱼儿沉浸在荷塘,可以把恶意代码放到类的static静态代码块中。这样不会把static代码块添加到payload里,就不会引起报错。

搞点花样 | 利用冰蝎4来钓鱼

搞点花样 | 利用冰蝎4来钓鱼


03


效果验证

搞点花样 | 利用冰蝎4来钓鱼



原文始发于微信公众号(哈拉少安全小队):搞点花样 | 利用冰蝎4来钓鱼

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年9月14日15:31:32
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   搞点花样 | 利用冰蝎4来钓鱼http://cn-sec.com/archives/1295673.html

发表评论

匿名网友 填写信息