一.shiro反序列化漏洞介绍
1.漏洞简介
Apache Shiro是一款开源企业常见JAVA安全框架,提供身份验证、授权、密码学和会话管理。java中的权限框架有SpringSecurity和Shiro,由于Spring功能强大但复杂,Shiro的简单强大,扩展性好因此用的还是很多。【CVE-2016-4437】
保存用户信息时,需要将对象序列化为字符串,然后由服务器传输给客户端,并保持到cookie中。
浏览器再次向服务器提交数据时,服务器需要将数据****反序列化为对象进行使用,这时就会执行恶意代码。
数据是由客户端提交的,攻击者可以修改这个数据,增加恶意代码,然后发送给服务器。
2.漏洞原理
Apache Shiro框架提供了记住我的功能(RememberMe),用户登录成功后会生成经过加密并编码的cookie。cookie的key为RememberMe,cookie的值是经过相关信息进行序列化,然后使用AES加密(对称),最后再使用Base64编码处理。服务端在接收cookie时:
检索RememberMe Cookie的值
Base 64解码
AES解密(加密密钥硬编码)
进行反序列化操作(未过滤处理)
攻击者可以使用Shiro的默认密钥构造恶意序列化对象进行编码来伪造用户的Cookie,服务端反序列化时触发漏洞,从而执行命令。
3.利用过程
shiro默认使用了CookieRememberMeManager,其处理cookie的流程是:
得到rememberMe的cookie值 –> Base64解码 –> AES解密 –> 反序列化