CVE-2019-12422漏洞分析

CVE-2019-12422 Shiro721反序列化漏洞 CVE-2019-12422 Shiro721反序列化漏洞 前面分析了Shiro550,导致Shrio550漏洞的原因是Shiro存在默认key,当服务器端的默认key没有修改,则攻击者可以利用这个默认key进行传输任意的rememberMe字段Cookie,这个rememberMe字段Cookie传输到服务器端之后会被反序列化! 而在shiro1.2.5及以后的版本怎么利用呢? 阅读详情

声明

出品|先知社区(ID:alter99)

以下内容,来自先知社区的alter99作者原创,由于传播,利用此文所提供的信息而造成的任何直接或间接的后果和损失,均由使用者本人负责,长白山攻防实验室以及文章作者不承担任何责任。

CVE-2019-12422

漏洞信息

漏洞编号:

CVE-2019-12422/CNVD-2016-07814/SHIRO-721
影响版本:shiro < 1.4.2
漏洞描述:RememberMe默认通过 AES-128-CBC 模式加密,易受Padding Oracle Attack攻击
漏洞补丁:Commit
参考:padding oracles Padding oracle attack Pad-dingOracleAttackShiro-721代码分析

漏洞分析

本次漏洞实际并不是针对shiro代码逻辑的漏洞,而是针对shiro使用的AES-128-CBC加密模式的攻击,首先了解一下这种加密方式。

AES-128-CBC

AES-128-CBC模式就代表使用AES密钥长度为128 bit,使用CBC分组算法的加密模式。

  • AES是对称、分组加密算法,分组长度固定为128bit,密钥key的长度可以为128bit(16字节)、192bit(24字节)、256bit(32字节),如果数据块及密钥长度不足时,会补齐。

  • CBC,全称 Cipher Block Chaining (密文分组链接模式),简单来说,是一种使用前一个密文组与当前明文组 XOR 后再进行加密的模式。CBC主要是引入一个初始化向量(Initialization Vector,IV)来加强密文的随机性,保证相同明文通过相同的密钥加密的结果不一样。

CBC 模式下,存在以下填充方式,用于在分组数据不足时,在结尾进行填充,用于补齐:

  • NoPadding:不填充,明文长度必须是16Bytes 的倍数。

  • PKCS5Padding:PKCS7Padding跟PKCS5Padd-ing的区别就在于数据填充方式,PKCS7Padding是缺几个字节就补几个字节的0,而PKCS5Padding是缺几个字节就补充几个字节的几,比如缺6个字节,就补充6个字节的6,如果不缺字节,就需要再加一个字节块。

  • ISO10126Padding:以随机字节填充 , 最后一个字节为填充字节的个数。

Shiro 中使用的是 PKCS5Padding,也就是说,可能出现的 padding byte 值只可能为:

1 个字节的 padding 为 0x01
2 个字节的 padding 为 0x02,0x02
3 个字节的 padding 为 0x03,0x03,0x03
4 个字节的 padding 为 0x04,0x04,0x04,0x04
...

当待加密的数据长度刚好满足分组长度的倍数时,仍然需要填充一个分组长度,也就是说,明文长度如果是 16n,加密后的数据长度为 16(n+1) 。

图片

加密过程

  • 明文经过填充后,分为不同的组block,以组的方式对数据进行处理

  • 初始化向量(IV)首先和第一组明文进行XOR(异或)操作,得到”中间值“

  • 采用密钥对中间值进行块加密,删除第一组加密的密文 (加密过程涉及复杂的变换、移位等)

  • 第一组加密的密文作为第二组的初始向量(IV),参与第二组明文的异或操作

  • 依次执行块加密,最后将每一块的密文拼接成密文

  • IV经常会被放在密文的前面,解密时先获取前面的IV,再对后面的密文进行解密

图片

解密过程

  • 会将密文进行分组(按照加密采用的分组大小),前面的第一组是初始化向量,从第二组开始才是真正的密文

  • 使用加密密钥对密文的第一组进行解密,得到中间值

  • 将中间值和初始化向量进行异或,得到该组的明文

  • 前一块密文是后一块密文的IV,通过异或中间值,得到明文

  • 块全部解密完成后,拼接得到明文,密码算法校验明文的格式(填充格式是否正确)

  • 校验通过得到明文,校验失败得到密文

