shiro权限绕过
什么是shiro
Apache Shiro是一个强大且易用的java安全框架,执行身份验证、授权、密码和会话管理,使用Shiro的APi,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。
shiro权限绕过的原因
Apache Shiro是一个ava的安全管理框架,可以和spring一起使用。
shiro框架通过拦截器来实现对用户访问权限的控制和拦截。
Shiro常见的拦载器有anon,authc等。
1.anon: 匿名拦截器,不需登录就能访问,一般用于静态资源,或者移动端接口。
2.authc: 登录拦截器,需要登录认证才能访问的资源。
shiro权限绕过的限制条件
网站同时使用shiro和spring(两个匹配规则不一样,然后绕过)
shiro满足特定的版本
CVE-2016-6802
shiro版本: shiro < 1.5.0
shiro与spring的URI中末尾的/不同导致的权限绕过
其中表示匹配零个或多个字符串,/ 可以匹配/admin,但匹配不到/admin/因为*****通配符无法匹配路径
假设/admin接口设置了authc拦截器,访问/admin将会被进行权限判断,如果请求的URI为/admin/呢,/*的URL路径表达式将无法正确匹配,放行。然后进入到spring(Servlet)拦截器,而spring中/admin形式和/admin/形式的URL访问的资源是一样的,从而导致了绕过。
CVE-2020-1957
shiro版本: shiro < 1.5.2
#绕过的payload
/xxx/..;/admin/
/.;/admin/
通过网络判断,网站处理URI时会先经过 shiro 处理,再转发到 springboot 进行路由分发工作。而在shiro中,在对URI中的;进行处理时会将URI进行截断,然后对/xxx/…进行权限校验,校验通过之后再由springboot进行路由分发,然后springboot会将URl/xxx/…;/admin/解释为/admin/,这样我们就可以成功访问到原本访问不到的接口了。
验证流程大致如下:
客户端发起请求/xxx/…;/admin/。
shiro处理之后返回/xxx/…校验通过。
springboot处理/xxx/…;/admin/返回/admin/。
最后访问到需要权限校验的资源。
复现过程:
直接url后面跟admin,发现跳转到登录页面
登录页面因为网络问题,显示不全
我们url后面url/xxx/…;/admin/就会绕过登录直接进入admin界面
burpsuite直观演示
正常抓取页面显示,返回也是200
后面加/admin/,发现302跳转
再用构造的payload查看,正常返回
流量特征
基本看url/xxx…;/admin/就能看出来