【组件攻击链】一文看懂 Spring 全家桶各类 RCE 漏洞

本文深入探讨Spring全家桶,包括Spring Framework、Spring Boot、Spring Cloud、Spring Security和Spring MVC。文章详细介绍了SpEL(Spring Expression Language)的工作原理和常见操作,如字符串、类和集合操作。通过示例展示了SpEL在注解、XML配置和代码块中的使用。此外,文章列举并分析了多个高危漏洞,如CVE-2018-1270、CVE-2018-1273等,解释了如何利用这些漏洞进行远程代码执行,并提供了补丁分析。通过本文,读者将了解Spring组件的安全风险及其防范措施。
摘要由CSDN通过智能技术生成

一、Spring 全家桶简介

Spring 发展到现在,全家桶所包含的内容非常庞大,这里主要介绍其中关键的 5 个部分,分别是 spring framework、 springboot、 spring cloud、spring security、spring mvc。其中的 spring framework 就是大家常常提到的 spring, 这是所有 spring 内容最基本的底层架构,其包含 spring mvc、springboot、spring core、IOC 和 AOP 等等。Spring mvc 就是 spring 中的一个 MVC 框架,主要用来开发 web 应用和网络接口,但是其使用之前需要配置大量的 xml 文件,比较繁琐,所以出现 springboot,其内置 tomcat 并且内置默认的 XML 配置信息,从而方便了用户的使用。下图就直观表现了他们之间的关系。

而 spring security 主要是用来做鉴权,保证安全性的。Spring Cloud 基于 Spring Boot,简化了分布式系统的开发,集成了服务发现、配置管理、消息总线、负载均衡、断路器、数据监控等各种服务治理能力。

整个 spring 家族有四个重要的基本概念,分别是 IOC、Context、Bean 和 AOP。其中 IOC 指控制反转,在 spring 中的体现就是将对象属性的创建权限回收,然后统一配置,实现解耦合,便于代码的维护。在实际使用过程中可以通过 autowired 注解,不是直接指定某个类,将对象的真实类型放置在 XML 文件中的 bean 中声明,具体例子如下:

<bean name="WelcomeService" class="XXX.XXX.XXX.service.impl.WelcomeServiceImpl"/>

Spring 将所有创建或者管理的对象称为 bean,并放在 context 上下文中统一管理。至于 AOP 就是对各个 MVC 架构的衔接层做统一处理,增强了代码的鲁棒性。下面这张图就形象描述了上述基本概念。 

二、各子组件介绍

Spring 发展至今,整个体系不断壮大,子分类非常庞大,这里只对本次涉及的一些组件做简单的介绍。

首先是 Spring Websocket,Spring 内置简单消息代理。这个代理处理来自客户端的订阅请求,将它们存储在内存中,并将消息广播到具有匹配目标的连接客户端。Spring Data 是一个用于简化数据库访问,并支持云服务的开源框架,其主要目标是使数据库的访问变得方便快捷。Spring Data Commons 是 Spring Data 下所有子项目共享的基础框架,Spring Data 家族中的所有实现都是基于 Spring Data Commons。简单点说,Spring Data REST 把我们需要编写的大量 REST 模版接口做了自动化实现,并符合 HAL 的规范。Spring Web Flow 是 Spring MVC 的扩展,它支持开发基于流程的应用程序,可以将流程的定义和实现流程行为的类和视图分离开来。

 

三、使用量及使用分布

根据全网数据统计,使用 Spring 的网站多达 80 万余,其中大部分集中在美国,中国的使用量排在第二位。其中香港、北京、上海、广东四省市使用量最高。通过网络空间搜索引擎的数据统计和柱状图表,如下图所示。

 

四、漏洞背景介绍(SpEL 使用)

1、SpEL 是什么

SpEL 是基于 spring 的一个表达式语言,类似于 struts 的 OGNL,能够在运行时动态执行一些运算甚至一些指令,类似于 Java 的反射功能。就使用方法上来看,一共分为三类,分别是直接在注解中使用,在 XML 文件中使用和直接在代码块中使用。

2、SpEL 能做什么

● 基本表达式

包括逻辑运算,三目运算和正则表达式等等。

● 类操作表达式

对象方法调用,对象属性引用,自定义函数和类实例化等等。

● 集合操作表达式

字典的访问,投影和修改等等。

● 其他表达式

模板表达式

3、SpEL demo

基于注解的 SpEL

可以结合 sping 的 @Value 注解来使用,可以直接初始化 Bean 的属性值

 

在这种情况下可以直接将 test 的值初始化为 AAA

此外,还有很多其他注解的使用方式,可以结合上面提到的表达式的四种使用模式。

基于 XML 的 SpEL

可以直接在 XML 文件中使用 SpEL 表达式如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns=" 
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"       
       xsi:schemaLocation="http://www.springframework.org/schema/beans       
                        http://www.springframework.org/schema/beans/spring-beans.xsd">    
    <bean id="world" class="java.lang.String">      
      <constructor-arg value="#{' World!'}"/>    
    </bean>    
    <bean id="hello" class="java.lang.String"&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

倾听铃的声

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值