图片

Padding Oracle Attack 原理

这个攻击的根源是明文分组和填充,同时应用程序对于填充异常的响应可以作为反馈。首先明确以下两点

  1. 解密之后的最后一个数据块,其结尾应该包含正确的填充序列。如果这点没有满足,那么加/解密程序就会抛出一个填充异常。Padding Oracle Attack的关键就是利用程序是否抛出异常来判断padding是否正确。

  2. 解密时将密文分组,第一组是初始化向量,后面才是真正的密文。密文传过去后先解密得到中间值,中间值与初始向量异或得到明文片段。

比如我们的明文为admin,则需要被填充为 admin\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b,一共11个\x0b

如果我们输入一个错误的IV,依旧是可以解密的,但是中间值middle和我们输入的IV经过异或后得到的填充值可能出现错误这样就出现验证错误的情况。

比如本来应该是

admin\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b

而我们错误的得到

admin\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x2b

这样解密程序往往会抛出异常(Padding Error),应用在web里的时候,往往是302或是500报错,而正常解密的时候是200

所以这时,我们可以根据服务器的反应来判断我们输入的IV是否正确

举例解释

这里使用参考链接中的数据进行举例说明

我们假设正确的IV为

0x6d 0x36 0x70 0x76 0x03 0x6e 0x22 0x39

middle中间值为(为了方便,这里按8位分组来阐述)

0x39 0x73 0x23 0x22 0x07 0x6a 0x26 0x3d

解密后正确的明文为:

TEST0x040x040x040x04

以攻击者的角度来看,我们可以知道IV的值和服务器的状态,不知道中间值和解密后明文的值,所以我们可以根据输入的IV值和服务器的状态去判断出解密后明文的值,这里的攻击即叫做Padding Oracle Attack攻击,首先输入IV

0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00

一起传到服务器后,服务器对IV后面的加密数据进行解密,得到中间值,然后IV与中间值进行异或,得到明文:

0x39 0x73 0x23 0x22 0x07 0x6a 0x26 0x3d

此时程序会校验最后一位padding字节是否正确。由于是按8位进行分组,所以正确的padding的值应该只有0x01~0x08,这里是0x3d,显然是错误的,所以程序会抛出500。

知道这一点后,我们可以通过遍历最后一位IV,从而使这个IV和middle值异或后的最后一位是我们需要0x01,这时候有256种可能。

这时问题来了,我们为什么要使最后一位是0x01呢?因为此时我们想知道plain[8]的值,只计算最后一位就可以了,只计算最后一位的话只有0x01时服务器才会通过验证,我们才能计算下面的公式。

此时IV的值为:

0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x3c

IV和Middle异或后得到的是:

0x39 0x73 0x23 0x22 0x07 0x6a 0x26 0x01

这时候程序校验最后一位,发现是0x01,即可通过校验,服务器返回200,然后我们有公式:

Middle[8]^原IV[8] = plain[8]
Middle[8]^现IV[8] = 0x01

所以,我们可以算出

middle[8] = 0x01^现IV[8]

然后可以计算得到:

plain[8] = 0x01^现IV[8]^原IV[8] = 0x01^0x3c^0x39=0x04

和我们之前解密成功的明文一致(最后4位为填充),下面我们需要获取plain[7]。
因为这次我们需要的明文是2个0x02,而非之前的一个0x01,所以需要将IV更新

现IV[8] = middle[8]^0x02

为什么是现在的IV[8] = middle[8]^0x02?
因为现在的IV[8]^middle[8]=服务器校验的值,而我们遍历倒数第二位,应该是2个0x02,所以服务器希望得到的是0x02,所以

现IV[8]^middle[8]=0x02

然后再继续遍历现在的IV[7]
方法还是和上面一样,遍历后可以得到IV:

0x00 0x00 0x00 0x00 0x00 0x00 0x24 0x3f

