【网络安全】漏洞挖掘

ops/2024/10/15 14:54:56/

漏洞描述

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.ppmy.cn/ops/105765.html

相关文章

卷积神经网络(Datawhale X 李宏毅苹果书AI夏令营)

卷积神经网络(Datawhale X 李宏毅苹果书AI夏令营) 卷积神经网络是一种非常典型的网络 架构&#xff0c;常用于图像分类等任务。 一张图像是一个三维的张量&#xff0c;其中一维代表图像的 宽&#xff0c;另外一维代表图像的高&#xff0c;还有一维代表图像的通道&#xff08;…

【web安全】XSS篇

&#x1f3d8;️个人主页&#xff1a; 点燃银河尽头的篝火(●’◡’●) 如果文章有帮到你的话记得点赞&#x1f44d;收藏&#x1f497;支持一下哦 【web安全】XSS篇 简介原理危害 分类反射性XSS存储型XSSDOM XSS&#xff08;特殊的反射XSS&#xff09; 测试工具手工 防护绕过前…

DSP基本名词术语及其关系

前言 信号处理是现代科技和工程领域中一个重要的分支&#xff0c;涉及对各种信号进行采集、传输、处理和分析的一系列方法和技术。其核心概念包括信号、系统、线性系统、时域与频域、稳定性和稳定性等。信号处理技术主要用于对模数转换后和数模转换前的数字信号进行处理&#x…

设计模式 15 解释器模式

设计模式 15 创建型模式&#xff08;5&#xff09;&#xff1a;工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式结构型模式&#xff08;7&#xff09;&#xff1a;适配器模式、桥接模式、组合模式、装饰者模式、外观模式、享元模式、代理模式行为型模式&#xff…

【ES备份和还原索引数据】

文章目录 备份&#xff08;Snapshot&#xff09;还原&#xff08;Restore&#xff09;注意事项示例 在 Elasticsearch 中&#xff0c;备份和还原索引数据通常通过快照&#xff08;Snapshot&#xff09;和恢复&#xff08;Restore&#xff09;机制来实现。以下是详细的操作步骤&…

16 - FFmpeg 视频过滤器 方式2

代码等效密令【测试用】 /**ffmpeg -i 9.5.flv -vf "split[main][tmp];[tmp]cropiw:ih/2:0:0,vflip[flip];[main][flip]overlay0:H/2" -b:v 500k -vcodec libx264 9.5 out.flv * -vf&#xff1a;视频滤镜选项&#xff0c;后面跟着的字符串指定了要应用的多个滤镜。…

SprinBoot+Vue图书馆预约与占座微信小程序的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue3.6 uniapp代码 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍&#xff1a;CSDN认证博客专家&#xff0c;CSDN平…

虚拟现实辅助工程技术助力多学科协同评估

在当今高速发展的经济环境中&#xff0c;制造业面临着多重挑战&#xff0c;包括提高产品性能、压缩设计周期、实现轻量化设计和降低成本。为了有效应对这些挑战&#xff0c;多学科协同评估成为缩短研发周期和提升研制质量的关键手段。 传统的多学科评估面临着数据孤立与融合困难…