目录

0x00 背景

x01 漏洞影响

受影响的范围

0x02 SpEL

类类型表达式

类实例化

变量和函数的使用

0x03 SpEL调试

0x04 实战分析

CVE-2018-1273

攻击Exploit的诞生


0x00 背景

最近Spring框架不大太平,接连爆出来多个RCE远程代码执行的CVE漏洞,其中有CVE-2018-1270,CVE-2018-1273,通过对造成漏洞部分代码进行分析,发现都是因为滥用SpEL的StandardEvaluationContext。

x01 漏洞影响

攻击者可以在未获得授权的情况下,将精心制作的请求参数注入到存在该漏洞的服务器上,从而发起远程代码执行攻击。

受影响的范围

· 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 to 2.0.5 (Kay SR5)
· Spring Data REST 3.0 - 3.0.5 (Kay SR5)
· 更早的版本也会受到影响

0x02 SpEL

SpEL是一门非常简单的表达式语言,但是功能或者权限来说太大了,因此这里如果表达式能够被外部污染,基本上都可以造成RCE。

SpEL的具体语法,我这里就不一一介绍了,详情参考官方文档。我这里只说两个能够被有效利用的点。

类类型表达式

使用类类型表达式还可以进行访问类静态方法及类静态字段。使用T()来表示,其中类名必须是全称,java.lang包除外。因此这里就出现了第一类payload

类实例化

创建一个Java类实例,和上面一样,类名要求是全称。因此这里可以产生第二类payload

变量和函数的使用

在表达式里面要是用变量或者函数,需要提前在context使用setVariable和registerFunction才能使用,因此初步看没有太大利用价值。其中有两个内置变量#root根对象,#this代表Context对象。而在CVE-2018-1273的Spring Data Commons中

context在初始化的时候,没有传入根对象,但是后面显式调用了setRootObject,因此#root为Map对象,利用价值不大,#this为StandardEvaluationContext对象,方法比较多,还在研究中,感觉这里也能提取出一类payload,未完待续。

0x03 SpEL调试

我们在写出来payload后,需要校验一下payload是否有效,可以使用如下的代码快速进行校验。

0x04 实战分析

CVE-2018-1273

上面也贴出来部分造成漏洞的代码,现在把完整的代码贴出来,代码位于org,springframework.data.web.MapDataBinder类中

propertyName是攻击者可以控制的变量,但是代码中将它直接用来生成Expression。但是在使用之前我们发现有一段代码进行propertyName的有效性校验,它用来判断实体类的propertyName属性是否可写。

但是经过我们对这个isWritableProperty函数的分析,我们发现这里存在一个逻辑问题。

这个函数会造成propertyName如果是name和name[huangjacky]返回一个东西。

攻击Exploit的诞生

我们的演示程序中,实体类是这样定义的

因此我们对应的Exploit就应该为:

不出意外的话,这个时候可爱的计算器就出来了。

cve-2018-1273 Spring Expression Language 漏洞分析相关推荐

  1. 【vulhub系列】cve-2018-1273S pring Expression Language 漏洞复现

    记录一次cve-2018-1273S pring Expression Language 漏洞复现 文章目录 前言 一.环境搭建 二.进行漏洞复现 前言 对于漏洞信息和打开docker就不做步骤了. ...

  2. SpringEL 表达式语言(Spring Expression Language)

    Spring学习总结:表达式语言 Spring Expression Language 目录 SpEL简介与功能特性 一.为什么需要Spring表达式语言 二.SpEL表达式Hello World! ...

  3. Spring3 - Spring Expression Language

    1.简介 有别于传统的Spring静态配置,Spring Expression Language的值是在运行时,也就是Spring容器加载时计算出来的. 主要的功能包含: 1)ID引用Bean,执行对 ...

  4. Spring RMI反序列化漏洞分析

    文章目录 概况 ReadObject流程 Jndi注入POC分析 server部分 client部分 恶意类部分 整体的攻击流程 概况 漏洞的入口在于Spring-tx-xxx.jar中的JtaTra ...

  5. SpEL - Spring Expression Language - 快速入门

    文章目录 1. SpEL 1.1 功能 1.1.1 .属性名.方法名(必须是public) - (支持嵌套即多点点) 1.1.1.1 无判空操作 1.1.1.2 有判空操作 = 格式=>属性名? ...

  6. Spring学习总结(四)——表达式语言 Spring Expression Language

    SpEL简介与功能特性 Spring表达式语言(简称SpEL)是一个支持查询并在运行时操纵一个对象图的功能强大的表达式语言.SpEL语言的语法类似于统一EL,但提供了更多的功能,最主要的是显式方法调用 ...

  7. Spring Cloud Gateway远程代码执行CVE-2022-22947漏洞分析及复现

    0x01 漏洞描述 Spring Cloud Gateway 是基于 Spring Framework 和 Spring Boot 构建的 API 网关,它旨在为微服务架构提供一种简单.有效.统一的 ...

  8. linux漏洞分析,Spring-data-commons(CVE-2018-1273)漏洞分析

    前言 CVE-2018-1273 是 Spring-data-commons近期爆出的一个可远程执行代码的漏洞,为了了解更多细节,本文将从漏洞的成因,漏洞的判定以及漏洞的利用三个方面来进行详细说明. ...

  9. wpf window 不执行show 就不能load执行_Numpy反序列化命令执行漏洞分析(CVE-2019-6446)附0day...

    1.介绍 NumPy 是 Python 机器学习库中之一,主要对于多为数组执行计算.NumPy 提供大量的 函数和操作,能够帮助程序员便利进行数值计算.在 NumPy 1.16.0 版本之前存在反序列 ...

最新文章

  1. Redis 的源码分析
  2. 2019中国大学生程序设计竞赛(CCPC)-网络选拔赛-第七题Shuffle Card
  3. 梯度下降与delta法则
  4. 读spring源码(一)-ClassPathXmlApplicationContext-初始化
  5. 会话跟踪之Session
  6. 使用ExtJS做一个用户的增删改查
  7. Tomcat修改源码,重新编译
  8. SDUT OJ 效率至上(线段树)
  9. URAL-1998 The old Padawan 二分
  10. H2_Database 概述、下载与安装、及使用入门
  11. 关于TCP/UDP缓存
  12. EXCEL-VBA函数:公历转农历,返回格式YYYY-MM-DD
  13. 无法访问此网站 - DNS_PROBE_FINISHED_NXDOMAIN
  14. IE主页改不了怎么办
  15. bandit game
  16. 奇虎360 -- 2013年校园招聘技术类笔试题
  17. Datacamp 笔记代码 Supervised Learning with scikit-learn 第四章 Preprocessing and pipelines
  18. ConcurrentHashMap源码解析
  19. 吴晓华当选河北省衡水市市长
  20. 1068: 池塘的水草

热门文章

  1. flutter字体不跟随系统_flutter和native共用字体
  2. 互联网协议 — HTTP/2 超文本传输协议第 2 版
  3. Process monitor词汇汉化
  4. SQLServer · 最佳实践 · RDS for SQLServer 2012权限限制提升与改善
  5. 在C#中使用官方驱动操作MongoDB
  6. 配置Spring数据源c3p0与dbcp
  7. 单用户多角色权限的MSSQL实现
  8. Apache Kudu 1.9.0 发布,支持位置感知
  9. Django的路由系统
  10. Centos 6.4下 MySQL配置主从服务(集群)