shiro反序列化
首先呢,我们要了解shiro反序列化是什么。
Apache Shiro是一个Java安全框架,执行身份验证、授权、密码和会话管理。2016年,网络中曝光1.2.4以前的版本存在反序列化漏洞。
漏洞原理
Apache Shiro框架提供了一个记住我的功能,这个功能在用户登录成功之后,会生成一个加密后的cookie。其中记住我的RememberMe就是cookie中的key。cookie的值是对相关信息进过序列化,再进行aes加密,再使用base64编码之后形成的。
服务端接收cookie值时,也是按照以下步骤解析的:
1.检索RememberMe cookie的值
2.base64解码
3.使用aes解码(加密密钥硬编码)
4.进行反序列化操作(未做过滤处理)
在调用反序列化时未进行任何过滤,导致可以触发远程代码执行漏洞。
漏洞风险
攻击者可以使用Shiro的默认密钥构造恶意序列化对象进行编码 来伪造用户的 Cookie,服务端反序列化时触发漏洞,从而执行命令。
实战过程
前几天,测试某系统的时候。无意间发现,登录的返回包中存在"Set-Cookie: rememberMe=deleteMe; "。
于是我想到,这里会不会存在shiro反序列化呢?于是我掏出shiro_tools,跑了一下。
真就发现了这个漏洞的存在。
可以进行远程代码执行,没想到直接跑出来了。
修复建议
1.使用 最新的 shiro 版本;
2.要确保该密钥的安全性,不要使 用公开的密钥。