[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 ...
随机推荐
- 【LeetCode】778. Swim in Rising Water 水位上升的泳池中游泳(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址: https://leetcode.com/problems/swim-in- ...
- 【LeetCode】211. Add and Search Word - Data structure design 添加与搜索单词 - 数据结构设计
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 公众号:负雪明烛 本文关键词:Leetcode, 力扣,211,搜索单词,前缀树,字典树 ...
- 【剑指Offer】10- I. 斐波那契数列 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 个人微信公众号:负雪明烛 目录 题目描述 解题方法 递归 动态规划 日期 题目地址:htt ...
- anaconda 如何更换镜像源
今天需要对anaconda更换其镜像源. 故而做一个小记: 一 查看anaconda的本源方法 电脑路径:C:\Users\14269,找到 .condarc 文件. 打开.condarc文件,可看 ...
- linux中网络存储与考试系统搭建(实现多用户可以共享文件)
上期内容回顾 1.数据备份的方式有哪些 全量和增量 2.数据备份的命令有哪些 都有哪些优点缺点 cp : 本地复制,全量复制 scp : 远程复制,全量复制 rsync : 远程复制,增量复制 3.r ...
- FP增长算法
Apriori原理:如果某个项集是频繁的,那么它的所有子集都是频繁的. Apriori算法: 1 输入支持度阈值t和数据集 2 生成含有K个元素的项集的候选集(K初始为1) 3 对候选集每个项集,判断 ...
- C# 服务器发送邮件失败
邮件发送相关端口 首先说下邮件发送的端口:25/465/587 25端口 25端口是为SMTP协议服务开放的,是这三个端口中最老的一个.25端口也称为消息中继端口,因为这个端口经常被恶意利用,所以现在 ...
- linux下备份mysql数据
一.业务场景 自己现在做的项目基本上已经开发完成,正式开始上线运行,主要包含两个子项目一个是小程序的后台,一个是后台管理系统. 正式开始运行一段时间后,基本上也没什么BUG了,整个项目都已经能够正常的 ...
- JS 数组的基本使用和案例
知识点汇总: 数组:就是一组数据的集合,存储在单个变量的方式 自变量创建数组 var 数组名字 = ['a','b'] // []里面的是数据的元素,可为任意字符类型 利用new创建数组 var 数组 ...
- hadoop 之 常用基本操作
HDFS 常用命令(hadoop fs.hadoop dfs.hdfs dfs): hadoop fs -ls 显示当前目录结构,-ls -R 递归显示目录结构 hadoop fs -mkdir 创建 ...
