反序列化

  • 序列化与反序列化
    序列化:把一个对象类型的数据转换成字符串(字节流)进行传输,把某个对象系列化成JSON格式或XML格式或者其他序列化格式的字符串过程称为序列化。
    反序列化:将字节流或字符串转换为原始的数据结构或对象。
  • shiro反序列化
    shiro-550:shiro < 1.2.5
    主要是因为rememberMe内容。AES密码被硬编码在shiro源码中,导致在cookie中的rememberMe可疑被插入恶意代码造成代码执行。
    shiro-721:shiro > 1.2.5
    shiro使用了随机密码,但是padding oracle attack导致反序列化。
  • shiro形成原因
    1、默认的rememberMe功能:提供了记住密码功能,允许用户在关闭浏览器后仍保持登录状态。将用户身份信息序列化后加密存储在cookie中。再次访问时,从cookie中读取rememberMe值,解密并反序列化。
    2、反序列化时没有进行严格校验,攻击者能伪造rememberMe值并控制加密密钥,AES密码是硬编码可以通过公开默认密钥或泄密密钥伪造rememberMe Cookie值,构造恶意序列化数据,触发反序列化漏洞。
  • shiro利用链(java)
    1、Commons BeanUtils
    2、Commons Collections
  • 反序列化漏洞修复
    1、升级Shiro版本
    2、修改默认密钥:cipherKey,使用随机生成密钥
    3、禁用rememberMe功能;securityManager.rememberMeManager = null
    4、对反序列化的数据进行严格校验
    5、使用白名单:限制反序列化的类,只允许反序列化可信的类

本文作者:予遂计划

本文链接:https://www.cnblogs.com/ysjh/p/18711933

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   予遂计划  阅读(2)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起
  1. 1 404 not found REOL
404 not found - REOL
00:00 / 00:00
An audio error has occurred.