漏洞描述 #
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
或者使用vulfocus靶场
2. exp
地址:
访问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