IV和middle异或得到的是

0x39 0x73 0x23 0x22 0x07 0x6a 0x02 0x02

此时真正的明文值:

plain[7]=现IV[7]^原IV[7]^0x02

所以plain[7] = 0x020x240x22=0x04
和我们之前解密成功的明文一致(最后4位为填充)
最后遍历循环,即可得到完整的plain

CBC翻转攻击过程

这个实际上和padding oracle攻击差不多,还是关注这个解密过程。但这时,我们是已知明文,想利用IV去改变解密后的明文

比如我们知道明文解密后是1dmin,我们想构造一个IV,让他解密后变成admin。

还是原来的思路

原IV[1]^middle[1]=plain[1]

而此时,我们想要有如下等式

构造的IV[1]^mddle[1]=’a’

所以我们可以得到

middle[1]=原IV[1]^plain[1]
构造的IV[1] = middle[1]^’a’
构造的IV[1]= 原IV[1]^plain[1]^’a’

我们可以用这个式子,遍历明文,构造出IV,让程序解密出我们想要的明文

Shiro中的攻击

在了解上面的基础知识后,就很好理解后面的攻击流程了,攻击者通过已知 RememberMe 密文使用 Padding Oracle Attack 爆破和篡改密文,构造可解密的恶意的反序列化数据,触发反序列化漏洞。

之前提到过 Padding Oracle Attack 是利用类似于盲注的思想来判断是否爆破成功的,在验证 Padding 失败时的返回信息应该不同,那我们看一下在Shiro中,验证Padding失败时的返回值?

关注点依旧从

AbstractRememberMeManager#getRememberedPrincipals中开始

public PrincipalCollection getRememberedPrincipals(SubjectContext subjectContext) {
    PrincipalCollection principals = null;
    try {
        byte[] bytes = getRememberedSerializedIdentity(subjectContext);
        //SHIRO-138 - only call convertBytesToPrincipals if bytes exist:
        if (bytes != null && bytes.length > 0) {
            principals = convertBytesToPrincipals(bytes, subjectContext);
        }
    } catch (RuntimeException re) {
        principals = onRememberedPrincipalFailure(re, subjectContext);
    }
    return principals;
}

负责解密的 convertBytesToPrincipals 方法会调用 CipherService 的 decrypt 方法,调用栈如下所示如下:

图片

其中 PKCS5Padding#unpad 方法对数据的填充格式进行判断,有问题会返回 -1;当返回值小于0时,CipherCore#doFinal 方法会抛出 BadPadding-Exception 异常;

接着 JcaCipherService#crypt 方法、 AbstractRe-memberMeManager#getRememberedPrincipals 方法均返回异常,而且AbstractRemember-MeManager#getRememberedPrincipals方法还好调用onRememberedPrincipalFailure移除rem-emberMe cookie并添加 deleteMe。

图片

由此可见,只要 padding 错误,服务端就会返回一个 cookie: rememberMe=deleteMe;,攻击者可以借由此特征进行 Padding Oracle Attack。

漏洞复现

直接使用 longofo 师傅的项目。
首先获取一个有效的 rememberMe 值,其次生成一个反序列化利用的 payload,然后使用如下参数执行攻击。

java -jar PaddingOracleAttack-1.0-SNAPSHOT.jar http://localhost:8080/samples_web_war/ "P5MwbBios...sdSdf" 16 cb.ser

经过一段时间后,生成payload,替换rememberMe的值,发送到服务器

图片

这个洞需要大量的请求,在实际中应该不太可能攻击成功。

**问题:
**由于系统初始化后,只要不重启服务器,密钥就固定了,那应该就可以攻击成功一次之后,后面继续攻击应该就不需要大量请求了,可以直接生成payload,但是目前不知道需要保存哪些值才能实现这种需求。

不完全解答:
改了一下代码,目前只实现攻击一次后,ser不变的情况下,可以快速生成,但是ser改变,就需要重新生成。

