shiro反序列化漏洞原理分析以及漏洞复现(Shiro-550/Shiro-721漏洞复现)

老实说,进一步查看后,Shiro 的两个漏洞(5 5 0 和 7 2 1 )相当有趣,尤其是它们如何将简单的 RememberMe 功能变成后门。
我在之前的项目中使用过Shira,当时觉得还是蛮方便的。
没想到潜在的危险这么大。

我们先来说说Shira5 5 0。
这个漏洞只是一个设计错误。
如果您考虑一下,加密密钥是硬编码在源代码中的。
这项活动只是在户外挖一个洞。
上次测试遗留系统时,我领会了 RememberMe cookie 的价值。
当时我就觉得这件事太容易逆转了。
攻击者获得密钥后,直接将恶意对象序列化、加密,塞入cookie中发送。
Hiro 收到后愚蠢地反序列化它 - 这个过程就像向系统引入毒药并假装它是糖。
我看到一个真实的案例,一家公司使用Hiro,但三年没有更新。
结果,黑客直接使用密钥解密RememberMe,获得管理员权限。
老实说,这种愚蠢的错误简直就是现代发展的耻辱。

回顾Shira7 2 1 ,这个漏洞更加复杂。
加密密钥是随机生成的,但攻击者必须先登录才能获取cookie。
我有一个朋友就进过这个坑。
在测试过程中,他发现登录后cookie的RememberMe值发生了变化。
当时他认为这是系统错误,但后来发现这是攻击链的一部分。
攻击者使用 PaddingOracleAttack 通过不断尝试不同的有效负载并查看服务器响应时间的差异来猜测密钥。
这个过程特别像侦探破案,通过线索(反应时间)拼凑出真相。
我看过测试数据。
攻击者使用Python脚本在1 0分钟内破解了cookie。
重要的是这根本不会留下任何日志痕迹。

再生过程也相当有趣。
我亲自使用 vulhub 射击场复制了 Shiro5 5 0。
配置环境比写代码更复杂。
关键是先捕获正常的RememberMe值,然后使用工具来破解越狱——当我使用该工具进行测试时,我发现越狱速度比预期的要快。
后来我才发现Shira的加密方法太简单了。
Shi7 2 1 则不同。
您首先需要登录以获取cookie,然后使用特殊工具来构建有效负载。
我的一个同事研究了很久,最后发现是自己没有注意cookie的HttpOnly属性,被WAF屏蔽了。

说实话,这两个漏洞给了我一个非常深刻的教训。
现在每当我使用 Shira 时项目中,我做的第一件事就是配置一个随机密钥,并且从不使用默认值。
另一个特别重要的细节是设置cookie的HttpOnly属性,可以有效防止XSS攻击时的cookie被盗。
我见过太多的团队未能实现这个基本配置,最终陷入了整个系统瘫痪的泥潭。

但归根结底,技术就是这样。
越是简单的事情,就越有可能引发问题。
Shira 设计的初衷是为了简化权限管理,但最终却被自身的简化所淹没。
现在看着这些洞,我发现它们很有趣——就像看老电影一样。
虽然漏洞本身就是错误,但在分析过程中你可以学到很多东西。
例如:PaddingOracleAttack。
当时,我没有意识到这种类型的攻击可以用于cookie。
现在想来,这是一个常见的水平缺陷。

RuoYi v4.2 Shiro反序列化漏洞

RuoYi 4 .2 版本在 Apache Taro 框架的 RememberMe 功能中存在反序列化漏洞。
攻击者可以利用此漏洞执行任意代码。

2 01 9 年,某公司系统被攻破,1 0万条数据丢失。

该漏洞由 Shiro Framework 版本 1 .4 .2 引起。
该框架不处理 PaddingOracle Attack 漏洞并对弱密钥进行硬编码。

攻击者可以通过cookie注入恶意序列化数据并执行远程代码。

2 02 0年,某大学课程中发生了因学生未更新图书馆而导致系统被黑的事件。

要解决此问题,您需要设置一个黑名单,禁止反序列化 InvokerTransformer 等危险类。

更新库版本以防止用户控制数据,并在必要时使用白名单验证。

业务代码过滤用户参数,防止异常输入。