反序列化
- 序列化与反序列化
序列化:把一个对象类型的数据转换成字符串(字节流)进行传输,把某个对象系列化成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 中国大陆许可协议进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步