0x01 Apache Shiro

Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。

0x02 漏洞简介

2021年2月1日,Apache Shiro官方发布漏洞通告,漏洞编号为:CVE-2020-17523。

当Apache Shiro与Spring框架结合使用时,攻击者可以通过构造特殊的HTTP请求数据包,绕过身份认证匹配规则。

0x03 漏洞复现

环境搭建

使用tomcat部署shiro1.7.0.war包。

公众号回复shiro获取下载链接。

复现过程

访问admin下面的资源/admin/1跳转到登录界面:



使用payload:/admin/%20绕过身份验证,成功访问admin页面:



0x04 漏洞分析

漏洞成因

代码中,Shiro会对请求的uri进行鉴权操作,Shiro的校验uri的函数为PathMatches,当PathMatches返回true时才会进入鉴权。

然而PathMatches("/admin/*","/admin/ ")返回结果为false,因此访问/admin/ 这个uri时Shiro不会进行鉴权操作,

但是Spring接收到的uri则是/admin/%20,会正常返回响应admin page

代码分析

代码执行过程中调用tokenizeToStringArray方法,而当调用此方法时trimTokens参数值为true

而在tokenizeToStringArray方法中,trimTokenstrue时调用了trim()函数,去除了空格字符,导致未进行鉴权操作:

简单总结下,在存在漏洞Shiro版本中,执行tokenizeToStringArray方法时trimTokens值为true,导致uri中的空格字符被清除,因此代码并没有经过鉴权处理,然而Spring接受到的uri:/admin/%20会正常返回响应,最终导致身份验证被绕过。

利用Shiro与Spring处理uri的不同规则绕过身份验证。

0x05 影响版本

Apache Shiro < 1.7.1

0x06 修复方案

官方修复方案中,将tokenizeToStringArray方法中的trimTokens置为false

建议升级到Apache Shiro 1.7.1版本

公众号回复shiro获取漏洞环境

CVE-2020-17523:Apache Shiro身份认证绕过漏洞分析的更多相关文章

  1. Shiro学习总结(3)——Apache Shiro身份认证

    身份验证,即在应用中谁能证明他就是他本人.一般提供如他们的身份ID一些标识信息来表明他就是他本人,如提供身份证,用户名/密码来证明. 在shiro中,用户需要提供principals (身份)和cre ...

  2. Vulhub-Mysql 身份认证绕过漏洞(CVE-2012-2122)

    前言 当连接MariaDB/MySQL时,输入的密码会与期望的正确密码比较,由于不正确的处理,会导致即便是memcmp()返回一个非零值,也会使MySQL认为两个密码是相同的.也就是说只要知道用户名, ...

  3. Apache shiro集群实现 (三)shiro身份认证(Shiro Authentication)

    Apache shiro集群实现 (一) shiro入门介绍 Apache shiro集群实现 (二) shiro 的INI配置 Apache shiro集群实现 (三)shiro身份认证(Shiro ...

  4. Shiro身份认证---转

    目录 1. Shro的概念 2. Shiro的简单身份认证实现 3. Shiro与spring对身份认证的实现 前言: Shiro 可以非常容易的开发出足够好的应用,其不仅可以用在 JavaSE 环境 ...

  5. AppWeb认证绕过漏洞(CVE-2018-8715)

    AppWeb认证绕过漏洞(CVE-2018-8715) 一.漏洞描述 Appweb简介 Appweb是一个嵌入式HTTP Web服务器,主要的设计思路是安全.这是直接集成到客户的应用和设备,便于开发和 ...

  6. Shiro身份认证-JdbcRealm

    Subject 认证主体 Subject认证主体包含两个信息 Principals : 身份,可以是用户名.邮箱.手机号等,用来标识一个登录主体身份. Credentials : 凭证,常见有密码,数 ...

  7. Shiro身份认证授权原理

    shiro在应用程序中的使用是用Subject为入口的, 最终subject委托给真正的管理者ShiroSecurityMannager Realm是Shiro获得身份认证信息和来源信息的地方(所以这 ...

  8. Shiro身份认证、盐加密

    目的: Shiro认证 盐加密工具类 Shiro认证 1.导入pom依赖 <dependency> <groupId>org.apache.shiro</groupId& ...

  9. shiro身份认证

    pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w ...

随机推荐

  1. Laravel使用Observer(观察者)

      1.创建observer文件,我这里是要记录仓库库存模块的操作日志,所以执行下面的语句,会在app/Observers下面创建WarehouseInventoryObserver文件. php a ...

  2. Linux中grep和egrep命令详解

    rep / egrep 语法: grep  [-cinvABC]  'word'  filename -c :打印符合要求的行数-i :忽略大小写-n :在输出符合要求的行的同时连同行号一起输出-v ...

  3. HGAME_easyVM

    64位的exe,拖入ida64静态分析一波. 一.先是一大堆的赋值语句,有点懵,后面在分析handler的时候,也直接导致了我卡壳,这里还是得注意一下这些局部变量都是临近的,所以可以直接看成一个连续数 ...

  4. 《Do Neural Dialog Systems Use the Conversation History Effectively? An Empirical Study》

    https://zhuanlan.zhihu.com/p/73723782 请复制粘贴到markdown 查看器查看! Do Neural Dialog Systems Use the Convers ...

  5. 从2021强网杯的一道题学习docx文件操作

    [强网先锋]寻宝 啊对就是这道题,大佬们都贼快,菜如我还得慢慢整 key1 大佬们都一笔带过,哎,虽然简单,但是也别这么虐我们啊 我来简单写一下吧 <?php header('Content-t ...

  6. [zebra源码]分片语句ShardPreparedStatement执行过程

    主要过程包括: 分库分表的路由定位 sql语句的 ast 抽象语法树的解析 通过自定义 SQLASTVisitor (MySQLSelectASTVisitor) 遍历sql ast,解析出逻辑表名 ...

  7. QT. 学习之路 一

    初识QT 一:   hello-world: #include "mainwindow.h" #include <QApplication> #include < ...

  8. 传统.NET 4.x应用容器化体验(1)

    我们都知道.NET Core应用可以跑在Docker上,那.NET Framework 4.x应用呢?借助阿里云ECS主机(Windows Server 2019 with Container版本), ...

  9. 【spring源码系列】之【Bean的初始化】

    只要不放弃,希望迟早都会到来! 1. Bean的初始化 如果把bean的生命周期看作一个婴儿诞生过程的,那么创建实例相当于婴儿从母体出来,一丝不挂光秃秃:属性赋值相当于给宝宝的头带帽子,上身穿衣服.下 ...

  10. [003] - JavaSE面试题(三):JavaSE语法(1)

    第一期:Java面试 - 100题,梳理各大网站优秀面试题.大家可以跟着我一起来刷刷Java理论知识 [003] - JavaSE面试题(三):JavaSE语法(1) 第1问:& 和 & ...