freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

CVE-2022-22965 Spring Framework 任意文件写入漏洞
LeiYuan 2024-02-22 13:44:52 310022

简介

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。

挂马成功!

修复建议

  1. 将Spring框架升级到最新版本;
  2. 降低JDK版本至JDK8;
  3. 将Tomcat升级至最新版本;
  4. 利用WAF、IPS等应用层的入侵检测设备,针对目前公开的EXP是通过POST上传jsp文件,参数中都带有class、classloader等字段,进行关键字过滤;
# web安全 # 漏洞分析
本文为 LeiYuan 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
LeiYuan LV.2
这家伙太懒了,还未填写个人描述!
  • 2 文章数
  • 0 关注者
WebGoat_身份认证绕过
2024-02-22
文章目录