冰蝎2.0
- 使用
AES加密 + base64编码,AES使用动态密钥对通信进行加密,进行请求时内置了十几个User-Agent头,每次请求时会随机选择其中的一个。
因此当发现一个ip的请求头中的user-agent在频繁变换,就可能是冰蝎。
冰蝎3.0
- 使用
AES加密 + base64编码,取消了2.0的动态获取密钥,使用固定的连接密钥,AES加密的密钥为webshell连接密码的MD5的前16位,默认连接密码是"rebeyond"(即密钥是md5('rebeyond')[0:16]=e45e329feb5d925b)。进行请求时内置了十几个User-Agent头,每次请求时会随机选择其中的一个。因此当发现一个ip的请求头中的user-agent在频繁变换,就可能是冰蝎。
3.0连接jsp的webshell的请求数据包中的content-type字段常见为application/octet-stream。
冰蝎4.0
- 提供了传输协议自定义的功能,让用户对流量的加密和解密进行自定义,实现流量加解密协议的去中心化。v4.0版本不再有连接密码的概念,自定义传输协议的算法就是连接密码。
- Accept字段(弱特征),通常是
Accept: application/json, text/javascript, /; q=0.01意思是浏览器可接受任何文件,但最倾向application/json和text/javascript。 - Content-Type字段(弱特征),通常是
Content-type: Application/x-www-form-urlencoded - 与冰蝎的前述版本相似,进行请求时内置了十几个User-Agent头,每次请求时会随机选择其中的一个。
- 连接的端口有一定的特征,冰蝎与webshell建立连接的同时,java也与目的主机建立tcp连接,每次连接使用本地端口在
49700左右(就是比较大的端口),每连接一次,每建立一次新的连接,端口就依次增加。 - 使用长连接,避免了频繁的握手造成的资源开销。默认情况下,请求头和响应头里会带有
Connection:Keep-Alive - 有固定的请求头和响应头,请求字节头:
dFAXQV1LORcHRQtLRlwMAhwFTAg/M,响应字节头:TxcWR1NNExZAD0ZaAWMIPAZjH1BFBFtHThcJSlUXWEd - 默认时,冰蝎 webshell都有
e45e329feb5d925b一串密钥,与冰蝎3.0相同。
哥斯拉流量特征
哥斯拉支持多种加密方式,采用了和冰蝎 2.0 类似的密钥交换方式。它的webshell需要动态生成,可以根据需求选择不同的加密方式。
哥斯拉静态特征
在默认脚本编码的情况下,jsp会出现xc、pass字符和Java反射(ClassLoader,getClass().getClassLoader()),base64加解码等特征。
哥斯拉动态特征
- User-Agent字段(弱特征),如果采用默认的情况,会暴露使用的jdk信息。不过哥斯拉支持自定义HTTP头部,这个默认特征是可以很容易去除的。
- Accept字段(弱特征),默认是
Accept:text/html, image/gif, image/jpeg, *; q=.2, /; q=.2。同上,这个也可修改,只能作为辅助检测的特征。 Cookie中有一个非常关键的特征,最后会有个分号。估计后续的版本会修复。- 响应体的数据有一定特征,哥斯拉会把一个32位的md5字符串按照一半拆分,分别放在base64编码的数据的前后两部分。整个响应包的结构体征为:md5前十六位+base64+md5后十六位。
蚁剑流量特征
蚁剑webshell静态特征
蚁剑中php使用assert、eval执行;asp只有eval执行;在jsp使用的是Java类加载(ClassLoader),同时会带有base64编码解码等字符特征。
蚁剑webshell动态特征
使用一句话木马上传webshell,抓包后会发现每个请求体都存在以@ini_set("display_errors","0");@set_time_limit(0)开头。并且响应体的返回结果是base64编码发混淆字符,格式为:随机数 结果 随机数。