【网络安全】漏洞挖掘

news/2024/9/19 0:55:17/ 标签: web安全, 安全, 网络安全, 系统安全

漏洞描述

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/news/1521624.html

相关文章

8、Django Admin后台中添加Logo

在项目settings.py文件 # 导入os&#xff0c;并且修改DIRS内容如下所示 import os TEMPLATES [{BACKEND: django.template.backends.django.DjangoTemplates,DIRS: [os.path.join(BASE_DIR, templates/)],APP_DIRS: True,OPTIONS: {context_processors: [django.template.con…

Nginx运维规范及安全配置

1.禁止在location字段对所有请求进行转发 location / {root html;index index.html idindex.htm;proxy_pass http://100.x.x.x:xxx/; }没有对url请求进行过滤&#xff0c;将所有请求转发到后台服务&#xff0c;会导致攻击类的URL被转发到后台&#xff0c;存在安全隐患 禁止使用…

glsl着色器学习(四)

前面讲到已经创建了程序对象&#xff0c;链接到顶点着色器和片段着色器&#xff0c;接着继续。 const positionLoc gl.getAttribLocation(prg, position); const normalLoc gl.getAttribLocation(prg, normal); const texcoordLoc gl.getAttribLocation(prg, texcoord);cons…

数据结构:(LeetCode101)对称二叉树

给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 示例 1&#xff1a; 输入&#xff1a;root [1,2,2,3,4,4,3] 输出&#xff1a;true示例 2&#xff1a; 输入&#xff1a;root [1,2,2,null,3,null,3] 输出&#xff1a;false提示&#xff1a; 树中节点数目在范围…

无需更换摄像头,无需施工改造,降低智能化升级成本的智慧工业开源了。

智慧工业视觉监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒&#xff0c;省去繁琐重复的适配流程&#xff0c;实现芯片、算法、应用的全流程组合&#xff0c;从而大大减少企业级应用约95%的开发成本。用户只需在界面上…

数理金融工程毕业之后求职应用方向,量化交易方面如何

炒股自动化&#xff1a;申请官方API接口&#xff0c;散户也可以 python炒股自动化&#xff08;0&#xff09;&#xff0c;申请券商API接口 python炒股自动化&#xff08;1&#xff09;&#xff0c;量化交易接口区别 Python炒股自动化&#xff08;2&#xff09;&#xff1a;获取…

国产隔离放大器:增强信号完整性和系统安全性的指南

隔离放大器是电子领域的关键组件&#xff0c;特别是在信号完整性和电气隔离至关重要的应用中。这些放大器隔离输入和输出信号&#xff0c;使它们能够在没有直接电气连接的情况下跨不同系统传输数据。这确保了电路一部分的高压尖峰或噪声不会影响另一部分&#xff0c;从而保护了…

随机森林的知识博客:原理与应用

随机森林&#xff08;Random Forest&#xff09;是一种基于决策树的集成学习算法&#xff0c;它通过组合多棵决策树的预测结果来提升模型的准确性和稳健性。随机森林具有强大的分类和回归能力&#xff0c;广泛应用于各种机器学习任务。本文将详细介绍随机森林的原理、构建方法及…

(C++ STL)容器适配器stack、queue、priority_queue的简单实现与源码

容器适配器stack、queue、priority_queue 一、容器适配器二、deque容器1.deque的原理介绍2.deque的特点3.选择deque作为stack和queue的底层默认容器 三、stack简单实现与源码四、queue简单实现与源码五、priority_queue简单实现与源码 以下代码环境为 VS2022 C。 一、容器适配…

sqli-labs靶场(56-60)

56关 ?id-1)union select 1,2,database()-- 看数据库 ?id-1) union select 1,group_concat(table_name),3 from information_schema.tables where table_schemadatabase()-- 看表 ?id-1) union select 1,group_concat(column_name),3 from information_schema.columns wh…

