Shiro漏洞集合

Shiro其实就是一组Filter,他会进行验证,鉴权,会话 Management,再把请求转到web过滤器。所以最好先去对Shiro有个整体性的了解。

复现环境:https://github.com/ttestoo/java-sec-study/tree/main/sec-shiro/java-shiro-bypass

全部的基于这个项目改下shiro的版本就好啦

全文是基于已知spring/tomcat的路径转发规则URI处理(漏洞),访问/x/s/==/x/s。有机会再去跟下tomcat的处理逻辑,这里一个问题很容易跑偏

Shiro682

这个漏洞感觉更像是springweb的漏洞,我也不知道为啥叫shiro的洞。请求路径为 /x/s/ ,正常情况下,不就应该是访问不到该文件嘛,我的shiro没匹配到也是很正常啊,结果spring直接允许 /x/s/===/x/s,导致了这个漏洞,最后还让shiro背锅。虽然说吧Shiro确实就是起防护的作用的,但我还是心不甘。。。



这里直接访问/admin/index是会重定向到/login的



但是访问/admin/index/后却会成功绕过验证

漏洞分析

在这里主要是拿着url路径去匹配过滤器的路径规则,用以判断是否需要进入验证\鉴权等Filters

直接跟到AntPathMatcher#doMatch操作,进行路径分析

说一下简要的匹配规则:就是先以/分隔符将匹配串和路径串切割成数组,然后将每个数组里的字符串进行比较,知道匹配完或者出现不一致,然后进入结果判定,对于因为**而产生不一致,导致比较结束的,都返回匹配成功,如果是完全一样也会匹配成功,而完全成功匹配的就会进入对于的FilterChain,例如LoginFilter进行验证。看下图中可以发现,它还会对最后是否有/进行判断,当我们使用/admin/index/时,匹配到/admin/index时,由于最后没有/所以显示不匹配,既然不匹配,那就不会进入FilterChain。但可恶的是/admin/index/到了web中却会被fix下,变为/admin/index,Shiro确实做到了严格匹配,但web却瞎搞,所以我才觉得这个洞属于Shiro有点。。

所以最终就可以利用/admin/index/进行绕过了

漏洞修复

官方就直接加了一种判断,会把路径后面多的/给删了;但是个人觉得可以将原来代码的判定是否都有/ 删除就好,只要/中间的字符不匹配,就返回false,反之则返回true,应该就可以解决问题

CVE-2020-1957

漏洞简介

  • 当使用http://127.0.0.1:9091/;admin/index 会跳转到/index界面;而当使用http://127.0.0.1:9091/;/admin/index,又可以直接跳到/admin/index界面从而造成未授权访问漏洞



漏洞分析

  • 直接访问/;/admin/index

  • 可以看到,到FilterChain时的字符串还是传进入的/;/admin/index,但经过getPathWithinApplication()处理后的却只有/,说明是无法识别分号。而/肯定是无法满足需要进行过滤的匹配串,所以就不会进入指定的登陆验证



    可以看到其中以分号进行了截断

在对getPathWithinApplication()进行跟入分析的时候,直接发现了另外一个二次URL解码+用原数据验证的漏洞。也就是后续的CVE-2020-11989。

  • 等判断链结束后,却发现传入的是原来的/;/admin/index,这也就导致了后续的解析漏洞

Shiro的验证绕过原理已经搞清楚了,接下来是弄清楚,为什么像 /;/admin/index这种路径,在后端会被成功解析为/admin/index,并进行了拼接(测试盲猜又是对其进行了分号截断,但截取的是后面的部分)

漏洞修复

由原来直接获取,到后来利用上下文获取。 统一了request.getServletPath()来处理路径再进行比较,这里是Shiro主动去兼容Spring和tomcat

CVE-2020-11989

在上面的过程中已经发掘了,就不再分析了

漏洞修复

下面是1.5.2版本之前的,又给改了回来。

修改后采用的和tomcat后端获取的方式一样,这样就统一了。

本来先想着不研究为什么恶意payload的到了web端可以被解析为正常的资源路径,因为那是后面的事,我们的目标就是绕过Shiro。但转头一想绕过Shiro不简单,直接/;;;??一通,这样Shiro不就可以绕过了。畸形路径好弄,解释不了的是为什么服务器可以处理畸形路径到正确的路径资源???,否则上面讲的都是无意义的。(其实我就不喜欢那种说一半的文章,总是让人琢磨不清,很多细节的东西都不讲明白,不过我也是菜鸟,我只是尽量解释清盲点)

