【网络安全】漏洞挖掘

news2024/9/22 15:33:36

漏洞描述

Spring框架为现代基于java的企业应用程序(在任何类型的部署平台上)提供了一个全面的编程和配置模型。

Spring Cloud 中的 serveless框架 Spring Cloud Function 中的 RoutingFunction 类的 apply 方法将请求头中的“spring.cloud.function.routing-expression”参数作为 Spel 表达式进行处理,造成Spel表达式注入,攻击者可通过该漏洞执行任意代码。

利用条件

3.0.0.RELEASE <= Spring Cloud Function <= 3.2.2

环境搭建

在官方网页新建一个 Spring boot 项目(https://start.spring.io/)、使用idea启动。

t01a6390da1a7dc96bc.jpg

修改 pom.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>17</java.version>
<spring-cloud.version>2021.0.1</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-function-context</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-task</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-function-webflux</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-function-dependencies</artifactId>
<version>3.2.2</version>
<type>pom</type>
</dependency>

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-function-web</artifactId>
<version>3.2.2</version>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

</project>

最后访问 http://127.0.0.1:8080. 出现以下页面表示成功。

【一一帮助安全学习,所有资源获取处一一】
①网络安全学习路线(文中提到的)
②20份渗透测试电子书
③安全攻防357页笔记
④50份安全攻防面试指南
⑤安全红队渗透工具包
⑥网络安全必备书籍(文中提到的)
⑦100个漏洞实战案例
⑧安全大厂内部视频资源
⑨历年CTF夺旗赛题解析

t0164527df56ee9a243.jpg

漏洞复现

漏洞原理

apply方法会将http头部中的Spel表达式进行解析,从而造成Spel表达式注入。

查看官方diff

t015d7efaef903a9715.jpg

t01318b79c886f8c416.jpg

进入springframework/cloud/function/context/config/RoutingFunction文件。进入调试模式、将断点添加到apply()方法。

t011224341ff22fadbb.jpg

进入到apply()方法后、会调用route() 在该方法中会去判读input是否为 message的实例,function 是否为空、然后进入else if 去获取头信息、获取key值 spring.cloud.function.routing-expression 、在中间会对有无空格做判断。然后继续向下走。

t014d2f96789d58f2fd.jpg

会进入到springframework/cloud/function/context/config/RoutingFunction/functionFromExpression()方法。

t01a01d3622b0bdfe47.jpg

routingExpression 会做为参数传入到 springframework/expression/common/TemplateAwareExpressionParser/parseExpression()方法中。

t0161908062a2cbcf89.jpg

判读其context是否为none值 在进入

springframework/expression/spel/standard/SpelExpressionParser/doPareExpression() 会new 一个 InternalSpelExpressionParser 类调用 doPareExpression() 继续跟进。

t0102a1a099bc8c5e27.jpg

在springframeworl/expression/spel/stand/InternalSpelExpressionParser/doParseExpression()方法中、会在tokenizer.process()中 对token进行 源码与字节码的判断操作、继续向下。

t0186bd3a27048b16bd.jpg

会new 一个SpelExpression() 跟进到

springframwork/expression/spel/standard/SpelExpression/SpelExpression()。

t014d24dc80dca4e616.jpg

SpelExpression()方法中会将将表达式赋值到this.expression继续跟进 return到 springframework/expression/spel/standard/SpelpressionParser/doParseExpression()、继续return到springframework/expression/common/TemplateAwareExpressionPareser/pareExpression()、return
springframework/cloud/function/context/config/RoutingFunction/functionFromExpression()

t013c4af6eb1ef249bc.jpg

在functionFromExpression()方法中会进入MessageUtils.toCaseInsensitiveHeadersStructure()。

t01998ffbb758a487c1.jpg

调用MessageStructureWithCaseInsensitiveHeaderKeys(),进入到putAll()方法 获取message中头信息。

t017b4852c2849bc934.jpg

最后会进入漏洞触发点。

t011f93cfffb35c7ef0.jpg

漏洞测试

Payload 的构造可以参考官方测试用例。

image.png

本次利用创建文件测试。使用payload touch /tmp/xxxxxx.test.test。

image.png

t01e6aa507c11faa341.jpg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2085065.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

餐饮_零售_麻辣烫_水果店_零食店_生鲜店等收银系统

介绍 多商户多门店的Sass收银系统。适用于餐饮_零售_麻辣烫_水果店_零食店_生鲜店等收银系统&#xff0c;包含windows收银pos端、商家小程序管理端、商家运营端、电子会员、电子小票 软件架构 收银Pos&#xff1a;vue2、node、electron、sqlite、antd 后端服务&#xff1a;spri…

【如何用本机的Navicat远程连接到ubuntu服务器上的mysql】

文章目录 版本一、ubuntu服务器安装mysql5二、远程连接——mysql配置1.创建新mysql用户2.修改配置文件3.查看端口是否开启 三、远程连接——Navicat 版本 mysql:5.7.32 服务器&#xff1a;ubuntu20.04 PC:win10 一、ubuntu服务器安装mysql5 因为ubuntu20.04默认mysql其实是my…

Windows超好用的命令行工具--Cmder 赶紧把cmd丢了吧!

简介 Cmder 是一个现代化的命令行工具可以智能提示&#xff0c;高亮显示文件夹… 1. 官网地址&#xff1a;Cmder下载地址 2. 滑倒最下面可以看到以下按钮 3. 解压到自己想要保存的地址&#xff08;⚠️记住这个路径&#xff09; 比如我解压到了C:\Cmder\Cmder.exe(⚠️不推…

变天了!24岁硕士年薪50万元,博士年薪200万起!人才缺口100万

从上海交大硕士毕业的00后表示&#xff0c;“24岁硕士毕业时年薪50万元&#xff0c;到了30岁大概能升到P7(注&#xff1a;职级名称&#xff09;&#xff0c;那时就能年薪百万了。” 他今年入职腾讯&#xff0c;担任AI算法工程师&#xff0c;成为AI风口下第一批就业的年轻人。 …

CUDA 内核函数

文章目录 一、简介二、实现代码三、实现效果参考资料 一、简介 CUDA为我们提供了可扩展的编程模型&#xff1a;它的核心是三个关键的抽象——线程组的层次结构、共享内存和阻塞同步——它们只是作为一组最小的语言扩展暴露给外部使用人员。这些抽象提供细粒度数据并行性和线程并…

MyBatis的学习————上篇

目录 一、MyBatis简介 1、MyBatis的历史 2、MyBatis的特性 3、和其它持久化层技术的比较 二、搭建MyBatis 1、开发环境 ​编辑2、创建Maven工程 3、创建MyBatis核心配置文件 4、创建mapper接口 5、创建Mybatis的映射文件 6、测试功能 7、功能优化 8、修改和删除方…

重生奇迹MU最合适PK的几个职业

重生奇迹MU是一款备受玩家青睐的经典游戏&#xff0c;其中的PK系统更是吸引了众多玩家的关注。在众多职业中&#xff0c;哪些职业最适合PK呢&#xff1f; PK作为重生奇迹MU的一种娱乐方式&#xff0c;已成为该游戏核心系统之一&#xff0c;并在多年的流行中仍能带给玩家许多乐…

python正则表达式的一些问题

&#x1f3c6;本文收录于《CSDN问答解惑-专业版》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收…

Matplotlib中twinx() 函数的用法

ax1.twinx() 是 Matplotlib 库中的一个函数&#xff0c;用于在同一个图中创建一个共享 x 轴但具有独立 y 轴的双 y 轴图表。这个函数非常适合用来在同一张图中绘制两组具有不同 y 轴度量的变量&#xff0c;使得它们可以共享 x 轴&#xff0c;但彼此之间有不同的 y 轴尺度。 ax…

SpringBoot日常:Spring扩展接口之InitializingBean

文章目录 简介源码分析应用场景代码示例运行示例 简介 这篇文章主要介绍了Spring中InitializingBean的使用详细解析&#xff0c;InitializingBean是Spring提供的拓展性接口&#xff0c;提供了属性初始化后的处理方法,它只有一个afterPropertiesSet方法&#xff0c;凡是继承该接…

中断的引入

中断系统是为使CPU具有对外界紧总事件的实时处理能力而设置的 当中央处理机CPU正在处理某件事的时候外界发生了紧急事件请求&#xff0c;要求CPU暂停当前的工作&#xff0c;转而去处理这个紧急事件&#xff0c;处理完以后&#xff0c;再回到原来被中断的地方&#xff0c;继续原…

进程间的同步与互斥

1、计数信号量及其初始化 由于事件发生的次数可能不止一次&#xff0c;或者资源可用的数量可能不止一个&#xff0c;因此&#xff0c;信号量内部会维护一个计数器&#xff0c;用于表示某种事件发生的次数或者某种资源可用的数量。 信号量至少提供两种操作&#xff1a;一种等待…

flutter 手写时钟

前言&#xff1a; 之前看过别人写的 js实现的 时钟表盘 挺有意思的&#xff0c;看着挺好 这边打算自己手动实现以下。顺便记录下实现过程&#xff1a;大致效果如下&#xff1a; 主要技术点&#xff1a; 表盘内样 倒角&#xff1a; 表盘下半部分是有一点倒角的感觉&#xff0c;…

YOLOv8独家改进:轻量化改进 | 高效移动应用的卷积加性自注意Vision Transformer

💡💡💡本文独家改进:轻量化改进之高效移动应用的卷积加性自注意Vision Transformer,构建了一个新颖且高效实现方式——卷积加性相似度函数,并提出了一种名为卷积加性标记混合器(CATM) 的简化方法来降低计算开销 💡💡💡性能比较:计算量参数量均有一定程度降低…

别盲目选择!2024年超级兔子与TOP3数据恢复,效率比拼全记录

在现在这个数字化的社会里&#xff0c;数据对我们来说太重要了。不管是家里的照片、工作文件&#xff0c;还是那些记录着美好时光的视频&#xff0c;要是弄丢了&#xff0c;肯定特别着急。不过别担心&#xff0c;今天咱们就来聊聊几款Windows系统上的数据恢复好帮手——超级兔子…

布局容器Grid、StackPanel、GroupBox、DockPanel、WrapPanel

Grid——网格布局&#xff0c;其中控件或容器需指定位置 StackPanel——堆叠面板&#xff0c;其中的控件水平布局、竖直布局 DockPanel——停靠面板&#xff0c;内部控件或容器可以放置在上、下、左、右 WrapPanel——可以看作是具有自动换行功能的StackPanel容器。窗体太小…

360杀毒恢复查杀的软件

360的查杀恢复区不太好找&#xff0c;特此记录&#xff1a; 主界面/管理中心面板/安全操作中心 安全操作中心/可恢复区&#xff1a;

UE5蓝图 抽卡出货概率

SSR概率0.1 SR概率0.2 R概率0.7 ps&#xff1a;数组内相加为1。且从小到大排序。

单片机相关面试问题精选

1. 基础概念类问题 什么是单片机&#xff1f;它有哪些主要应用&#xff1f; 答案要点&#xff1a;单片机是一种集成在单一芯片上的微型计算机&#xff0c;包含CPU、存储器、输入输出接口等&#xff0c;广泛应用于工业自动化、智能家居、汽车电子、医疗设备等领域。它能够实现复…

黑神话:悟空热背后的散热秘密:无压烧结银

黑神话&#xff1a;悟空热背后的散热秘密&#xff1a;无压烧结银 随着《黑神话:悟空》这款高画质、高性能要求的游戏在全球范围内的火爆&#xff0c;玩家们对于游戏设备的性能需求也达到了前所未有的高度。为了满足这种对极致游戏体验的追求&#xff0c;游戏主机和高端显卡等硬…