网盾网络安全培训学校育,只培训技术精英
全国免费咨询电话: 15827351614
冰蝎——从入门到魔改

常明显,很容易就被安全设备检测到。基于流量加密的webshell变得越来越多,"冰蝎"在此应运而生。

冰蝎——从入门到魔改

"冰蝎"客户端基于JAVA,所以可以跨平台使用,最新版本为v2.0.1,兼容性较之前的版本有较大提升。主要功能为:基本信息、命令执行、虚拟终端、文件管理、Socks代理、反弹shell、数据库管理、自定义代码等,功能非常强大

加密原理

我们以PHP版本为例,"冰蝎"在服务端支持open_ssl时,使用AES加密算法,密钥长度16位,也可称为AES-16。此在软件及硬件(英特尔处理器的AES指令集包含六条指令)上都能快速地加解密,内存需求低,非常适合流量加密。

 

加密流程大致如下图所示:

冰蝎——从入门到魔改

首先客户端以Get形式发起带密码的请求。

服务端产生随机密钥,将密钥写入Session并将密钥返回客户端。

客户端获取密钥后,将payload用AES算法加密,用POST形式发送请求。

服务端收到请求,用Session中的密钥解密请求的Body部分,之后执行Payload,将直接结果返回到客户端。

客户端获取返回结果,显示到UI界面上。

我们看到在图中,"冰蝎"在执行Payload之后的返回,并没有显示加密,这点我们可以从自带的webshell中看出。

冰蝎——从入门到魔改

冰蝎——从入门到魔改

这个问题需要解密一下"冰蝎"的流量,才能知道答案。

 

通信过程

我们用wireshark来抓包看下"冰蝎"通信过程:

冰蝎——从入门到魔改

从抓包结果上粗略来看,加密效果是不错的,全程基本没有可读的执行代码。

我们用服务端返回的密钥,对客户端发送的报文内容进行解密。

解密结果为如下代码:

冰蝎——从入门到魔改

我们发现核心内容只是一个简单的JSON格式的success的返回,但是会将结果使用AES包装一层加密,所以我们看到webshell中没有加密,而流量却是加密的。

时过境迁

攻防技术一直都在不断发展的,要想保证攻防的持续有效,就需要不断地更新自我。"冰蝎"的最新版本v2.0.1,在发布于2019.2之后就没有进行过更新。而各大厂商的检测系统及WAF均已经对其特征进行分析并加入规则。

冰蝎——从入门到魔改

冰蝎——从入门到魔改

各路分析其流量规则的文章也层出不穷。

冰蝎——从入门到魔改

原版"冰蝎"已经不能满足攻防对战的要求了,这时我们需要自己动手。

冰蝎——从入门到魔改

魔改准备

首先用JD-GUI等反编译工具,反编译JAR包获得源码。可以从中可以看到UI文件引入的包名看到,"冰蝎"使用了SWT框架作为UI。

冰蝎——从入门到魔改

既然这样我们直接用Eclipse安装WindowsBuilder,来直接创建SWT项目。

安装WindowsBuilder

在Eclipse的Marketplace里搜索WindowsBuilder,点击Install即可安装。

 

冰蝎——从入门到魔改

之后我们直接创建基于SWT项目,即可避免因swt包缺失导致的报错问题。

冰蝎——从入门到魔改

我们将反编译之后的源码和JAR包导入项目,在通过搜索源码和修复报错(会有一大波报错等待你修复,可以多种反编译工具对比结果来修改)等方式尝试将源码跑起来。

冰蝎——从入门到魔改

最终我们终于成功跑起来了反编译之后的代码。

冰蝎——从入门到魔改

可以看到项目结构比较简单清晰,主要逻辑都在net包下,Main.java为程序入口。这里简单介绍下各个模块代码的作用:

冰蝎——从入门到魔改

特征擦除

经过对网上多篇对"冰蝎"特征的资料参考,总结出几条特征并将其特征给予修改擦除。以PHP版本为例,其他语言版本异曲同工。

 

 

密钥交换时的URL参数

首当其冲的就是密钥交换时的参数,用GET请求方式,默认webshell的密码为pass,并且参数值为3位随机数字。

冰蝎——从入门到魔改

从webshell上看,参数值的随机数字并没有任何实际作用:

冰蝎——从入门到魔改

客户端代码上看也只是随机数:

冰蝎——从入门到魔改