• shiro权限绕过


    shiro权限绕过

    什么是shiro

    Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。

    shiro权限绕过的原因

    Apache Shiro是一个Java的安全管理框架,可以和spring一起使用。这次的权限绕过漏洞就出在和spring boot搭配这里。

    shiro框架通过拦截器来实现对用户访问权限的控制和拦截。Shiro常见的拦截器有anon,authc等。

    1. anon:匿名拦截器,不需登录就能访问,一般用于静态资源,或者移动端接口。
    2. authc:登录拦截器,需要登录认证才能访问的资源。

    我们通过在配置文件中配置需要登录才可访问的url,实现对url的访问控制。其中,url的路径表达式为Ant格式。

    shiro权限绕过的限制条件

    • 网站同时使用shiro和spring
    • shiro满足特定的版本

    CVE-2016-6802

    shiro版本:shiro < 1.5.0

    shiro与spring的URI中末尾的/不同导致的权限绕过

    其中*表示匹配零个或多个字符串,/*可以匹配/hello,但匹配不到/hello/因为*通配符无法匹配路径。

    假设/hello接口设置了authc拦截器,访问/hello将会被进行权限判断,如果请求的URI为/hello/呢,/*的URL路径表达式将无法正确匹配,放行。然后进入到spring(Servlet)拦截器,而spring中 /hello 形式和 /hello/形式的URL访问的资源是一样的,从而导致了绕过。

    CVE-2020-1957

    shiro版本:shiro < 1.5.2

    #绕过的payload
    /xxx/..;/hello/aaaa
    /.;/hello/aaaa
    

    通过网络判断,网站处理URI时会先经过 shiro 处理,再转发到 springboot 进行路由分发工作。而在shiro中,在对URI中的;进行处理时会将URI进行截断,然后对/xxx/..进行权限校验,校验通过之后再由springboot进行路由分发,然后springboot会将URI/xxx/..;/hello/aaaa解释为/hello/aaaa,这样我们就可以成功访问到原本访问不到的接口了。

    大致流程如下:

    用户发起请求/xxx/..;/hello/aaaa—–>shiro处理之后返回/xxx/..通过校验的—–>springboot处理/xxx/..;/hello/aaaa返回/hello/aaaa,最后访问到需要权限校验的资源。

    CVE-2020-11989

    shiro版本:shiro < 1.5.3

    这里的 shiro 拦截器需要变成map.put("/hello/*", "authc");,这里有两种poc,都是可以绕过

    #绕过的payload
    /hello/a%25%32%66a
    /;/test/hello/aaa
    

    利用;绕过的大致流程和上面基本一致,而利用编码绕过的流程如下:

    /hello/a%25%32%66a——>传入到shiro自动解码一次变成//hello/a%2fa——>经过 decodeRequestString 变成/hello/a/a

    由于这里我们的拦截器是map.put("/hello/*", "authc");,这里需要了解一下shiro的URL是ant格式,路径是支持通配符表示的。

    ?:匹配一个字符
    *:匹配零个或多个字符串
    **:匹配路径中的零个或多个路径
    

    /*只能命中/hello/aaa这种格式,无法命中/hello/a/a,所以经过 shiro 进行权限判断的时候自然无法命中。

    而在spring当中,理解的 servletPath/hello/a%2fa,所以自然命中@GetMapping("/hello/{name}")这个mapping,又springboot转发到响应的路由当中。

    %25 -- %

    %32 -- 2

    %66 -- f

    %2f -- /

    %3b -- ;

    CVE-2020-13933

    shiro版本: shiro < 1.6.0

    #绕过的payload
    /hello/%3baaaa
    

    上面的代码进来之后,通过 shiro 处理之后变成了/hello/;aaaa,然后shiro会根据;进行截断,返回的 URI自然是/hello/,这个 URI 自然无法命中拦截器map.put("/hello/*", "authc");自然就过了

    SpringBoot默认不解析任何脚本文件,因此一般通过shiro权限绕过进入后台也很难通过文件上传getshell

    参考连接

    shiro权限绕过漏洞详细分析

    shiro权限绕过剖析

    cve-2020-17523

    shiro权限绕过历史

  • 相关阅读:
    【转】2008年中国.NET技术应用趋势分析
    VB计算器(给上学需要应付作业的应个急)
    创业失败的18个原因
    使用ChilkatDotNet组件构建网络爬虫程序
    使用文本编辑器开发和部署一个ASP.NET Web应用程序
    优化 SQL Server 查询性能
    【转】sql性能优化方法
    使用 SOS 对 Linux 中运行的 .NET Core 进行问题诊断
    MultiThread Of Member Functions
    汇编 中断调用表 (中断向量表)
  • 原文地址:https://www.cnblogs.com/tomyyyyy/p/15498635.html
Copyright © 2020-2023  润新知