shiro历史漏洞分析—CVE-2020-1957漏洞

Apache Shiro权限绕过漏洞深度剖析:从CVE-2020-1957到双编码绕过实战 在Web应用安全领域,权限控制是保障系统安全的核心机制之一,其原理在于通过过滤器链对请求路径进行匹配和拦截。然而,当不同组件对同一URL的解析逻辑存在语义差异时,便可能产生权限绕过漏洞。这类漏洞的技术价值在于揭示了安全边界模糊性带来的风险,常出现在Shiro、Spring Security等主流安全框架与Web容器(如Tomcat)的协作场景中。具体到Apache Shiro框架,其路径匹配器(AntPathMatcher)与Spring MVC的路径解析器在处理特殊字符(如分号、空格)及编码规则时存在认知 阅读详情

声明

出品|先知社区(ID:alter99)

以下内容,来自先知社区的alter99作者原创,由于传播,利用此文所提供的信息而造成的任何直接或间接的后果和损失,均由使用者本人负责,长白山攻防实验室以及文章作者不承担任何责任。

CVE-2020-1957

漏洞信息

漏洞编号:

CVE-2020-1957/CNVD-2020-20984/SHIRO-682
**影响版本:**shiro < 1.5.2
**漏洞描述:**利用Shiro和Spring对URL的处理的差异化,越权并成功访问。
**漏洞补丁:**Commit Commit Commit
**参考:**Shiro权限绕过漏洞详细分析Ruil1n师傅

漏洞分析

SHIRO-682

本漏洞起源于 SHIRO-682。在Spring中,/resource/xx与/resource/xx/都会被截成/resource/xx以访问相应资源;在shiro中,/resource/xx与/resource/xx/被视为两个不同路径。所以在Spring集成shiro时,只需要在访问路径后添加/就存在绕过权限校验的可能。

下面通过复现进行分析(分析、测试版本1.4.2):
首先shiro.ini中[urls]配置如下:

