首頁 > 科技

如何防範SpringBoot 相關漏洞?

2021-08-31 03:06:17

原文連結:https://mp.weixin.qq.com/s/DvMJcaPYG_KJf5xQnLPd7A

Spring Boot可能是習慣於用Java的小夥伴們用得最多的一種應用框架,但是各位程式猿小夥伴知不知道Spring Boot有哪些平時不容易注意到的漏洞需要避免呢?

小編今天就給大家介紹一個GitHub上關於Spring Boot漏洞大集合的項目,不過要注意的是,這個項目的初衷可是讓大家研究和測試這些漏洞,以防自己的程式留下不安全的後門,可不要故意使用這些漏洞造成他人的損害喲~

小編先帶大家看下整個項目的目錄:

- Spring Boot Vulnerability Exploit Check List  - 零:路由和版本    - 0x01:路由知識    - 0x02:版本知識      - 元件版本的相互依賴關係:      - Spring Cloud 與 Spring Boot 版本之間的依賴關係:      - Spring Cloud 小版本號的字尾及含義  - 一:資訊洩露    - 0x01:路由地址及介面呼叫詳情洩漏    - 0x02:配置不當而暴露的路由    - 0x03:獲取被星號脫敏的密碼的明文 (方法一)      - 利用條件:      - 利用方法:        - 步驟一: 找到想要獲取的屬性名        - 步驟二:jolokia 呼叫相關 Mbean 獲取明文    - 0x04:獲取被星號脫敏的密碼的明文 (方法二)      - 利用條件:      - 利用方法:        - 步驟一: 找到想要獲取的屬性名        - 步驟二: 使用 nc 監聽 HTTP 請求        - 步驟三: 設定 eureka.client.serviceUrl.defaultZone 屬性        - 步驟四: 重新整理配置        - 步驟五: 解碼屬性值    - 0x05:獲取被星號脫敏的密碼的明文 (方法三)      - 利用條件:      - 利用方法:        - 步驟一: 找到想要獲取的屬性名        - 步驟二: 使用 nc 監聽 HTTP 請求        - 步驟三: 觸發對外 http 請求        - 步驟四: 重新整理配置    - 0x06:獲取被星號脫敏的密碼的明文 (方法四)      - 利用條件:      - 利用方法:        - 步驟一: 找到想要獲取的屬性名        - 步驟二: 下載 jvm heap 資訊        - 步驟三: 使用 MAT 獲得 jvm heap 中的密碼明文  - 二:遠端程式碼執行    - 0x01:whitelabel error page SpEL RCE      - 利用條件:      - 利用方法:        - 步驟一:找到一個正常傳參處        - 步驟二:執行 SpEL 表示式      - 漏洞原理:      - 漏洞分析:      - 漏洞環境:    - 0x02:spring cloud SnakeYAML RCE      - 利用條件:      - 利用方法:        - 步驟一: 託管 yml 和 jar 檔案        - 步驟二: 設定 spring.cloud.bootstrap.location 屬性        - 步驟三: 重新整理配置      - 漏洞原理:      - 漏洞分析:      - 漏洞環境:    - 0x03:eureka xstream deserialization RCE      - 利用條件:      - 利用方法:        - 步驟一:架設響應惡意 XStream payload 的網站        - 步驟二:監聽反彈 shell 的埠        - 步驟三:設定 eureka.client.serviceUrl.defaultZone 屬性        - 步驟四:重新整理配置      - 漏洞原理:      - 漏洞分析:      - 漏洞環境:    - 0x04:jolokia logback JNDI RCE      - 利用條件:      - 利用方法:        - 步驟一:檢視已存在的 MBeans        - 步驟二:託管 xml 檔案        - 步驟三:準備要執行的 Java 程式碼        - 步驟四:架設惡意 ldap 服務        - 步驟五:監聽反彈 shell 的埠        - 步驟六:從外部 URL 地址載入日誌配置檔案      - 漏洞原理:      - 漏洞分析:      - 漏洞環境:    - 0x05:jolokia Realm JNDI RCE      - 利用條件:      - 利用方法:        - 步驟一:檢視已存在的 MBeans        - 步驟二:準備要執行的 Java 程式碼        - 步驟三:託管 class 檔案        - 步驟四:架設惡意 rmi 服務        - 步驟五:監聽反彈 shell 的埠        - 步驟六:傳送惡意 payload      - 漏洞原理:      - 漏洞分析:      - 漏洞環境:    - 0x06:restart h2 database query RCE      - 利用條件:      - 利用方法:        - 步驟一:設定 spring.datasource.hikari.connection-test-query 屬性        - 步驟二:重啟應用      - 漏洞原理:      - 漏洞分析:      - 漏洞環境:    - 0x07:h2 database console JNDI RCE      - 利用條件:      - 利用方法:        - 步驟一:訪問路由獲得 jsessionid        - 步驟二:準備要執行的 Java 程式碼        - 步驟三:託管 class 檔案        - 步驟四:架設惡意 ldap 服務        - 步驟五:監聽反彈 shell 的埠        - 步驟六:發包觸發 JNDI 注入      - 漏洞分析:      - 漏洞環境:    - 0x08:mysql jdbc deserialization RCE      - 利用條件:      - 利用方法:        - 步驟一:檢視環境依賴        - 步驟二:架設惡意 rogue mysql server        - 步驟三:設定 spring.datasource.url 屬性        - 步驟四:重新整理配置        - 步驟五:觸發資料庫查詢        - 步驟六:恢復正常 jdbc url      - 漏洞原理:      - 漏洞分析:      - 漏洞環境:    - 0x09:restart logging.config logback JNDI RCE      - 利用條件:      - 利用方法:        - 步驟一:託管 xml 檔案        - 步驟二:託管惡意 ldap 服務及程式碼        - 步驟三:設定 logging.config 屬性        - 步驟四:重啟應用      - 漏洞原理:      - 漏洞分析:      - 漏洞環境:    - 0x0A:restart logging.config groovy RCE      - 利用條件:      - 利用方法:        - 步驟一:託管 groovy 檔案        - 步驟二:設定 logging.config 屬性        - 步驟三:重啟應用      - 漏洞原理:      - 漏洞環境:    - 0x0B:restart spring.main.sources groovy RCE      - 利用條件:      - 利用方法:        - 步驟一:託管 groovy 檔案        - 步驟二:設定 spring.main.sources 屬性        - 步驟三:重啟應用      - 漏洞原理:      - 漏洞環境:    - 0x0C:restart spring.datasource.data h2 database RCE      - 利用條件:      - 利用方法:        - 步驟一:託管 sql 檔案        - 步驟二:設定 spring.datasource.data 屬性        - 步驟三:重啟應用      - 漏洞原理:      - 漏洞環境:

