一、漏洞描述
Apache Shiro是一个Java安全框架,执行身份验证、授权、密码和会话管理。Apache Shiro框架提供了记住我(RememberMe)的功能,关闭浏览器再次访问时无需再登录即可访问。shiro默认使用CookieRememberMeManager,对rememberMe的cookie做了加密处理,在CookieRememberMeManaer类中将cookie中rememberMe字段内容先后进行序列化、AES加密、Base64编码操作。服务器端识别身份解密处理cookie的流程则是:
(1)获取rememberMe cookie
(2)base64 解码
(3)AES解密(加密密钥硬编码)
(4)反序列化(未作过滤处理)
但是AES加密的密钥Key被硬编码(密钥初始就被定义好不能动态改变的)在代码里,这就意味着每个人通过源代码都能拿到AES加密的密钥。因此,攻击者可以构造一个恶意的对象,并且对其序列化、AES加密、base64编码后,作为cookie的rememberMe字段发送。Shiro将rememberMe进行解密并且反序列化,最终就造成了反序列化的RCE漏洞。只要rememberMe的AES加密密钥泄露,无论shiro是什么版本都可能会导致该漏洞的产生。
漏洞影响版本:
Apache Shiro <= 1.2.4
二、漏洞环境搭建
1、Centos7 192.168.1.100 服务器
2、Kali 192.168.1.103 攻击机
(1)首先在服务器上通过docker来搭建Apache Shiro的环境
获取docker镜像
docker pull medicean/vulapps:s_shiro_1
重启docker
systemctl restart docker
启动docker镜像:
docker run -d -p 8081:8080 medicean/vulapps:s_shiro_1