- Spring
- 谈谈Spring Whitelabel SPEL RCE(★★★)
- 谈谈Spring Data REST SPEL RCE(★★)
- 谈谈Spring Web Flow SPEL RCE(★★)
- 谈谈Spring Messaging SPEL RCE(★★)
- 谈谈Spring Data Commons SPEL RCE(★★)
- 谈谈SpringCloud SnameYAML RCE(★★★)
- 谈谈SpringCloud Eureka RCE(★★★)
- 谈谈SpringBoot Jolokia Logback JNDI RCE(★★★)
- 谈谈SpringBoot Jolokia Realm JNDI RCE(★★★)
- 谈谈SpringBoot Restart H2 Database Query RCE(★★★)
- 谈谈SpringBoot H2 Database Console JNDI RCE(★★★)
- 谈谈SpringBoot Mysql JDBC RCE(★★★)
- 谈谈SpringBoot Restart logging.config Logback JNDI RCE(★★★)
- 谈谈SpringBoot Restart logging.config Groovy RCE(★★★)
- 谈谈SpringBoot Restart spring.main.sources Groovy RCE(★★★)
- 谈谈SpringBoot Restart spring.datasource.data H2 Database RCE(★★★)
- 谈谈最新的Spring Cloud Gateway SPEL的RCE漏洞(★★★)
- 最新的Spring Cloud Gateway SPEL的RCE漏洞可以回显吗(★★★★)
- 最新的Spring Cloud Gateway SPEL的RCE漏洞如何修复的(★★)
Spring
谈谈Spring Whitelabel SPEL RCE(★★★)
Spring处理参数值出错时会将参数中${}
中的内容当作SPEL
解析实现,造成RCE
漏洞
谈谈Spring Data REST SPEL RCE(★★)
当使用JSON PATCH
对数据修改时,传入的PATH
参数会解析SPEL
谈谈Spring Web Flow SPEL RCE(★★)
在Model
的数据绑定上存在漏洞,但漏洞出发条件比较苛刻
由于没有明确指定相关Model
的具体属性,导致从表单可以提交恶意的表达式SPEL
被执行
谈谈Spring Messaging SPEL RCE(★★)
其中的STOMP
模块发送订阅命令时,支持选择器标头,该选择器充当基于内容路由的筛选器
这个筛选器selector
属性的值会解析SPEL
导致RCE
谈谈Spring Data Commons SPEL RCE(★★)
请求参数中如何包含SPEL
会被解析,参考下方Payload
username[#this.getClass().forName("java.lang.Runtime").getRuntime().exec("calc.exe")]
谈谈SpringCloud SnameYAML RCE(★★★)
该漏洞的利用条件是可出网,可以POST
访问/env
接口设置属性,且可以访问/refresh
刷新配置
在VPS
上开启HTTP Server
并放入基于ScriptEngineManager
和URLClassLoader
的yml
,制作特殊的JAR并指定
通过/env
设置spring.cloud.bootstrap.location
属性再刷新配置即可利用SnakeYAML
的反序列化漏洞实现RCE
谈谈SpringCloud Eureka RCE(★★★)
该漏洞的利用条件同样是可出网,可以POST
访问/env
接口设置属性,且可以访问/refresh
刷新配置
首先搭建恶意的XStream Server
其中包含了Payload
通过/env
设置eureka.client.serviceUrl.defaultZone
属性再刷新配置即可访问远程XStream Payload
触发反序列化达到RCE
谈谈SpringBoot Jolokia Logback JNDI RCE(★★★)
如果目标可出网且存在/jolokia
或/actuator/jolokia
接口
通过/jolokia/list
查看是否存在ch.qos.logback.classic.jmx.JMXConfigurator
和reloadByURL
关键词
搭建一个HTTP Server
保存XML
配置文件,再启动恶意的JNDI Server
,请求指定的URL
即可触发JNDI
注入漏洞达到RCE
谈谈SpringBoot Jolokia Realm JNDI RCE(★★★)
如果目标可出网且存在/jolokia
或/actuator/jolokia
接口
启动恶意的JNDI Server
后调用createJNDIRealm
创建JNDIRealm
,然后写入JNDI
相关的配置文件,重启后触发JNDI
注入漏洞达到RCE
谈谈SpringBoot Restart H2 Database Query RCE(★★★)
漏洞利用条件是可以访问/env
设置属性,可以访问/restart
重启应用
设置spring.datasource.hikari.connection-test-query
属性为创建自定义函数的SQL
语句,再数据库连接之前会执行该SQL
语句
通过重启应用,建立新的数据库连接,触发包含命令执行的自定义函数,达到RCE
谈谈SpringBoot H2 Database Console JNDI RCE(★★★)
目标可出网且存在spring.h2.console.enabled=true
属性时可以利用
首先通过/h2-console
中记录下JSESSIONID
值,然后启动恶意的JNDI Server
,构造对应域名和JSESSIONID
的特殊POST
请求触发JNDI
注入漏洞达到RCE
谈谈SpringBoot Mysql JDBC RCE(★★★)
该漏洞的利用条件同样是可出网,可以POST
访问/env
接口设置属性,且可以访问/refresh
刷新配置,不同的是需要存在mysql-connector-java
依赖
通过/env
得到mysql
版本等信息,测试是否存在常见的Gadget
依赖,访问spring.datasource.url
设置指定的MySQL JDBC URL
地址。刷新配置后当网站进行数据库操作时,会使用恶意的MySQL JDBC URL
建立连接
恶意的MySQL Server
会返回序列化Payload
数据,利用本地的Gadget
反序列化造成RCE
谈谈SpringBoot Restart logging.config Logback JNDI RCE(★★★)
该漏洞的利用条件同样是可出网,可以POST
访问/env
接口设置属性,且可以访问/restart
重启
搭建一个HTTP Server
保存XML
配置文件,再启动恶意的JNDI Server
通过/env
接口设置logging.config
属性为恶意的XML
配置文件,重启触发JNDI
注入漏洞达到RCE
谈谈SpringBoot Restart logging.config Groovy RCE(★★★)
该漏洞的利用条件同样是可出网,可以POST
访问/env
接口设置属性,且可以访问/restart
重启
启动恶意的JNDI Server
并通过/env
接口设置logging.config
属性为恶意的Groovy
文件在重启后生效
在logback-classic
组件的ch.qos.logback.classic.util.ContextInitializer
中会判断url
是否以groovy
结尾,如果是则最终会执行文件内容中的groovy
代码达到RCE
谈谈SpringBoot Restart spring.main.sources Groovy RCE(★★★)
类似SpringBoot Restart logging.config Groovy RCE
组件中的org.springframework.boot.BeanDefinitionLoader
判断url
是否以groovy
结尾,如果是则最终会执行文件内容中的groovy
代码,造成RCE
漏洞
谈谈SpringBoot Restart spring.datasource.data H2 Database RCE(★★★)
该漏洞的利用条件同样是可出网,可以POST
访问/env
接口设置属性,且可以访问/restart
重启
开一个HTTP Server
保存恶意SQL语句,这是一个执行命令的函数,设置属性spring.datasource.data
为该地址,重启后设置生效
组件中的org.springframework.boot.autoconfigure.jdbc.DataSourceInitializer
使用runScripts
方法执行请求URL
内容中的SQL
代码,造成RCE
漏洞
谈谈最新的Spring Cloud Gateway SPEL的RCE漏洞(★★★)
本质还是SPEL
表达式,本来这是一个需要修改配置文件导致的鸡肋RCE
漏洞
但因为Gateway
提供了Actuator
相关的API
可以动态地注册Filter
,而在注册的过程中可以设置SPEL
表达式
实战利用程度可能不高,目标未必开着Actuator
接口,就算开放也不一定可以正常访问注册Filter
的接口
最新的Spring Cloud Gateway SPEL的RCE漏洞可以回显吗(★★★★)
P牛在漏洞爆出的凌晨就发布了相关的环境和POC
参考P牛的回显代码:在相应头里面添加一个新的头,利用工具类把执行回显写入
{
"name": "AddResponseHeader",
"args": {
"value": "#{new java.lang.String(T(org.springframework.util.StreamUtils).copyToByteArray(T(java.lang.Runtime).getRuntime().exec(new String[]{\"whoami\"}).getInputStream()))}",
"name": "cmd123"
}
}
最新的Spring Cloud Gateway SPEL的RCE漏洞如何修复的(★★)
参考很多SPEL
漏洞的修复手段,默认情况使用StandardContext
可以执行Runtime.getRuntime().exec()
这样的危险方法
修复是重写一个GatewayContext
用来执行SPEL
,这个context
的效果是只能执行有限的操作