首页 > 其他分享 >Spring 相关CVE分析复现

Spring 相关CVE分析复现

时间:2024-11-07 17:32:43浏览次数:1  
标签:匹配 admin Pattern 复现 Spring pattern CVE true

Spring Security 相关的鉴权绕过

CVE-2022-22978

成因

  • HttpSecurity路由鉴权模块中采用regexMatchers进行匹配,而regexMatchers中正则匹配不会去匹配\r\n导致绕过

影响版本

  • Spring Security 5.4.x < 5.4.11
  • Spring Security 5.5.x < 5.5.7
  • Spring Security 5.6.x < 5.6.4

漏洞代码

1.第一个前提
.regexMatchers("/admin/.*").authenticated()
2.是Mapping中写法需要匹配全路径
@GetMapping("/admin/**")
@GetMapping("/admin/123") //这样指定了具体路由的不行
public String Bye(){
    return "OKKK";
}

绕过

  • 通过/admin/%0D或者/admin/%0A/admin等进行绕过
  • 不过这个绕过之后只能返回**中的路由返回的,其他具体路由都不行,其实实战没啥用

具体分析

  • 因为这里用了正则匹配,而JAVA中的正则匹配会使用Pattern类定义规则,Matcher类进行匹配,而此版本下的正则采用默认的匹配规则模式,导致无法匹配\n\r,从而绕过
  • 可以看到该版本下,只有一个对于大小写的可选模式
  • 而官方的修复就是匹配规则多采用一个Pattern.DOTALL模式即可匹配回车换行符,可以看到5.6.4修复如下

测试代码

Pattern pattern = Pattern.compile("a.*b");
System.out.println(pattern.matcher("aaabbbb").matches()); //true
System.out.println(pattern.matcher("aaab\rbbb").matches()); //false
Pattern pattern1 = Pattern.compile("a.*b",Pattern.DOTALL);
System.out.println(pattern1.matcher("aaabbbb").matches()); //true
System.out.println(pattern1.matcher("aaab\nbbb").matches()); //true

此外在Go中也有这个现象,不过只是没法匹配\n\r是可以的

pattern := regexp.MustCompile("a.*b")
fmt.Println(pattern.MatchString("aaabbbb"))  //true
fmt.Println(pattern.MatchString("aaa\rbb"))  //true
fmt.Println(pattern.MatchString("aaa\nbbb")) //false
pattern = regexp.MustCompile("(?s)a.*b")
fmt.Println(pattern.MatchString("aaa\nbbb")) //true

如果Go框架有什么组件使用这个做底层进行匹配的话,可能也会存在绕过现象

标签:匹配,admin,Pattern,复现,Spring,pattern,CVE,true
From: https://www.cnblogs.com/SpuerCh3nry/p/18533128

相关文章

  • 【漏洞复现】灵当CRM multipleUpload.php 任意文件上传漏洞
    免责声明:        本文旨在提供有关特定漏洞的信息,以帮助用户了解潜在风险。发布此信息旨在促进网络安全意识和技术进步,并非出于恶意。读者应理解,利用本文提到的漏洞或进行相关测试可能违反法律或服务协议。未经授权访问系统、网络或应用程序可能导致法律责任或严......
  • Jasypt工具类(jasypt-spring-boot-starter)
    importorg.jasypt.encryption.pbe.PooledPBEStringEncryptor;importorg.jasypt.encryption.pbe.config.SimpleStringPBEConfig;publicclassJasyptUtil{/***Jasypt生成加密结果*@parampassword配置文件中设定的加密盐值*@paramvalue加密值*@......
  • Springboot 配置yml文件 ENC 加密及failed to bind properties under '********' to j
    1.添加依赖<dependency><groupId>com.github.ulisesbocchio</groupId><artifactId>jasypt-spring-boot-starter</artifactId><version>3.0.3</version></dependency>2.设置加密盐......
  • Springboot游戏网站322mj(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表用户,游戏信息,游戏分类,拍卖行,卖家,装备购买,游戏周边,周边购买,点卡充值,充值信息,处罚公示,处罚申诉,商品分类开题报告内容一、研究背景与意义随着信息技术......
  • 【揭秘】Spring Boot配置文件与日志文件的神秘面纱!开发者必看!
    SpringBoot的配置文件与日志文件是应用程序配置和运行日志管理的关键组成部分。下面将详细介绍这两种文件:SpringBoot配置文件基本概述:SpringBoot支持多种配置文件格式,包括.properties、.yml和.yaml。.properties是传统的键值对形式,简单易懂,但当配置结构复杂时容易......
  • 【揭秘】Spring AOP:面向切面编程的神秘面纱!你也能成为编程高手
    SpringAOP(Aspect-OrientedProgramming,面向切面编程)是Spring框架中的一个重要特性,它允许开发者将横切关注点(如日志记录、事务管理、性能监控等)从业务逻辑代码中分离出来,通过定义切面(Aspect)来模块化这些横切关注点。1.SpringAOP基础1.1引入依赖首先,需要在项目中引入Sprin......
  • SpringBoot整合Thymeleaf详解
    文章目录SpringBoot整合Thymeleaf详解一、引言二、SpringBoot与Thymeleaf的整合1、配置Thymeleaf1.1、添加依赖1.2、配置属性2、创建Controller三、编写Thymeleaf模板四、总结SpringBoot整合Thymeleaf详解一、引言在现代JavaWeb开发中,SpringBoot因其简化配置和......
  • 这可能是最好的Spring教程!即便无基础也能看懂的入门Spring,仍在持续更新。
    开启这样一个系列的原因    这一段时间都在学spring,但是在学习的过程中一直都很难找到一个通俗易懂,又带了学习体系的文章教程,很多地方都不懂,需要自己去慢慢查询和理解,感觉学起来很耗时,所以我自己就像写一个这样能通俗易懂的Spring入门,让其他想我一样的小白也能速通入门。 ......
  • SpringBoot推荐图书阅读系统6c613 带论文文档1万字以上,文末可获取,
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表系统内容;用户,图书分类,图书信息开题报告内容一、课题背景与意义随着信息时代的到来,图书馆和在线阅读平台的书籍数量急剧增加,用户在寻找适合自己的阅读材料时......
  • SpringBoot外卖服务系统k83px 本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表系统内容:用户,商家,店铺信息,菜品分类,菜品信息,店铺公告开题报告内容一、研究背景与意义随着互联网技术的飞速发展,人们的生活方式正在发生深刻变革。在餐饮......