WebShell工具常见流量特征
菜刀
最开始是明文传输,后来采用base64加密:
PHP类WebShell链接流量
如下:
- 第一:“eval”,eval函数用于执行传递的攻击payload,这是必不可少的;
- 第二:
(base64_decode($_POST[z0]))将攻击payload进行Base64解码,因为菜刀默认是使用Base64编码,以避免被检测; - 第三:&z0=QGluaV9zZXQ…,该部分是传递攻击payload,此参数z0对应
$_POST[z0]接收到的数据,该参数值是使用Base64编码的,所以可以利用base64解码可以看到攻击明文。
注:
1.有少数时候eval方法会被assert方法替代。
2.POST 也会被 POST也会被GET、REQUEST替代。
3.z0是菜刀默认的参数,这个地方也有可能被修改为其他参数名。
一句话;payload明文传输,url+base64;
payload带eval/assert/base64_decode这样的字符,
payload有默认固定的&z0=QGluaV9zZXQ开头,base64解密后可以看到代码
蚁剑
PHP类WebShell链接流量
将蚁剑的正文内容进行URL解码后,流量最中明显的特征为@ini_set(“display_errors”,“0”);这段代码基
本是所有WebShell客户端链接PHP类WebShell都有的一种代码,但是有的客户端会将这段编码或者加密,而蚁剑是明文,所以较好发现,同时蚁剑也有eval这种明显的特征。
蚁剑绕过特征流量
由于蚁剑中包含了很多加密、绕过插件,所以导致很多流量被加密后无法识别,但是蚁剑混淆加密后还有一个比较明显的特征,即为参数名大多以“_0x…=”这种形式(下划线可替换为其他)所以,以_0x开头的参数名,后面为加密数据的数据包也可识别为蚁剑的流量特征。
assert/eval,带有base64编码解码的字符特征
抓包看每个请求体都是@ini_set("display_errors","0");@set_time_limit(0)开头
我们去除混淆字符进行base64解码,解码后响应体返回结果的格式:随机数 解码后的结果 随机数,观察payload可看攻击行为
参数名_0x开头 “_0x.....=”这种形式(下划线可能为其他)
冰蝎
通过HTTP请求特征检测
1、冰蝎数据包总是伴随着大量的content-type:application什么什么,无论GET还是POST,请求的http中,content-type为application/octet-stream。
2、冰蝎3.0内置的默认内置16个ua(user-agent)头。
3、content-length 请求长度,对于上传文件,命令执行来讲,加密的参数不定长。但是对于密钥交互,获取基本信息来讲,payload都为定长。
ⅰ. 冰蝎2.0:AES+base64,动态获取密钥,UA头频繁切换
ⅱ. 冰蝎3.0:AES+base64,固定密钥,请求时UA头频繁切换
且Content-Type=application/octet-stream
webshell都有“e45e329feb5d925b” 一串密钥
ⅲ. 冰蝎4.0
UA头频繁切换
弱特征如Accept、Content-Type
连接的端口有特征,大端口49700左右
使用长连接:Connection:Keep-Alive
固定请求字节头:dFAXQV1LORcHRQtLRlwMAhwFTAg/M
固定响应字节头:TxcWR1NNExZAD0ZaAWMIPAZjH1BFBFtHThcJSlUXWEd
默认时,冰蝎 webshell都有“e45e329feb5d925b” 一串密钥
哥斯拉
特征:
1、发送一段固定代码(payload),http响应为空
2、发送一段固定代码(test),执行结果为固定内容
3、发送一段固定代码(getBacisInfo)
webshell动态生成
jsp会出现xc、pass字符和Java反射(ClassLoader,getClass().getClassLoader()),base64加
解码等特征
UA和Accept字段弱特征,攻击者可去除或修改
Cookie最后有个分号
响应体数据特征,把一个32位的md5字符串按照一半拆分,分别放在base64编码的数据前后,
即“md5前16位+base64+md5后16位”