简介
Spring Framework 是 Spring 里面的一个基础开源框架,主要用于 JavaEE 的企业开发。
前置知识
SpringMVC参数绑定
为了方便编程,SpringMVC 支持将 HTTP 请求中的的请求参数或者请求体内容,根据 Controller 方法的参数,自动完成类型转换和赋值。Controller 方法可以直接使用这些参数,避免了需要编写大量的代码从HttpServletRequest 中获取请求数据以及类型转换。同时,SpringMVC 支持多层嵌套的参数绑定。
Java Bean PropertyDescriptor
PropertyDescriptor 是 JDK 自带的 java.beans 包下的类,意为属性描述器,用于获取符合 Java Bean 规范的对象属性和 get、set 方法。
Spring BeanWrapperImpl
在 Spring 中,BeanWrapper 接口是对 Bean 的包装,定义了大量可以非常方便的方法对 Bean 的属性进行访问和设置。BeanWrapperImpl 类是 BeanWrapper 接口的默认实现,BeanWrapperImpl.wrappedObject 属性即为被包装的 Bean 对象,BeanWrapperImpl 对 Bean 的属性访问和设置最终调用的是 PropertyDescriptor。
Tomcat AccessLogValve 和 access_log
Tomcat 的 Valve 用于处理请求和响应,通过组合了多个 Valve 的 Pipeline,来实现按次序对请求和响应进行一系列的处理。其中 AccessLogValve 用来记录访问日志 access_log。Tomcat 的 server.xml 中默认配置了AccessLogValve,所有部署在 Tomcat 中的 Web 应用均会执行该 Valve。
配置文件中的重要属性 class.module.classLoader.resources.context.parent.pipeline.first.pattern:Tomcat日志文件的文件内容 class.module.classLoader.resources.context.parent.pipeline.first.suffix:Tomcat日志文件的文件后缀 class.module.classLoader.resources.context.parent.pipeline.first.directory:Tomcat日志文件的存放路径 class.module.classLoader.resources.context.parent.pipeline.first.prefix:Tomcat日志文件的文件名 class.module.classLoader.resources.context.parent.pipeline.first.fileDateFormat:Tomcat日志文件的日期后缀(空值即可)
旧版本的 Spring Framework 中存在任意文件写入漏洞,被利用会导致 RCE。
SpringMVC 支持将 HTTP 请求中的的请求参数或者请求体内容,根据 Controller 方法的参数,自动完成类型转换和赋值,同时 SpringMVC 支持多层嵌套的参数绑定。攻击者通过 HTTP 请求修改日志文件的文件名、文件内容、文件后缀、文件存放路径参数的值,从而在服务器生成木马文件。
JDK 版本:JDK 9+
Spring Framework 版本:
Spring Framework 5.3.X < 5.3.18
Spring Framework 5.2.X < 5.2.20
注:其他小版本未更新均受影响
中间件:Tomcat
环境搭建
下载 Tomcat 9.0.60
下载地址:https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.60/bin/
解压即可使用
部署 WAR 包
下载地址:https://pan.baidu.com/s/1MHQkPA0kvdhyTR0sXToPFQ?pwd=squ5
将提前下载好的项目 war 包放置在 ~\apache-tomcat-9.0.60\webapps 目录下。
先将该目录下的ROOT文件夹删除,再将下载后的项目war包放置于该目录,并更改名为ROOT.war。
开启Tomcat
启动文件 startup.bat 在 ~\apache-tomcat-9.0.60\bin 目录下,直接双击启动。
运行框中出现Spring字样,则代表项目war包部署成功,并且停在“毫秒后服务器启动”便代表Tomcat运行成功。
PS:启动文件中文乱码
修改 ~\apache-tomcat-9.0.60\conf 目录下 logging.properties 文件
将所有的 UTF-8 修改为 GBK 即可
再次双击启动即可
漏洞利用
访问目标网站
访问网址:http://IP:8080
运行EXP文件
下载地址:https://pan.baidu.com/s/1cLwdSmQKclc9xqRy6rTPlA?pwd=g6tt
命令:python exploit.py --url http://IP:8080/
文件执行成功,并生成木马文件 xiaoyuan.jsp,木马参数为 cmd。
挂马成功!
- 将Spring框架升级到最新版本;
- 降低JDK版本至JDK8;
- 将Tomcat升级至最新版本;
- 利用WAF、IPS等应用层的入侵检测设备,针对目前公开的EXP是通过POST上传jsp文件,参数中都带有class、classloader等字段,进行关键字过滤;