当前位置: 首页 > news >正文

shiro CVE-2020-1957

0x00 前言

在之前只是单纯的复现了漏洞,没有记笔记,所以补充了这篇分析笔记。

影响版本:shiro < 1.5.2

0x01 环境搭建

环境用的是:https://github.com/lenve/javaboy-code-samples/tree/master/shiro/shiro-basic

0x02 漏洞复现

CVE-2020-1957 漏洞 主要是权限绕过的问题,spring和shiro对路由的识别不一致,所以就导致了绕过的问题。 主要是两种绕过方式,一种是/a/1/,一种是/xxx/…;/

1. /绕过

首先是直接访问权限校验的接口
在这里插入图片描述
通过 /绕过

在这里插入图片描述

2. /xx/…;绕过

首先是直接访问权限校验的接口
在这里插入图片描述
通过/xx/…;绕过

在这里插入图片描述

0x03 漏洞分析

1、/绕过分析

1.1 shiro部分

先来简单的看一下shiro的原理:

每一次的请求都会从AbstractShiroFilter中走。进入到doFilterInternal进行后续处理。
主要是做了两件事情:

  • 创建Subject
  • 线程绑定execute
    在这里插入图片描述
    我们主要关心的是executeChain

1.1.1 executeChain

executeChain将请求分发给合适的过滤器
在这里插入图片描述
默认是 org.apache.shiro.web.filter.mgt.PathMatchingFilterChainResolver 类型

在这里插入图片描述
获取当前请求路径
在这里插入图片描述
进入循环进行对比,跟到doMatch
在这里插入图片描述在这里进行路径匹配对比,就是和在配置里的内容进行对比
在这里插入图片描述因为匹配规则的问题,shiro会认为/a/1和/a/1/是两个内容,所以,/a/1/不需要校验,所以就放行了。

# 1.2.spring原理

在spring中会忽略/将之前的内容当做参数,所以在sping处理/a/1/的时候会认为请求的是/a/1所以就请求到了权限校验的部分。
在这里插入图片描述

1.3 总结

也就是说,shiro认为/a/1/是一个不需要授权就可以访问的接口,但是spring认为/a/1/访问的是/a/1需要授权的接口,spring认为shiro是安全的,所以直接放行了。

2. /xx/…;绕过分析

2.1 shiro

在 shiro中,当拿到url为/xx/…;/aaa/的时候,会认为访问的是/xx/…,然后再拿着/xx/…在需要进行权限判断的地方找,发现/xx/…不需要权限校验,则放行,交由spring进行处理。
在这里插入图片描述
断点下在:
shiro-web-1.4.2.jar!\org\apache\shiro\web\filter\mgt\PathMatchingFilterChainResolver.class#getChain

慢慢跟,慢慢分析,急不得。
在这里插入图片描述

2.2 Spring

在Spring中会对输入的url进行处理,首先需要处理的是/xx/…;/aaa/1,先通过removeSemicolonContent去掉符号

在这里插入图片描述

那么去除之后就是/xx/…/aaa/1,其实不看源码,也知道这样子的url最终会变成/aaa/1

那么spring最终还是会访问到/aaa/1,绕过了权限限制。

断点下在:
spring-web-5.1.7.RELEASE.jar!\org\springframework\web\util\UrlPathHelper.class#getLookupPathForRequest

在这里插入图片描述

0x04 修复方式

在1.52版本中,在代码中删除了最后的/

在这里插入图片描述处理了/xx/…;/的情况
在这里插入图片描述
以上

http://www.lryc.cn/news/13190.html

相关文章:

  • RabbitMQ 入门到应用 ( 五 ) 基本应用
  • 部署dapr的辛酸历程
  • golang入门笔记——内存管理
  • 97. 约数之和
  • 想和20岁的自己说
  • Unit Test and Integration Test
  • 2022年全国职业院校技能大赛(中职组)网络安全竞赛试题(3)
  • 智慧城市应急指挥中心数字化及城市驾驶舱建设方案
  • HSCSEC 2023 个人练习
  • Android 基础知识4-2.7 RelativeLayout(相对布局)
  • 关于云计算,我们问了ChatGPT 10个问题
  • Netty学习笔记1
  • RISK-V品牌的中国化历程(中)
  • 2023.02.19 学习周报
  • 枚举类的使用方法
  • .NET3.5安装步骤及相关问题。
  • 联想M7268激光打印机开机红绿灯双闪报错不打印
  • 产品经理知识体系:7.web和app产品需求设计
  • 强化学习概述
  • NO.1嵌入式入门笔记:常用命令记录
  • Shell编程
  • 网络模型OSI
  • RT-Thread初识学习-01
  • 二阶段提交事务的实现和缺点
  • 定点数的表示和运算
  • java虚拟机内存分布
  • 最完整的小红书带货笔记——垂直模式
  • SpringBoot实战——个人博客项目
  • 浅谈Spring中事务管理器
  • Python练习系统