1、影响版本
Apache Shiro < 1.5.2
2、漏洞原因
Shiro框架通过拦截器功能来对用户访问权限进行控制,如anon, authc等拦截器。anon为匿名拦截器,不需要登录即可访问;authc为登录拦截器,需要登录才可以访问。
3、漏洞复现
这里使用的环境是kali中的vulhub和docker。
进入/vulhub/shiro/CVE-2020-1957目录,执行docker-compose up -d开启环境。
访问http://IP:8080,出现如下页面:
抓取数据包,将url修改为/admin
访问,在响应中可以看到响应码是302重定向。
再次将url修改为/xxx/...;/admin
,响应码为200,成功访问。
4、绕过原理
我们请求的URL在整个项目的传入传递过程,在使用了shiro的项目中,是我们请求的URL(URL1),经过shiro权限检验(URL2), 最后到springboot项目找到路由来处理(URL3)。漏洞的出现就在URL1,URL2和URL3 有可能不是同一个URL,这就导致我们能绕过shiro的校验,直接访问后端需要首选的URL。