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

本文介绍了Spring全家桶的关键组件,包括Spring Framework、Spring Boot、Spring Security等,详细讲解了SpEL的使用和原理。文章还深入探讨了多个高危漏洞,如CVE-2018-1270、CVE-2018-1273等,分析了漏洞的利用链和补丁机制,提醒开发者注意安全风险并及时更新版本。
摘要由CSDN通过智能技术生成

image

一、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配置信息,从而方便了用户的使用。下图就直观表现了他们之间的关系。

image

而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"/>

image.png

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

image

image

二、各子组件介绍

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的扩展,它支持开发基于流程的应用程序,可以将流程的定义和实现流程行为的类和视图分离开来。

image

三、使用量及使用分布

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

image

image

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

1、SpEL是什么

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

2、SpEL能做什么

● 基本表达式

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

● 类操作表达式

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

● 集合操作表达式

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

● 其他表达式

模板表达式

3、SpEL demo

基于注解的SpEL

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

image.png

在这种情况下可以直接将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">     
       <constructor-arg value="#{'Hello'}#{world}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值