以資訊洩露為例,對於0x01:路由地址及介面呼叫詳情洩漏,項目描述到:

開發人員沒有意識到地址洩漏會導致安全隱患或者開發環境切換為線上生產環境時,相關人員沒有更改配置檔案,忘記切換環境配置等

可以直接訪問以下兩個 swagger 相關路由,驗證漏洞是否存在:

/v2/api-docs/swagger-ui.html

其他一些可能會遇到的 swagger、swagger codegen、swagger-dubbo 等相關介面路由:

/swagger/api-docs/api.html/swagger-ui/swagger/codes/api/index.html/api/v2/api-docs/v2/swagger.json/swagger-ui/html/distv2/index.html/swagger/index.html/sw/swagger-ui.html/api/swagger-ui.html/static/swagger.json/user/swagger-ui.html/swagger-ui/index.html/swagger-dubbo/api-docs/template/swagger-ui.html/swagger/static/index.html/dubbo-provider/distv2/index.html/spring-security-rest/api/swagger-ui.html/spring-security-oauth-resource/swagger-ui.html

除此之外,下面的 spring boot actuator 相關路由有時也會包含(或推測出)一些介面地址資訊,但是無法獲得參數相關資訊:

/mappings/metrics/beans/configprops/actuator/metrics/actuator/mappings/actuator/beans/actuator/configprops

一般來講,暴露出 spring boot 應用的相關介面和傳參資訊並不能算是漏洞,但是以 "預設安全" 來講,不暴露出這些資訊更加安全。

對於攻擊者來講,一般會仔細審計暴露出的介面以增加對業務系統的瞭解,並會同時檢查應用系統是否存在未授權訪問、越權等其他業務類型漏洞。

是不是淺顯易懂,一下子就講明白了整個漏洞的原理及校驗方式?看完整個項目,一定能讓大家學會如何利用方法和技巧,做到黑盒安全評估!想學習的小夥伴,趕緊跟著小編一起上車!


IT145.com E-mail:sddin#qq.com