一、冰蝎原理
1.1 简介
冰蝎是一款基于Java开发的动态加密通信流量的新型Webshell客户端,由于通信流量被加密,传统的WAF、IDS 设备难以检测,给威胁狩猎带来较大挑战。冰蝎其最大特点就是对交互流量进行对称加密,且加密密钥是由随机数函数动态生成,因此该客户端的流量几乎无法检测。而老牌的如中国菜刀因为其流量特征太过明显,从而使用的场景越来越少。
1.2 冰蝎的加密原理
以PHP版本为例,"冰蝎"在服务端支持open_ssl时,使用AES加密算法,密钥长度16位,也可称为AES-16。此在软件及硬件(英特尔处理器的AES指令集包含六条指令)上都能快速地加解密,内存需求低,非常适合流量加密。
流程:
1、首先客户端以Get形式发起带密码的请求。(根据实际情况也有POST的请求方式)
2、服务端产生随机密钥,将密钥写入Session并将密钥返回客户端。
3、客户端获取密钥后,将payload用AES算法加密,用POST形式发送请求。
4、服务端收到请求,用Session中的密钥解密请求的Body部分,之后执行Payload,将直接结果返回到客户端。
5、客户端获取返回结果,显示到UI界面上。
1.3 冰蝎流量特征
1、Accept字段
Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7
这个基本是固定的
2、Content-Type
Content-type: Application/x-www-form-urlencoded
这个基本也是固定的
3、冰蝎生成的服务端webshell中存在固定代码
以php为例:
(file_get_contents("php://input"));
4、固定的请求头和响应头
请求: 3Mn1yNMtoZViV5wotQHPJtwwj (每个连接请求头和响应头都不一样的,但是本次连接以后的请求头和响应头都是固定的) 响应: mAUYLzmqn5QPDkyI5lvSp0fjiBu1e7047Yj
5、连接密码
默认时,所有冰蝎4.0 webshell都有"e45e329feb5d925b" 一串密钥。该密钥为连接密码32位md5值的 前16位,默认连接密码rebeyond(自己使用是可以更改密码的)