[urls]
# anon:匿名拦截器,不需登录就能访问,一般用于静态资源,或者移动端接口。
# authc:登录拦截器,需要登录认证才能访问的资源。
/login.jsp = authc
/logout = logout
/toJsonPOJO = authc, perms["audit:list"]
/** = anon

输入/toJsonPOJO时,shiro对其进行判断,从shior.ini或其他配置中进行匹配。当匹配到/toJsonPOJO时,匹配成功,跳出循环。

图片

此时,跳转至登陆界面。
输入/toJsonPOJO/时,shiro对其进行判断,当匹配到/toJsonPOJO时,匹配失败,继续匹配;当匹配到/**时,匹配成功,跳出循环。

图片

接着到了springframework中的判断,这里/toJson-POJO/和/toJsonPOJO是可以匹配成功的

图片

此时,成功绕过

图片

其他绕过方式

除了上面的绕过方式,本CVE还存在另一个绕过。利用的是shiro和spring对url中的 ; 处理的差异进行绕过并成功访问。分析、测试版本1.4.2

绕过分析

首先进入Shiro中,首先在

org.apache.shiro.web.filter.mgt.PathMatchingFilterChainResolver.class#getChain处下断点,进行调试,访问http://localhost:8080/xx/…;/toJsonPOJO

图片

单步调试进入this.getPathWithinApplicat-ion(request),在WebUtils#getPathWithinApplicat-ion()中,通过getContextPath(request),获取到上下文信息后,再用getRequestUri(request)获取具体的uri。进入getRequestUri()方法,在return前,获取到的uri为/xx/…;/toJsonPOJO

图片

接下来分析一下return normalize(decodeAndClean-UriString(request, uri));

首先进入decodeAndCleanUriString

传入的参数uri是/xx/…;/toJsonPOJO,然后通过语句int semicolonIndex= uri.indexOf(59);找出uri中分号的位置,59也就是;的ASCII码

如果uri中有分号,就返回分号前的字段,否则返回整个uri。

图片

接着进入normalize,参数uri已经变成/xx/…,normalize内部对传入的路径进行标准化规范处理,相关操作包括替换反斜线、替换//为/等,最后得到返回的uri

此时return normalize(decodeAndCleanUriString-(request, uri));结果为/xx/…,也就是说getRequestUri(request)获取的uri为/xx/…

图片

图片

一路回到getChain,经过上面的步骤,得到requestURI值为/xx/…,接下来在while循环里使用pathMatches(pathPattern, requestURI)进行权限校验,此时只有/**能够与/xx/…匹配成功,/**是anon权限,不需要登陆就能访问,绕过了/toJsonPOJO的authc权限

图片

此时Shiro部分的权限绕过了,那么Spring部分的路径是怎么匹配的呢?

url经过shiro的处理认证通过后,就会进入spring中进行解析,我们在UrlPathHelper#getLookupPath-ForRequest下断点

图片

先进入getPathWithinApplication(),通过this.get-RequestUri(request)获取uri

图片

获取到的uri值为/xx/…;/toJsonPOJO,在return之前进入decodeAndCleanUriString(request, uri)

图片

传进来的参数uri为/xx/…;/toJsonPOJO,经过removeSemicolonContent(uri)后移除uri中/与/之间的的分号以及分号后面的内容;

经过decodeRequestString(request, uri)后对uri进行解码;经过getSanitized-Path(uri)后将路径中//替换为/。此时返回的uri值为/xx/…/toJsonPOJO

图片

图片

步入getPathWithinServletMapping()后,传入的参数pathWithinApp值为/xx/…/toJsonPOJO。

依次通过UrlPathHelper#getServletPath

HttpServletRequestWrapper#getServletPath

Request#getServletPath获取到我们实际访问的url:http://localhost:8080/toJsonPOJO后返回,最终实现绕过权限访问

图片

图片

经过测试当uri为

123;/…;345/;…/.;/alter/…;/;/;///////;/;/;awdwadwa/toJsonPOJO时,Shiro对/123进行权限验证;

图片

Spring的org.springframework.web.util.UrlPathHelper中,getPathWithinApplication(request)值为

/123/…/./alter/…/toJsonPOJO;

图片

图片

this.getPathWithinServletMapping(request, pathWithinApp)值为/toJsonPOJO,可以进行绕过

图片

上面这个payload只能在较低版本的Spring Boot上使用。

根据Ruil1n 师傅介绍:
当Spring Boot版本在小于等于2.3.0.RELEASE的情况下,alwaysUseFullPath为默认值false,这会使得其获取ServletPath,所以在路由匹配时相当于会进行路径标准化包括对%2e解码以及处理跨目录,这可能导致身份验证绕过。

而反过来由于高版本将alwaysUseFullPath自动配置成了true从而开启全路径,又可能导致一些安全问题。

所以在高版本上只能试着寻找逻辑上有没有漏洞,然后进行绕过。比如程序配置了访问路径/alter/** 为 anon,但是指定了其中的一个/alter/page为 authc。这时在不跳目录的情况下,可以使用如下请求绕过:
http://127.0.0.1:8080/alter//;aaaa/;…///////;/;/;awdwadwa/page

漏洞修复

先是在Commit的PathMatchingFilter#pathsMatch和PathMatchingFilterCha-inResolver#getChain方法中添加了对访问路径后缀为/的支持

图片

然后在Commit,除了endsWith还添加了equals的判断。是修复由于上一次提交,导致访问路径为/时抛出的异常。

在Commit中,shiro使用request.getContextPath()、request.getServletPath-()、request.getPathInfo()拼接构造uri替代request.getRequestURI()来修复; 绕过

图片

CVE-2020-1957 shiro权限绕过简单分析 白嫖了腾讯云的服务器,用vulhub起的环境 参考: CVE-2020-1957--Shiro未授权访问_Anony吧的博客-优快云博客_shiro未授权访问 Apache Shiro 认证绕过漏洞(CVE-2020-1957)_维梓梓的博客-优快云博客 https://paper.seebug.org/1196/ 菜鸟教程 - 学的不仅是技术,更是梦想! 漏洞原因:我们请求的URL在整个项目的传入传递过程。在使用了shiro的项目中,是我们请求的URL(URL1),进过shiro权限检验(U 阅读详情

相关推荐

CVE-2020-1957 shiro权限绕过漏洞分析

CVE-2020-1957 shiro权限绕过漏洞分析 0x00 前言 最近在看 CVE-2020-11989 ,11989是CVE-2020-1957后的⼀种绕过⽅法,这漏洞有references 所以按着来复现并写出了一些自己踩坑的点 0x01 漏洞背景 0x02 漏洞环境准备 1.下载demo代码 shiro-basic。https://github.com/lenve/javaboy-code-samples/tree/master/shiro/shiro-basic使用https://m

qq_22807425的博客 1867

CVE-2020-1957 Apache Shiro 认证绕过漏洞

(一)介绍(一)介绍Apache Shiro是一款开源安全框架,它的功能主要用于身份验证、授权、会话管理、加密......漏洞发生原因是:登入的时候序列化保存了登入信息到cookie(序列化、AES加密、Base64)

m0_61506558的博客 2299

Apache Shiro CVE-2020-1957认证绕过漏洞:原理剖析与实战复现

在Web应用安全中,认证与授权是保护敏感资源的核心机制。其原理通常基于请求路径的匹配与校验,通过安全框架拦截未授权访问。然而,当不同组件对同一请求的路径解析逻辑存在差异时,就会产生严重的安全漏洞,导致认证机制被绕过。这种“解析差异性漏洞”具有极高的技术价值和广泛的现实影响,常出现在Web服务器、安全框架与后端应用框架的协作边界。Apache Shiro作为Java领域广泛使用的安全框架,其CVE-2020-1957漏洞正是此类问题的典型代表。该漏洞源于Shiro的Ant风格路径匹配器与Spring MVC(

weixin_30698297的博客 397

JAVA框架漏洞

此次漏洞出现在Apache Solr的DataImportHandler,该模块是一个可选但常用的模块,用于从数据库和其他源中提取数据。漏洞原因:我们请求的URL在整个项目的传入传递过程。Apache Shiro框架提供了Remember Me功能,用户登录成功后会生成经过加密并编码的Cookie,即使关闭了浏览器,再次访问时无需进行登录操作即可以之前的身份访问网站。漏洞的出现就在URL1,URL2和URL3 有可能不是同一个URL,这就导致我们能绕过shiro的校验,直接访问后端需要首选的URL。

weixin_68408599的博客 2455

Apache Shiro CVE-2020-1957漏洞剖析:路径遍历攻击与权限绕过实战

路径遍历攻击是Web安全领域的经典威胁,其核心原理在于利用系统对路径解析的差异,绕过预设的访问控制。在Java Web开发中,安全框架如Apache Shiro通过过滤器链和Ant风格路径匹配机制,为应用提供身份认证与授权能力。然而,当框架的路径匹配逻辑与后端控制器(如Spring MVC)的路径解析行为不一致时,便可能产生上下文相关的安全漏洞,导致权限校验失效。CVE-2020-1957正是这样一个典型案例,攻击者通过构造包含分号路径参数和目录遍历序列的特殊URL,利用Shiro过滤器与Spring MV

weixin_34007886的博客 277

手动挖掘Apache Shiro认证绕过漏洞CVE-2020-1957:BurpSuite实战与攻击者思维

Web安全中的认证绕过漏洞常源于框架与容器对请求路径处理的差异。以Apache Shiro框架为例,其路径匹配机制在特定版本中存在逻辑缺陷,当与Servlet容器的路径参数解析行为不一致时,可能导致权限校验被绕过。这种漏洞的技术价值在于揭示了安全防御中多层解析不一致的风险,常出现在需要精确路径匹配的权限控制场景。本文聚焦CVE-2020-1957漏洞,通过手动利用BurpSuite工具,演示如何通过构造包含分号等特殊字符的路径Payload,结合路径遍历技巧,实现认证绕过。文章深入剖析Shiro的AntPa

weixin_33935636的博客 296

shiro历史漏洞分析—CVE-2020-11989/CVE-2020-13933

shiro历史漏洞分析—CVE-2020-11989/CVE-2020-13933

include_voidmain的博客 2083

Shiro反序列化漏洞应急响应实战:从告警分析到安全加固

在Java Web应用安全领域,身份认证与授权是核心组件。Apache Shiro作为广泛使用的安全框架,其原理是通过过滤器链处理登录、权限等安全逻辑。然而,历史上其反序列化机制存在设计缺陷,攻击者可构造恶意序列化数据,利用默认密钥或特定漏洞绕过安全限制,在服务器上执行任意代码,技术价值在于理解该漏洞可提升整体应用安全水位。典型的应用场景包括各类使用Shiro进行权限管理的企业门户、后台管理系统。本文基于一次真实的Shiro反序列化漏洞应急响应事件,详细拆解了从告警确认、攻击遏制、深度排查到根除恢复的全流程

weixin_27199085的博客 245

从Shiro权限绕过漏洞看Web安全:你的URL解析真的安全吗?(CVE-2020-1957等案例剖析)

本文深入剖析了Apache Shiro框架中的权限绕过漏洞(CVE-2020-1957等),揭示了URL解析不一致导致的安全风险。通过分析Shiro与Spring等组件对URL解析的差异,探讨了路径回溯、分号截断等攻击手法,并提供了权限校验设计的最佳实践和防御策略,帮助开发者构建更安全的Web应用。

weixin_30765505的博客 404

Apache Shiro身份认证绕过漏洞深度剖析:从原理到实战修复

身份认证是Web应用安全的核心防线,其原理在于验证用户身份以控制资源访问。在Java生态中,Apache Shiro作为广泛使用的安全框架,通过过滤器链和路径匹配机制实现认证与授权。然而,当框架的路径匹配逻辑与Servlet容器(如Tomcat)或Web框架(如Spring MVC)的请求解析存在差异时,便可能产生身份认证绕过漏洞,导致攻击者无需合法凭证即可访问受保护资源。这类漏洞的技术价值在于揭示了安全组件与运行环境间“边界一致性”的重要性,是应用安全纵深防御中必须关注的关键风险点。其典型应用场景包括配置

weixin_34379433的博客 454

复现 CVE-2020-1957( Apache Shiro 认证绕过漏洞)

一、漏洞描述 Apache Shiro 1.5.2之前版本中存在安全漏洞。攻击者可借助特制的请求利用该漏洞绕过身份验证。 Shiro框架通过拦截器功能来对用户访问权限进行控制,如anon, authc等拦截器。anon为匿名拦截器,不需要登录即可访问;authc为登录拦截器,需要登录才可以访问。Shiro的URL路径表达式为Ant格式,路径通配符*表示匹配零个或多个字符串,比如:/*可以匹配/hello,但是匹配不到/hello/,因为*通配符无法匹配路径。假设/hello接口设置了authc拦截器,访

记录并分享学习安全的知识点.. 2857

Apache Shiro 漏洞全解:从原理复现到零信任防御体系构建

摘要:Apache Shiro框架因易用性广泛用于Java Web系统,但其历史漏洞(如反序列化RCE、权限绕过等)曾导致严重安全风险。本文通过Vulhub平台,从漏洞原理、环境搭建、复现到防御四个维度解析Shiro核心漏洞。重点剖析了Shiro-550、Shiro-721和CVE-2020-1957等漏洞的成因与利用方式,并给出手工与工具化复现方法。防御方面建议升级版本、修改默认密钥,构建多层防护体系。文章为安全从业者提供全面的Shiro漏洞攻防指南。(149字)

从零开始,掌握网络安全。提供全面的网络安全教程、攻防演练技巧和行业动态。 987

8台 × 8卡 910B NPU之顶尖大模型选型分析

本文对比了2026年主流大语言模型在昇腾910B NPU集群上的部署方案。重点评估了GLM5、MiniMax M2.5、Kimi K2.5、DeepSeek V3.2和Qwen 3.5旗舰版等候选模型,从部署需求(显存占用)、能力表现(基准测试、多模态支持)和NPU生态适配度三个维度进行分析。结果显示DeepSeek V3.2综合表现最优:支持BF16/W8A8/INT4量化,在4TB显存环境下可实现2000+ TPS,首token延迟<100ms,且具备官方NPU支持。备选方案Qwen 3.5旗舰版

FeelTouch Labs 758

别再死记硬背Shiro漏洞了!用Docker+BurpSuite实战复现CVE-2020-1957认证绕过

本文详细解析了Shiro框架中的CVE-2020-1957认证绕过漏洞,通过Docker+Vulhub搭建靶场环境,结合BurpSuite实战演示漏洞复现过程。文章深入探讨了漏洞原理、攻击构造及防御方案,帮助安全工程师从开发者视角理解权限框架的安全隐患,提升渗透测试能力。

weixin_28481133的博客 454

高效IT运维报告编写指南:实战经验与模板分享

本文提供了一份全面的IT运维报告编写指南,涵盖实战经验与实用模板分享。文章详细解析了高效运维报告的核心要素,包括结构设计、数据收集自动化和可视化技巧,并提供了月度报告和故障分析报告模板。通过自动化工具和写作技巧,帮助团队提升报告质量,支持决策和问题追踪。

u5v6w7的博客 927

Hodgkin-Huxley Model

介绍了经典的动力学模型:HH Model

weixin_73557167的博客 2474

Shiro反序列化漏洞实战:超越默认密钥的5种隐蔽检测与利用手法

在Java应用安全领域,反序列化漏洞是攻击者实现远程代码执行(RCE)的常见入口。其原理在于应用将不受信的数据反序列化为对象时,可能触发恶意构造的代码执行链。Apache Shiro作为广泛使用的Java安全框架,其RememberMe功能的AES加密Cookie若密钥泄露或存在逻辑缺陷,便会成为此类漏洞的典型场景,对Web应用安全构成严重威胁。本文聚焦Shiro反序列化漏洞的实战进阶,针对默认密钥检测日益失效的现状,系统阐述了五种隐蔽的漏洞检测与利用思路。这些方法不仅包括基于密钥生成规律的智能爆破与通过信

weixin_33866037的博客 562

A*搜索算法在三维路径规划(避障)中的MATLAB实现与Python实现

A star algorithmA*搜索算法简介A*搜索算法的Python简化代码MATLAB实现启发函数回溯轨迹RRT算法对比A\*算法在三维路径规划中的一些不足 A*搜索算法简介 A*搜索算法是Greedy Best-First算法的改进,因为Greedy Best-First算法只考虑将预估距离(当前节点到目标点的预估距离)作为遴选开节点集的条件。即: priority=heuristic(goal,next)priority=heuristic(goal, next)priority=heurist

ZYunfei的博客 2万+

框架、组件漏洞系列4:Apache shiro漏洞汇总

Apache Shiro提供了认证、授权、加密和会话管理功能,将复杂的问题隐藏起来,提供清晰直观的API使开发者可以很轻松地开发自己的程序安全代码。并且在实现此目标时无须依赖第三方的框架、容器或服务,当然也能做到与这些环境的整合,使其在任何环境下都可拿来使用。认证(Authentication):用户身份识别。有时可看作为“登录(login)”,它是用户证明自己是谁的一个行为。授权(Authorization):访问控制过程,好比决定“认证(who)”可以访问“什么(what)”....

m0_67400973的博客 1342

ZYNQ GP总线实现PS与PL交互

3,完成 ZYNQ7 Processing System 的配置更改后,回到 Diagram 界面中,可以看到新出现了名为 M_AXI_GP0_ACLK、M_AXI_GP0 和 FCLK_CLK0 的接口,下面我们要对这些接口进行连接或引出。此处的偏移量,AXI的相邻寄存器偏移量相差4个字节,默认slv_reg0的偏移量是0,可以推导出slv_reg1,slv_reg2的偏移量分别为4和8,这里只用到了slv_reg0,所以偏移量为0。当然了,窗口数量的增加,势必会使得单个窗口的采样深度变小。

wangjie36的博客 7094

实操微信支付,适合第一次接通微信支付的同学

我的实际操作命令如下:就会生成图3中多出来的file文件夹,/Users/camel/cert/xxxxxx_cert/file/wechatpay_5A4xxxxxxxxxx9.pem,wechatpay_xxxxx5A4849E9.pem就是微信支付平台证书,也是程序真正需要的。•注意:我的操作说明,我是把下载好的 CertificateDownloader.jar 文件,放在了解压证书的目录里(图3)。//下面的静态参数要仔细看下面的解释,否则只会调用别人写好的方法,压根学不会0-1接入微信支付。

wjianwei666的专栏 525

ShiroScan工具解析:自动化检测与利用Apache Shiro反序列化漏洞

Java反序列化漏洞是Web安全领域的常见高危风险,其原理在于攻击者通过构造恶意序列化数据,诱使应用在反序列化过程中执行任意代码。这类漏洞常出现在使用不安全反序列化机制的Java框架中,具有极高的技术价值和实战意义,尤其在企业级应用和红队评估场景下,是获取系统权限的关键突破口。Apache Shiro框架的历史反序列化漏洞(如CVE-2016-4437)正是一个典型案例,其RememberMe功能的AES密钥硬编码缺陷,使得攻击者可在掌握密钥后伪造Cookie触发漏洞。ShiroScan正是针对此场景的自动

weixin_33754065的博客 364

基于DSIFT多尺度图像融合的MATLAB代码

多尺度图像融合是一种常用的图像处理技术,它可以将具有不同尺度和空间频率特征的图像融合成一幅更具信息丰富度和视觉效果的图像。DSIFT算法是一种基于SIFT算法的改进版本,它在提取图像特征时采用了密集采样的方法,能够有效地提取图像的局部特征。多尺度图像融合基于DSIFT算法的思想,通过在不同尺度下提取图像的DSIFT特征,并将这些特征进行融合,得到最终的融合图像。然后,通过DSIFT算法提取了两幅图像的特征。通过运行上述代码,我们可以在MATLAB中实现基于DSIFT多尺度图像融合的算法,并观察到融合结果。

IELLQUI9的博客 181
上一篇: CVE-2019-12422漏洞分析
下一篇: shiro历史漏洞分析—CVE-2020-11989/CVE-2020-13933
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值