返回

关于Spring Cloud Function SpEL的表达式注入漏洞分析

发布时间:2022-05-17 17:48:56 731
# 漏洞# 研究# 数据# 网络安全


该篇文章记录了漏洞包装的过程在这个过程中克服的一些难点如:

无session情况下的冰蝎连接及Netty下通过Header头获取POST的body内容等。

在Spring Cloud Function SpEL RCE细节的公布后,所分析的文章有很多,在这里不需要再对其漏洞进行分析,我们一直以来的习惯就是对漏洞进行包装,Java中能够让RCE的漏洞尽量都注入冰蝎/哥斯拉/蚁剑内存马等,而不是满足于一些简单的回显或一句话内存马,然而我们这样做的好处其实是大家在实战利用的过程中更加方便,提升效率。

该文章可以分为三个部分
1.漏洞复现
2.Spring Cloud Function在Netty下如何注入冰蝎内存马
3.Spring Cloud Function在Tomcat下如何注入冰蝎内存马

当我们确定了漏洞sink点之后,需向上寻找并找到四处调用的地方,且均在

org.springframework.cloud.function.context.config.RoutingFunction#route中

其中有一处是属于可控的调用点

我们将header头作为

spring.cloud.function.routing-expression的值当作spel表达式来解析的话

那么我们会看到如何执行到此处代码,紧接着寻找调用route的

org.springframework.cloud.function.context.config.RoutingFunction#apply 方法,到这里向上寻找调用点就变得很多了,回过头来看一下测试代码的例子

greeter路由对应的处理代码如下

回到我们的Routing-Function类同样是实现了Function接口,并存在apply方法,可以看到该类实现了Function接口,并自动调用apply方法,那我们这样如果能够直接访问RoutingFunction对应的路由,然后发送特定header的数据包,即可实现spel表达式注入,并查看该类是否发现其设置了FUNCTION_NAME属性。

这样的话就可以通过发送如下数据包来执行spel的表达式

url localhost:8080/functionRouter -H "Content-Type: text/plain" -H"spring.cloud.function.routing- expression:T(java.lang.Runtime).getRuntime().exec(\"calc\")" -d "aa,bb,cc,dd,ee"

在实际利用的时候不难发现其实我们只要去实现并去做对应的修改那样所有的安全漏洞都能化解。

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(0)
按点赞数排序
用户头像
精选文章
thumb 中国研究员首次曝光美国国安局顶级后门—“方程式组织”
thumb 俄乌线上战争,网络攻击弥漫着数字硝烟
thumb 从网络安全角度了解俄罗斯入侵乌克兰的相关事件时间线