您现在的位置是:首页 >学无止境 >webshell管理工具的流量特征分析(菜刀、蚁剑、冰蝎、哥斯拉)网站首页学无止境
webshell管理工具的流量特征分析(菜刀、蚁剑、冰蝎、哥斯拉)
目录
写在前面
菜刀、蚁剑、冰蝎、哥斯拉是常见的webshell管理工具。在攻防演练中,了解其常见webshell管理工具的流量特征对防守方来说十分重要。常见的webshell也在不断发展以绕过安全设备waf的检测,其流量特征也在不断演变,我们应该与时俱进的进行了解分析。简单的来说,菜刀和蚁剑采用静态加密的方式,其流量的攻击特征较为明显,而冰蝎和哥斯拉采用了动态加密的方式,更容易绕过安全设备的检测。
至于为啥要总结这篇文章,原因主要是感觉这几个webshell管理工具的流量特征是hvv和许多安全厂商在流量分析和应急响应的面试中很爱问的问题,而网上的许多资料感觉写的比较凌乱。于是在我看了一些资料后,从准备面试的角度做个总结,其中的内容主要源于网上的资料,如果我写的有不到位的地方,欢迎读者评论区指出或私信,不胜感谢。
菜刀
- payload在请求体中,采用url编码+base64编码,payload部分是明文传输。
- payload中有eval或assert、base64_decode这样的字符。
- payload中有默认固定的&z0=QGluaV9zZXQ...这样base64加密的攻击载荷,参数z0对应$_POST[z0]接收到的数据,且固定为QGluaV9zZXQ开头。进行base64解码后可看到代码:@ini_set("display_errors","0");@set_time_limit(0);@set_magic_quotes_runtime(0);这段意思是首先关闭报错和magic_quotes,接下来去获取主机的信息。
蚁剑
- 请求时可选择多种编码器,如果采用默认的方式,则仅进行url编码。
- 进行连接时会进行两次请求,第一次请求的payload和菜刀相似,也是@ini_set("display_errors","0");@set_time_limit(0);@set_magic_quotes_runtime(0);意思是关闭报错和magic_quotes,接下来区获取主机信息。这段代码基本是所有WebShell客户端链接PHP类WebShell都有的一种代码。
- 第二次请求会把主机的目录列出来。
- 由于蚁剑中包含了很多加密、绕过插件,所以导致很多流量被加密后无法识别,但是蚁剑混淆加密后还有一个比较明显的特征,即为参数名大多以“_0x.....=”这种形式(下划线可替换为其他)所以,以_0x开头的参数名,后面为加密数据的数据包也可识别为蚁剑的流量特征。
冰蝎
冰蝎2.0
使用 AES加密+base64编码发起三次请求。
第一次GET请求服务端产生密钥写入 session,session 和当前会话绑定,不同的客户端的密钥也是不同的。第二次GET请求是为了获取密钥 key,服务端会生成16位的AES密钥。第三次使用 key 的AES加密进行通信,通信也采用了base64编码。
进行请求时内置了十几个User-Agent头,每次请求时会随机选择其中的一个。因此当发现一个ip的请求头中的user-agent在频繁变换,就可能是冰蝎。
冰蝎3.0
使用AES加密+base64编码发起两次请求。
与冰蝎2.0相比,冰蝎3.0取消了动态密钥获取的请求,AES的密钥直接固定为连接密码32位md5的前16位,默认连接密码是"rebeyond"(即密钥是md5('rebeyond')[0:16]=e45e329feb5d925b)。服务端和客户端不再进行密钥的交互传递。两次请求中,第一次请求用于判断是否可以建立连接。第二次发送 phpinfo 等代码执行,获取网站的信息。
与冰蝎2.0相似,进行请求时内置了十几个User-Agent头,每次请求时会随机选择其中的一个。连接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建立连接的同时,javaw也与目的主机建立tcp连接,每次连接使用本地端口在49700左右(就是比较大的端口),每连接一次,每建立一次新的连接,端口就依次增加。
- 使用长连接,避免了频繁的握手造成的资源开销。默认情况下,请求头和响应头里会带有 Connection:Keep-Alive
- 有固定的请求头和响应头,请求字节头:dFAXQV1LORcHRQtLRlwMAhwFTAg/M ,响应字节头:TxcWR1NNExZAD0ZaAWMIPAZjH1BFBFtHThcJSlUXWEd
- 默认时,冰蝎 webshell都有“e45e329feb5d925b” 一串密钥,与冰蝎3.0相同。
哥斯拉
- 支持多种加密,采用了和冰蝎 2.0 类似的密钥交换方式,哥斯拉建立连接时会发起三次请求,第一次请求数据超级长,用于建立 session,第二三次请求确认连接,第二、三次的请求和响应基本是一致的。
- User-Agent字段(弱特征),如果采用默认的情况,会暴露使用的jdk信息。不过哥斯拉支持自定义HTTP头部,这个默认特征是可以很容易去除的。
- Accept字段(弱特征),默认是Accept:text/html, image/gif, image/jpeg, *; q=.2, /; q=.2。同上,这个也可修改,只能作为辅助检测的特征。
- Cookie中有一个非常关键的特征,最后会有个分号。估计后续的版本会修复。
- 响应体的数据有一定特征,哥斯拉会把一个32位的md5字符串按照一半拆分,分别放在base64编码的数据的前后两部分。整个响应包的结构体征为:md5前十六位+base64+md5后十六位。