本文最后更新于100 天前,其中的信息可能已经过时,如有问题可在评论区留言
一. 流量解密
- 捕获流量并追踪流
- 使用UTF-8查看数据(因为魔法尾巴使用ascii码无法显示)
- 整段复制
- 使用冰蝎自带的传输协议功能解密
- 注意选择对应的协议名称,然后把第三步复制的内容粘贴到中间的框内即可获取请求数据明文,响应是base64编码后的内容,base64解码后得到明文。
- 请求数据和响应数据都是这样解密,解密出来的请求中的一长串未知字符并没有实际作用,应该是用来迷惑分析者的。
二. 流量特征
- 请求正文的长度很长,通常大于4000。
- 正文不存在key=value&key=value格式。
- 冰蝎的流量全部是Base64编码(先加密,再Base64),此类情况通常只出现在一种情况下:文件上传时。但是,在响应当中,通常也不太会使用Base64编码,所以可以检测Base64的特征。
- 请求头的referer可能是一个不存在的网址,或来自webshell文件。
- 通常请求头会带有Connection: Keep-Alive。
- 请求头的Content-type的值大概率为application/x-www-form-urlencoded。
三. 检测规则
1. Suricata规则
alert http any any <> any any (msg:"Chr1s:检测到冰蝎流量"; http.method; content:"POST"; http.content_type; content:!"multipart/form-data"; nocase; file.data; content:!"&"; http.content_len; byte_test:0,>=,4000,0,string,dec; http.header; content:"Connection|3a 20|Keep-Alive"; nocase; http.accept_enc; content:"gzip"; nocase; filestore; sid:66601001; rev:1;)
- 请求为POST
- content-type不为multipart/form-data
- 正文中不存在&
- 正文大小大于4000
- 头部存在Connection: Keep-Alive
- 数据使用gzip压缩
- 存储流量数据,以便于流量分析
注意,此规则仅适用于默认配置的冰蝎shell
2. 雷池waf规则
这里已经开启雷池waf的防护,但冰蝎正常连接:
也就是说雷池的社区版默认是不防冰蝎webshell的!
其他webshell还没试过,菜刀应该是肯定能防。
然后我们添加自定义黑名单规则:
(?:[A-Za-z0-9+/]{4}){1001,}(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?
- 此正则用于严格匹配Base64字符
开启自定义规则后冰蝎无法连接:
查看攻击日志可以看到流量已被拦截:
自此,完美防住冰蝎。
但需要注意,这个规则存在误报和被绕过的可能性,需要自己根据具体业务进行调整。
评论