原因在于原代码是基于nextCipherTextBlock也就是nextBLock计算的tmpIV,继而计算的nextBLock。所以无法通过保存nextBLock或tmpIV达到通用的目标。但我认为从攻击算法的角度来看,还是有办法实现的。

图片

也有师傅对利用代码进行分析后,实现了payload瘦身的功能

漏洞修复

在 1.4.2 版本的更新 Commit 中对此漏洞进行了修复 ,在父类 JcaCipherService 中写了一个抽象方法 createParameterSpec() ,该方法返回加密算法对应的类,并在 AesCipherService 中重写了这个方法,默认使用 GCM 加密模式,避免此类攻击。

图片

shiro反序列化漏洞原理分析及漏洞复现(Shiro-550/Shiro-721反序列化) shiro-550主要是由shiro的rememberMe内容反序列化导致的命令执行漏洞,造成的原因是默认加密密钥是硬编码在shiro源码中,任何有权访问源代码的人都可以知道默认加密密钥。于是攻击者可以创建一个恶意对象,对其进行序列化、编码,然后将其作为cookie的rememberMe字段内容发送,Shiro 将对其解码和反序列化,导致服务器运行一些恶意代码。特征:cookie中含有rememberMe字段修复建议:更新shiro到1.2.4以上的版本。不使用默认的加密密钥,改为随机生成密钥。 阅读详情

相关推荐

Apache Shiro Padding Oracle漏洞可导致远程命令执行漏洞解决

背景:Apach Shiro官方披露其cookie持久化参数rememberMe加密算法存在漏洞,可被Padding Oracle攻击,攻击者利用Padding Oracle攻击手段可构造恶意的rememberMe值,绕过加密算法验证,执行java反序列化操作,最终可导致远程命令执行获取服务器权限,风险极大。 1,漏洞描述: Apache Shiro < 1.4.2 版本中cookie值rememberMe通过AES-128-CBC模式加密,容易受到Padding Oracle攻击。攻击者可以通过以下步骤完成攻击: 1、登录Shiro网站,获取持久化cookie中rememberMe字段的值;

shiro721——CVE-2019-12422

shiro721——CVE-2019-12422

bring_coco的博客 1970

STM32F407 CanOpen主机实战:对象字典配置与多电机CIA402协议驱动详解

本文详细介绍了基于STM32F407的CanOpen主机开发实战,重点解析了对象字典的配置流程与多电机CIA402协议驱动方法。通过使用objdictedit工具配置SDO和PDO参数,并整合CanFestival协议栈,实现了对多个伺服电机的稳定同步控制。文章提供了从硬件连接到代码调试的完整指南,帮助开发者快速掌握工业现场的多轴运动控制技术。

plant的博客 530

【网络安全---漏洞复现】shiro721反序列化漏洞(CVE-2019-12422)原理与漏洞复现和利用(保姆级的详细教程)

shiro721反序列化漏洞(CVE-2019-12422)原理与漏洞复现和利用(保姆级的详细教程);详细还原了漏洞和漏洞利用方式;Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序;

m0_67844671的博客 5766

HTTPDebugger实战:iTunes登录协议抓包与签名验证全解析

HTTPS抓包是分析客户端与服务端交互的重要手段,其原理是通过中间人证书解密TLS流量,从而观察请求与响应细节。在调试iTunes登录协议时,抓包能帮助我们定位签名验证失败、x-timestamp过期等棘手问题。然而,许多教程中常见的mumu模拟器抓包、fiddler手机抓包或charles抓包unknown问题,往往让新手陷入工具陷阱。本文以HTTPDebugger为切入点,从TLS握手到认证请求,系统拆解iTunes登录协议的关键字段与签名机制,覆盖证书配置、进程监听、域名过滤等实战经验,辅以Apple

weixin_30768881的博客 197

帆软js--获取控件和单元格

参数面板: 获取面板控件 ,name为控件名称:_g().parameterEl.getWidgetByName("name") 取值:_g().parameterEl.getWidgetByName("tt3").getValue()2323 赋值:_g().parameterEl.getWidgetByName("tt2").setValue("987") 调用对应的事件比...

江湖行骗老中医 7198

Shiro-721—漏洞分析(CVE-2019-12422)

