[JavaWeb]Shiro漏洞集合——代码审计
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漏洞集合——代码审计的更多相关文章
- Apache Shiro 漏洞汇总
Apache Shiro 漏洞汇总 以下是我个人通过收集信息收集起来的一些Apache Shiro漏洞信息,这些漏洞的poc都是公开的,利用起来也是比较简单 Apache Shiro是什么东西: Ap ...
- Catfish CMS漏洞集合
转自https://larryxi.github.io/ 0x00 背景 版本:V 4.2.35 官网下载:http://www.catfish-cms.com/page/4.html 文章内容仅作学 ...
- javaWeb安全漏洞修复总结
1 Web安全介绍1 2 SQL注入.盲注1 2.1 SQL注入.盲注概述 1 2.2 安全风险及原因 2 2.3 AppScan扫描建议 2 2.4 应用程序解决方案 4 3 会话标识未更新7 3. ...
- 幕布V1.1.9最新版漏洞集合
0X00 前言 幕布本人最早接触是在P神的知识星球里面看到P神推荐的,后来下了个用着还挺好用. 之前一直都放一些零零散散的笔记,最近整理的时候,一时兴起,本着漏洞源于生活的态度,遂对幕布的安全性做了些 ...
- Apache Shiro漏洞复现
利用burp dns进行检测,脚本如下: import sys import uuid import base64 import subprocess from Crypto.Cipher impor ...
- thinkphp漏洞集合
整合了一个集合,方便查询 thinkphp 5.0.22 1.http://192.168.1.1/thinkphp/public/?s=.|think\config/get&name=dat ...
- Tomcat漏洞集合
目录 Tomcat的几大高危漏洞 Tomcat安全措施 Tomcat的几大高危漏洞 1.Tomcat后台弱口令上传war包(Tomcat管理弱口令页面Getshell) 2.Tomcat的PUT的上传 ...
- Windows 2003 Server远程代码执行漏洞集合
目录 MS08-067 CVE-2017-7269 MS08-067 发布日期:2008/10/22 针对端口:139.445 漏洞等级:高危 漏洞影响:服务器服务中的漏洞可能允许远程执行代码 受影响 ...
- Apache Shiro漏洞绕过waf小tips
看了篇文章觉得不错记录下以免以后找不到,原理是通过base64解码特性导致waf不能成功解码绕过waf检测从而进行攻击 解码情况: payload php python openresty java ...
随机推荐
- Excel转Json升级版-Python
Excel转Json升级版 将excel文件夹中所有xslx文件全部转换json文件,存放在data文件夹中: excel中的格式,从序号为2的行开始,2行为key:1行可以自由写注释: 使用时用双击 ...
- 【LeetCode】461. Hamming Distance 解题报告(java & python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 Java解法 方法一:异或 + 字符串分割 方法二: ...
- 【LeetCode】274. H-Index 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址: https://leetcode.com/problems/h-index/ ...
- 【LeetCode】796. Rotate String 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...
- 1144 - Ray Gun
1144 - Ray Gun PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limit: 32 MB You are ...
- 快速恢复update了的orcale数据表
在update的时候 没有写条件 将整个表中的数据全部都更新了,这时候怎么办呢? orcale提供了以下的方法产看某一个时间戳, 所执行的sql的语句内容, 同时可以利用该这个时间戳查看当时语句执行显 ...
- Chapter 7 Confounding
目录 7.1 The structure of confounding Confounding and exchangeability Confounding and the backdoor cri ...
- ECMA-262规范定义的七种错误类型
第一种:Error 所有错误的基本类型,实际上不会被抛出. 第二种:EvalError 执行eval错误时抛出. 第三种:ReferenceError 对象不存在是抛出. 第四种: ...
- Hadoop编译打包记录
Hadoop编译打包,基于2.7.2版本的源码. # 打包过程中需要使用到的工具 java -version mvn -version ant -version type protoc type cm ...
- PHP-FPM 开启慢日志记录
首先,找到 php-fpm 所在的目录: 使用 which php-fpm 使用 whereis php-fpm 然后找到 php-fpm.conf 所在的目录: 使用 ps -ef | grep p ...