Springboot之actuator配置不當的漏洞利用

轉載地址: https://www.freebuf.com/news/193509.html ,學習留存,有疑問請聯繫本人刪除。

Springboot之actuator配置不當的漏洞利用

T-T2019-01-14651761人圍觀 ,發現 12 個不明物體WEB安全資訊

*本文原創作者:T-T,本文屬FreeBuf原創獎勵計劃,未經許可禁止轉載

前言

Actuator 是 springboot 提供的用來對應用系統進行自省和監控的功能模塊,藉助於 Actuator 開發者可以很方便地對應用系統某些監控指標進行查看、統計等。在 Actuator 啓用的情況下,如果沒有做好相關權限控制,非法用戶可通過訪問默認的執行器端點(endpoints)來獲取應用系統中的監控信息。Actuator 配置不當導致應用系統監控信息泄露對應用系統及其用戶的危害是巨大的,然而關於 springboot 框架下 actuator 配置不當的漏洞利用分析文章很少,目前筆者只在先知社區看到有一篇介紹 actuator 的安全文章,於是想在這裏,分享下筆者在滲透測試過程中遇到的 actuator 配置不當的發現及利用過程,如有分析不正確的地方,還請各位大佬輕噴~    

Actuator 簡介    

如上所言,actuator 是 springboot 提供的用來對應用系統進行自省和監控的功能模塊。其提供的執行器端點分爲兩類:原生端點和用戶自定義擴展端點,原生端點主要有:            

Http 方法 路徑 描述
get /autoconfig 提供了一份自動配置報告,記錄哪些自動配置條件通過了,哪些沒通過
get /configprops 描述配置屬性(包含默認值)如何注入 Bean
get /beans 描述應用程序上下文裏全部的 Bean,以及它們的關係
get /dump 獲取線程活動的快照
get /env 獲取全部環境屬性
get /env/{name} 根據名稱獲取特定的環境屬性值
get /health 報告應用程序的健康指標,這些值由 HealthIndicator 的實現類提供
get /info 獲取應用程序的定製信息,這些信息由 info 打頭的屬性提供
get /mappings 描述全部的 URI 路徑,以及它們和控制器(包含 Actuator 端點)的映射關係
get /metrics 報告各種應用程序度量信息,比如內存用量和 HTTP 請求計數
get /metrics/{name} 報告指定名稱的應用程序度量值
post /shutdown 關閉應用程序,要求 endpoints.shutdown.enabled 設置爲 true(默認爲 false)
get /trace 提供基本的 HTTP 請求跟蹤信息(時間戳、HTTP 頭等)               

漏洞發現

  一般來說,筆者挖掘 actuator 配置不當的漏洞分如下兩步:1. 識別當前 web 應用使用的框架爲 springboot 框架;2. 枚舉執行器端點路徑;下面針對這兩步結合筆者漏洞挖掘中遇到的實例具體來說說。

1. 識別當前 web 應用使用的框架爲 springboot 框架。主要有兩個方法判斷:

①通過 web 應用程序網頁標籤的圖標(favicon.ico);如果 web 應用開發者沒有修改 springboot web 應用的默認圖標,那麼進入應用首頁後可以看到如下默認的綠色小圖標:    

該綠色小圖標是 spring 框架下的一個默認圖標,儘管不能百分百就此圖標確認當前 web 應用使用的是 springboot 框架,但是基本上也能百分之八十確認該 web 應用是使用 springboot 框架開發的了(畢竟 springboot 框架確實是太流行了)。   

②通過 springboot 框架默認報錯頁面;如果 web 應用開發者沒有修改 springboot web 應用的默認 4xx、5xx 報錯頁面,那麼當 web 應用程序出現 4xx、5xx 錯誤時,會報錯如下(此處僅以 404 報錯頁面爲例):    

當出現如上報錯頁面,就能確定當前 web 應用是使用了 springboot 框架的。   

那麼綜合以上兩個途徑來判斷當前 web 應用是否是 springboot 框架,就是通過訪問不同的目錄,看是否有小綠葉圖標,然後就是想辦法在不同目錄下觸發應用程序的 4xx 或 5xx 錯誤,看是否有 Whitelabel Error Page 報錯。   

2. 枚舉執行器端點路徑。這個其實很簡單,在確認當前 web 站點是 springboot 框架後,枚舉當前站點的所有一級、二級甚至三級目錄,然後寫腳本對每個目錄進行探測,查看目錄下是否存在 actuator 執行端點路徑即可。(本來想寫個比較通用的探測腳本的,現在只有延期了.. 寫完之後放出來)       

漏洞利用

通過如上步驟,如果你發現了 actuator 的配置不當漏洞,那就要恭喜你啦。不過,儘管這些監控信息的泄露已經足夠高危了,有時候碰到一些比較嚴格的廠商,需要你證明一下這些監控信息的具體危害,或者你想要將危害等級提升到嚴重,或者想要通過這些監控信息進一步挖掘其他漏洞,該怎麼利用呢?筆者通過自身的踩坑經歷,總結了如下幾個點來儘可能最大化的利用該漏洞:        

①認證字段的獲取以證明可影響其他用戶;這個主要通過訪問/trace 路徑獲取用戶認證字段信息,比如如下站點存在 actuator 配置不當漏洞,在其 trace 路徑下,除了記錄有基本的 HTTP 請求信息(時間戳、HTTP 頭等),還有用戶 token、cookie 字段:            

trace 路徑:            

用戶認證字段泄露:

通過替換 token 字段可獲取其他用戶的信息:

②數據庫賬戶密碼泄露;由於 actuator 會監控站點 mysql、mangodb 之類的數據庫服務,所以通過監控信息有時可以拿下 mysql、mangodb 數據庫;這個主要通過/env 路徑獲取這些服務的配置信息,比如如下站點存在 actuator 配置不當漏洞,通過其/env 路徑,可獲得 mysql、mangodb 的用戶名及密碼:            

mangodb 及 mysql 都可直連,此處以 mysql 爲例:            

該漏洞詳情請見https://dvpnet.io/info/detail/id/814,是筆者去年在 dvp 平臺提交的一個漏洞。一旦數據庫外連成功,漏洞分分鐘高危變嚴重啊。           

③git 項目地址泄露;這個一般是在/health 路徑,比如如下站點,訪問其 health 路徑可探測到站點 git 項目地址:            

直接訪問 git 項目地址,可拿下源碼:

④後臺用戶賬號密碼泄露;這個一般是在/heapdump 路徑下,訪問/heapdump 路徑,返回 GZip 壓縮 hprof 堆轉儲文件。在 Android studio 打開,會泄露站點內存信息,很多時候會包含後臺用戶的賬號密碼(包含漏洞的圖片暫時沒得,大家記住思路就好了..),通過泄露的賬號密碼,然後進入後臺一番轟炸也不錯的。   

安全措施

引入 security 依賴,打開安全限制並進行身份驗證;同時設置單獨的 Actuator 管理端口並配置不對外網開放。詳情請見先知社區https://xz.aliyun.com/t/2233    

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章