webshell流量特征
蚁剑
蚁剑静态特征:蚁剑中php使用assert、eval执行;asp只有eval执行;在jsp使用的是Java类加载(ClassLoader),同时会带有base64编码解码等字符特征。
蚁剑动态特征:php使用一句话木马上传webshell,抓包后会发现每个请求体都存在以@ini_set("display_errors","0");@set_time_limit(0)开头。且响应体的返回结果是base64编码等混淆字符,格式为:随机数 结果 随机数。
jsp没有上述的字符,key=value的格式,jsp响应体返回结果和上面一样
jsp静态特征
default
@ini_set("display_errors","0");@set_time_limit(0)
base64
@eval(@base64_decode($_POST['h7765d266ff5a9'])
chr chr16
rot
cc123=@eval(@str_rot13($_POST['kf62221800e2c5'])
jsp
冰蝎:
使用AES加密 + base64编码,取消了2.0的动态获取密钥,使用固定的连接密钥,AES加密的密钥为webshell连接密码的MD5的前16位,默认连接密码是"rebeyond"(即密钥是md5('rebeyond')[0:16]=e45e329feb5d925b)。进行请求时内置了十几个User-Agent头,每次请求时会随机选择其中的一个。因此当发现一个ip的请求头中的user-agent在频繁变换,就可能是冰蝎。
冰蝎3.0流量特征:
请求包中content-length 为5740或5720(可能会根据Java版本而改变)
每一个请求头中存在强缓存的字符, Pragma: no-cache,Cache-Control: no-cache
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/*;q=0.8,application/signed-exchange;v=b3;q=0.9
jsp的webshell的请求数据包中的content-type字段常见为application/octet-stream。
Referer为url+四位随机数+文件的名字或者目录正确,自定义名字
注入内存马前Referer:url+原来的目录+原来的名字.jsp
注入内存马后Referer:url+原来的目录+随机的名字.jsp
冰蝎4.0流量特征:
提供了传输协议自定义的功能,让用户对流量的加密和解密进行自定义,实现流量加解密协议的去中心化。
4.0版本不再有连接密码的概念,自定义传输协议的算法就是连接密码。
连接的端口有一定的特征,冰蝎与webshell建立连接的同时,java也与目的主机建立tcp连接,每次连接使用本地端口在49700左右(就是比较大的端口),每连接一次,每建立一次新的连接,端口就依次增加。
Accept字段(弱特征),通常是Accept: application/json, text/javascript, /; q=0.01 意思是浏览器可接受任何文件,但最倾向application/json 和 text/javascript。
php
Referer:url+随机字母+随机.jsp
jsp
注入内存马前Referer:url+原来的目录+随机名.jsp
注入内存马时Referer:url+原来目录+原来的.jsp
注入内存马后Referer:url+随机字母+随机.jsp
哥斯拉
在默认脚本编码的情况下,jsp会出现xc、pass字符和Java反射(ClassLoader getClass().getClassLoader()),base64加解码等特征。
哥斯拉动态特征:
Cookie中有一个非常关键的特征,最后会有个分号。估计后续的版本会修复。
响应体的数据有一定特征,哥斯拉会把一个32位的md5字符串按照一半拆分,分别放在base64编码的数据的前后两部分。整个响应包的结构体征为:md5前十六位+base64+md5后十六位