这里可以另外一篇文章进行分析:Tomcat URL解析差异性导致的安全问题(本来想自己写,后面发现这篇文章讲的很详细,已经可以把上述的问题解释清楚了)

[JavaWeb]Shiro漏洞集合——代码审计的更多相关文章

  1. Apache Shiro 漏洞汇总

    Apache Shiro 漏洞汇总 以下是我个人通过收集信息收集起来的一些Apache Shiro漏洞信息,这些漏洞的poc都是公开的,利用起来也是比较简单 Apache Shiro是什么东西: Ap ...

  2. Catfish CMS漏洞集合

    转自https://larryxi.github.io/ 0x00 背景 版本:V 4.2.35 官网下载:http://www.catfish-cms.com/page/4.html 文章内容仅作学 ...

  3. javaWeb安全漏洞修复总结

    1 Web安全介绍1 2 SQL注入.盲注1 2.1 SQL注入.盲注概述 1 2.2 安全风险及原因 2 2.3 AppScan扫描建议 2 2.4 应用程序解决方案 4 3 会话标识未更新7 3. ...

  4. 幕布V1.1.9最新版漏洞集合

    0X00 前言 幕布本人最早接触是在P神的知识星球里面看到P神推荐的,后来下了个用着还挺好用. 之前一直都放一些零零散散的笔记,最近整理的时候,一时兴起,本着漏洞源于生活的态度,遂对幕布的安全性做了些 ...

  5. Apache Shiro漏洞复现

    利用burp dns进行检测,脚本如下: import sys import uuid import base64 import subprocess from Crypto.Cipher impor ...

  6. thinkphp漏洞集合

    整合了一个集合,方便查询 thinkphp 5.0.22 1.http://192.168.1.1/thinkphp/public/?s=.|think\config/get&name=dat ...

  7. Tomcat漏洞集合

    目录 Tomcat的几大高危漏洞 Tomcat安全措施 Tomcat的几大高危漏洞 1.Tomcat后台弱口令上传war包(Tomcat管理弱口令页面Getshell) 2.Tomcat的PUT的上传 ...

  8. Windows 2003 Server远程代码执行漏洞集合

    目录 MS08-067 CVE-2017-7269 MS08-067 发布日期:2008/10/22 针对端口:139.445 漏洞等级:高危 漏洞影响:服务器服务中的漏洞可能允许远程执行代码 受影响 ...

  9. Apache Shiro漏洞绕过waf小tips

    看了篇文章觉得不错记录下以免以后找不到,原理是通过base64解码特性导致waf不能成功解码绕过waf检测从而进行攻击 解码情况: payload php python openresty java ...

随机推荐

  1. Excel转Json升级版-Python

    Excel转Json升级版 将excel文件夹中所有xslx文件全部转换json文件,存放在data文件夹中: excel中的格式,从序号为2的行开始,2行为key:1行可以自由写注释: 使用时用双击 ...

  2. 【LeetCode】461. Hamming Distance 解题报告(java & python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 Java解法 方法一:异或 + 字符串分割 方法二: ...

  3. 【LeetCode】274. H-Index 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址: https://leetcode.com/problems/h-index/ ...

  4. 【LeetCode】796. Rotate String 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...

  5. 1144 - Ray Gun

    1144 - Ray Gun    PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 MB You are ...

  6. 快速恢复update了的orcale数据表

    在update的时候 没有写条件 将整个表中的数据全部都更新了,这时候怎么办呢? orcale提供了以下的方法产看某一个时间戳, 所执行的sql的语句内容, 同时可以利用该这个时间戳查看当时语句执行显 ...

  7. Chapter 7 Confounding

    目录 7.1 The structure of confounding Confounding and exchangeability Confounding and the backdoor cri ...

  8. ECMA-262规范定义的七种错误类型

    第一种:Error    所有错误的基本类型,实际上不会被抛出.   第二种:EvalError   执行eval错误时抛出. 第三种:ReferenceError    对象不存在是抛出. 第四种: ...

  9. Hadoop编译打包记录

    Hadoop编译打包,基于2.7.2版本的源码. # 打包过程中需要使用到的工具 java -version mvn -version ant -version type protoc type cm ...

  10. PHP-FPM 开启慢日志记录

    首先,找到 php-fpm 所在的目录: 使用 which php-fpm 使用 whereis php-fpm 然后找到 php-fpm.conf 所在的目录: 使用 ps -ef | grep p ...