Shiro-721漏洞的简单分析与总结(CVE-2019-12422)

本散修的一些学习心得与笔记,道友请自便。 1658

HyperLynx实战:手把手教你搞定DDR4信号完整性仿真(附ODT与终端电阻配置避坑)

本文详细介绍了使用HyperLynx进行DDR4信号完整性仿真的实战技巧,重点解析了ODT配置与终端电阻优化的黄金法则。通过模型准备、拓扑构建、ODT扫描等关键步骤,帮助硬件工程师规避常见设计陷阱,提升高速数字电路设计的效率与可靠性。

weixin_30861797的博客 640

Apache Shiro系列漏洞利用以及实战总结

前言: Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。使用Shiro的易于理解的API,可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。内置了可以连接大量安全数据源(又名目录)的Realm,如LDAP、关系数据库(JDBC)、类似INI的文本配置资源以及属性文件等。 目录 RememberMe RCE-550(CVE-2016-4437) 远程安全限制绕过漏洞(CVE-2016-6802) Padding Oracle At

m0_67401417的博客 883

微信小程序 - 实现Java微信支付退款功能以及退款流程,微信小程序前端+java后端完整示例源码,微信小程序退款功能详解,小程序订单申请退款和退款回调方法、查询退款等(新版微信支付,详细示例代码)

微信小程序开发-微信支付退款功能以及退款回调方法,微信支付退款API详解,微信小程序支付V3(支付、退款)Java实现微信小程序开发 小程序支付开发-小程序退款功能,微信小程序小程序和公众号 退款功能教程(含申请退款和退款回调,退款回调地址在商户后台配置或者代码自定义)最新版微信小程序支付,退款问题,小程序支付和退款功能详解,小程序申请退款,小程序处理退款,微信小程序支付与退款java,微信小程序退款及回调,JAVA实现微信小程序支付退款功能,退款api调用报错,如何解决退款申请无响应,如何用实现小程序订单

🏆 前端领域优质创作者 4159

FPGA原型验证(七):如何选择、搭建原型验证平台?

本篇概要::讨论了在项目初期选择目标FPGA平台的重要性,包括自制板卡与购买现成板卡之间的决策。主要是为那些希望建立基于FPGA的原型平台的工程师和设计师提供了深入的技术细节和决策指导,无论是选择自制还是购买现成的解决方案。

叫好与叫座虽然不是对立面,但想在同一个作品中达到双重效果很难。 944

Shiro框架漏洞分析与复现

Apache Shiro是一款开源安全框架,提供身份验证、授权、密码学和会话管理。Shiro框架直观、易用,同时也能提供健壮的安全性,可以快速轻松地保护任何应用程序——从最小的移动应用程序到最大的 Web 和企业应用程序。

未完成的歌~的博客 5316

096、PCIE环回模式(Loopback):调试时自己和自己对话的利器

摘要: PCIE环回模式是调试利器,通过让芯片内部数据自环来定位问题层级。文章详解三种环回模式:物理层环回验证基础收发,数据链路层环回测试DLLP机制,事务层环回验证端到端协议。分享了实战中的典型问题(时钟异常、状态机卡死、计数器失真)和"从下往上"的调试流程,强调要区分调试与生产功能,建议早期验证环回模式。通过具体代码示例和调试案例,说明合理使用环回模式能显著提升排查效率,是PCIE调试必备技能。(149字)

z534437748的博客 106

Apache Shiro 漏洞全解:从原理复现到零信任防御体系构建

摘要:Apache Shiro框架因易用性广泛用于Java Web系统,但其历史漏洞(如反序列化RCE、权限绕过等)曾导致严重安全风险。本文通过Vulhub平台,从漏洞原理、环境搭建、复现到防御四个维度解析Shiro核心漏洞。重点剖析了Shiro-550、Shiro-721和CVE-2020-1957等漏洞的成因与利用方式,并给出手工与工具化复现方法。防御方面建议升级版本、修改默认密钥,构建多层防护体系。文章为安全从业者提供全面的Shiro漏洞攻防指南。(149字)

