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. Nacos配置中心+ASP.NET Core

    Nacos配置中心 nacos 是一个构建云原生应用的动态服务发现.配置管理和服务管理平台.. 源码已上传至 github 配置管理 asp.net core中所有的配置项,如appsetting.j ...

  2. 【LeetCode】1041. Robot Bounded In Circle 解题报告(Python)

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

  3. 【LeetCode】543. Diameter of Binary Tree 解题报告 (C++&Java&Python)

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

  4. Labeling Balls(poj3687)

    Labeling Balls Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 13109   Accepted: 3782 D ...

  5. Towards Evaluating the Robustness of Neural Networks

    目录 概 主要内容 基本的概念 目标函数 如何选择c 如何应对Box约束 attack attack attack Nicholas Carlini, David Wagner, Towards Ev ...

  6. Python Revisited Day 08 (高级程序设计技术)

    目录 8.1 过程型程序设计进阶 8.1.1 使用字典进行分支 8.1.2 生成器表达式与函数 8.1.3 动态代码执行与动态导入 动态程序设计与内省函数(表) 动态代码执行 eval(), exec ...

  7. Kernel Methods for Deep Learning

    目录 引 主要内容 与深度学习的联系 实验 Cho Y, Saul L K. Kernel Methods for Deep Learning[C]. neural information proce ...

  8. [C++]C++ STL库函数大全

    #include <assert.h> //设定插入点 #include <ctype.h> //字符处理 #include <errno.h> //定义错误码 # ...

  9. 在linux(deepin)系统下查看当前ip地址与用户名

    在linux(deepin)系统下查看当前ip地址与用户名 查看当前ip地址 方式一: hostname -I 方式二: ifconfig -a 如下图所示: 其中192.168.11.66即为当前系 ...

  10. [opencv]白平衡算法中的灰度世界法,改善图像发红发蓝发绿的现象

    #include<iostream> #include <opencv2/opencv.hpp> #include <math.h> using namespace ...