Mysql8 主从复制主从切换(超详细)

文章目录 1 主从复制1.1 实施前提1.2 主节点配置(在192.168.25.91操作)1.3 从节点配置(在192.168.25.92操作)1.4 创建用于主从同步的用户1.5 开启主从同步1.5 主从同步验证 2 主从切换2.1 实施前提2.2 主节点设置只读(在192.168.25.91操作)2.3 检查主从数据是否同步完毕(在192.…

IC 设计前端到后端的流程和 EDA 工具?

IC设计前端也称逻辑设计&#xff0c;后端设计也称物理设计&#xff0c;两者并没有严格的界限&#xff0c;一般涉及到 与工艺有关的设计就是后端设计。 1&#xff1a;规格制定&#xff1a;客户向芯片设计公司提出设计要求。 2&#xff1a;详细设计&#xff1a;芯片设计公司&am…

2024年上海松江启动建筑绿色低碳发展专项检查,共绘城市节能新篇章

2024年9月4日&#xff0c;2024年度松江区建筑工程绿色低碳发展工作专项检查会议正式开展&#xff0c;会议内容主要围绕以下三点&#xff0c; 1、《关于开展 2024年度本市建筑领域绿色低碳发展工作监督检查的通知》宣贯。 2、分项计量、能效测评工作验收要求介绍。 3、专项检…

【初出江湖】分布式之什么是分布式存储?

目录标题 分布式存储分布式存储系统特点分布式存储原理分布式存储的应用场景分布式存储和集中式存储的区别 分布式存储 分布式存储是一种将数据分散存储在多个节点上的存储方式。与传统的集中式存储相比&#xff0c;分布式存储将数据分布在多个节点上&#xff0c;每个节点都可…

2024 年高教社杯全国大学生数学建模竞赛题目-A 题 “板凳龙” 闹元宵

“板凳龙”&#xff0c;又称“盘龙”&#xff0c;是浙闽地区的传统地方民俗文化活动。人们将少则几十条&#xff0c; 多则上百条的板凳首尾相连&#xff0c;形成蜿蜒曲折的板凳龙。盘龙时&#xff0c;龙头在前领头&#xff0c;龙身和龙尾 相随盘旋&#xff0c;整体呈圆盘状。一…

【论文阅读】Single-Stage Visual Query Localization in Egocentric Videos

paper&#xff1a;[2306.09324] Single-Stage Visual Query Localization in Egocentric Videos (arxiv.org) code&#xff1a;hwjiang1510/VQLoC: (NeurIPS 2023) Open-set visual object query search & localization in long-form videos (github.com) 简介 动机&…

Flask中多app应用怎么完成

在Flask中实现多app应用&#xff0c;通常指的是在同一个Flask项目中运行多个相对独立的应用&#xff08;或称为模块、组件&#xff09;。这种需求在大型项目中尤为常见&#xff0c;因为它可以帮助开发者更好地组织代码&#xff0c;提高项目的可维护性和可扩展性。以下将详细阐述…

11.2.软件系统分析与设计-数据库分析与设计

数据库分析与设计 数据库分析与设计的步骤

深入了解CSS滤镜属性filter

CSS的filter属性是一个非常强大的工具&#xff0c;它允许你向元素应用各种图形效果&#xff0c;如模糊、亮度、对比度、色彩调整等&#xff0c;而无需使用图像编辑软件或额外的HTML元素。filter属性可以包含多个函数&#xff0c;这些函数通过空格分隔&#xff0c;并可以叠加使用…

HQL || SQL :连续签到领金币

已知一张用户行为日志表tb_user_log&#xff0c;字段包括uid-用户ID、artical_id-文章ID、in_time-进入时间、out_time-离开时间、sign_in-是否签到注意1&#xff1a;只有artical_id为0时sign_in值才有效&#xff1b;注意2&#xff1a;从2021年7月7日0点开始&#xff0c;用户每…