从零开始,掌握网络安全。提供全面的网络安全教程、攻防演练技巧和行业动态。 987

手把手教你学Simulink——基于经典PID控制的电机系统场景实例:永磁同步电机(PMSM) PID转速控制仿真

*永磁同步电机(PMSM)因其高效、高功率密度和良好的动态响应特性,在现代工业自动化、电动汽车驱动系统等领域得到了广泛应用。为了实现对PMSM的速度精确控制,通常采用矢量控制(Field Oriented Control, FOC)**策略,其中PID控制器是实现速度环和电流环调节的关键组件。本教程将带你使用构建一个基于PID控制的永磁同步电机转速控制系统仿真模型PMSM电机建模矢量控制(FOC)策略实现PID控制器设计系统仿真与调试控制效果分析本文介绍了如何使用构建一个。

MHD0815的博客 6952

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

shiro反序列化-550&721

清楚了shiro的工作流程,工作流程中也说了,是有反序列化操作的,既然有反序列化,就要看我们序列化的内容是否可控,也就是rememberMe字段中的内容是否可控,乍一看肯定是不行的,虽然base64相当于明文,但是AES可不是,AES是有秘钥的,值得回味的是,shiro的默认秘钥是个硬编码写在代码里面了,源码也是默认的,用户也没有更换的话,那么就给了我们构造序列化数据的机会了影响版本。

黑白的博客 6471

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

面试常问的问题:Shiro550漏洞复现详解与shiro721分析

4.我们对shiro服务端进行代码分析。

ddingddding的博客 178

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

shiro组件漏洞分析(二)

官方issues:https://issues.apache.org/jira/browse/SHIRO-721Apache Shiro 1.4.2 之前的版本默认使用 AES/CBC/PKCS5Padding 模式加密,开启 RememberMe 功能的Shiro组件将允许远程攻击者构造序列化数据,攻击者可以在已有的正常登陆的 Cookie rememberMe 值的基础上根据 Padding Oracle Attack 的原理来爆破构造出恶意的 rememberMe 字段,实施反序列化攻击。

why811的博客 375

shiro反序列化漏洞原理分析以及漏洞复现

shiro-550主要是由shiro的rememberMe内容反序列化导致的命令执行漏洞,造成的原因是默认加密密钥是硬编码在shiro源码中,任何有权访问源代码的人都可以知道默认加密密钥。于是攻击者可以创建一个恶意对象,对其进行序列化、编码,然后将其作为cookie的rememberMe字段内容发送,Shiro 将对其解码和反序列化,导致服务器运行一些恶意代码。特征:cookie中含有rememberMe字段修复建议:更新shiro到1.2.4以上的版本。不使用默认的加密密钥,改为随机生成密钥。

hackzkaq的博客 751

Shiro721 反序列化漏洞(CVE-2019-12422)

Apache Shiro 是一个功能强大且灵活的开源安全框架,可以干净地处理身份验证,授权,企业会话 Management 和加密。 Apache Shiro 的首要目标是易于使用和理解。安全有时可能非常复杂,甚至会很痛苦,但不一定如此。框架应尽可能掩盖复杂性,并公开干净直观的 API,以简化开发人员确保其应用程序安全的工作。

qq_68163788的博客 3000

shiro反序列化漏洞原理分析以及漏洞复现(CVE-2016-4437)

shiro-550主要是由shiro的rememberMe内容反序列化导致的命令执行漏洞,造成的原因是默认加密密钥是硬编码在shiro源码中,任何有权访问源代码的人都可以知道默认加密密钥。于是攻击者可以创建一个恶意对象,对其进行序列化、编码,然后将其作为cookie的rememberMe字段内容发送,Shiro 将对其解码和反序列化,导致服务器运行一些恶意代码。特征:cookie中含有rememberMe字段修复建议:更新shiro到1.2.4以上的版本。不使用默认的加密密钥,改为随机生成密钥。

zkaqlaoniao的博客 642
上一篇: Shiro 历史漏洞分析
下一篇: shiro历史漏洞分析—CVE-2020-1957漏洞
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值