base64 加密有空格 换行_红蓝对抗——加密Webshell“冰蝎” 流量 100%识别

0X01 "冰蝎" 获取密钥过程

冰蝎执行流程 (图片来自红蓝对抗——加密Webshell“冰蝎”攻防)

冰蝎在连接webshell的时,会对webshell进行两次请求访问


为什么进行两次访问? 我在别的文章没有看到关于这个问题的答案,于是我去反编译冰蝎源码f75f145288ee0937d917c3a22250cb10.png78aa06359ecd04ddb998b8240fa50a56.pngb27a39941c93d6c4cabe48492e984aac.png
通过对代码阅读,我发现冰蝎为了实现可以在webshell内添加任意内容 (比如gif89a子类的文件头或者其它标示字符) 冰蝎在初始化密钥时会对webshell进行两次访问,然后比较两次页面返回的差异,把两次请求都相同的字符记录一个位置,后续加密会用到这两个位置(beginIndex,endIndex)5f185f9e8d86aed39e1d1fece877b8db.png1f18b9fed77c1f202817db7db1e99577.pngfb0913bea81122f5c53a47f371008be6.png8c021f65022062948c9412b6fc0e5401.png)
如图,根据数据包,beginIndex:8 endIndex:4 (含换行),冰蝎开始从数据流中截取被加密的数据从下标8开始到(数据包总长度-4) Waf可以针对于返回类型为 "text/html" 的数据包中加一些空格或者换行,来扰乱冰蝎的数据包,导致冰蝎无法运行 (为什么要对返回类型为 "text/html" 的扰乱,别的格式不可以吗? 答案:jsp默认返回类型就是 "text/html" html添加一些空格或者换行,并不会影响网页的正常运行)

0X02 "冰蝎" 解析Cookie流程

0db15c0c439c970602479ab127c2fcb8.pngab333a8bf43426a747627cf651226268.pngd48ce6d56c08d69c9426d12d24ee29a4.png我们可以看到请求协议头中的Cookie字段,冰蝎在合并处理Cookie的时候没有考虑到,Cookie的一些属性 (比如 Path 或者 HttpOnly 之类或者其它的) 冰蝎直接把返回协议头中的Set-Cookie字段直接添加到下一个请求包的Cookie字段中14f80af1fa07eada3aae03c98e6a5400.png正常的请求是不会携带Cookie属性的,这可是识别冰蝎流量最直接的一种办法

0X03 "冰蝎" 动态加载

2e2879e444e4824d0c87472413cf1389.png1bcb1fc1a64deb06f7ed0f020038dde5.png
冰蝎动态加载的原理就是每次都发送一个class字节码(其它语言也一样) 冰蝎通过asm动态修改class字节码变量内容,实现携带参数动态执行,冰蝎在获取完密钥之后(2个请求),第三个请求就是获取BasicInfo(服务器的一些信息),冰蝎的BasicInfo功能并没有动态修改参数(一个获取服务器信息的能有啥参数),这会导致每次获取BasicInfo的数据包都是固定的大小

0X04 总结

Waf可以对一个ip连续访问2次的数据包进行截取,比对相同字符,比对之后,截取两次不同的数据,如果剩下的是16位的key,就可以证明这两个数据包就是冰蝎发出的,第三个数据包通过 0x02,0x03 中的一些bug,可以100%的匹配到冰蝎流量,不会误报

209843478def2efc7a0b3b8e3312c3e8.png

投稿作者:BeichenDream

文章首发:先知社区

5426bfb55b3a44d3318ad94cd3a10fc7.gif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值