javascript
Springboot之actuator配置不当漏洞(autoconfig、configprops、beans、dump、env、health、info、mappings、metrics、trace)
前言
Actuator 是 springboot 提供的用來對應用系統進行自省和監控的功能模塊,借助于 Actuator 開發者可以很方便地對應用系統某些監控指標進行查看、統計等。在 Actuator 啟用的情況下,如果沒有做好相關權限控制,非法用戶可通過訪問默認的執行器端點(endpoints)來獲取應用系統中的監控信息。Actuator 配置不當導致應用系統監控信息泄露對應用系統及其用戶的危害是巨大的,然而關于 springboot 框架下 actuator 配置不當的漏洞利用分析文章很少,目前筆者只在先知社區看到有一篇介紹 actuator 的安全文章,于是想在這里,分享下筆者在滲透測試過程中遇到的 actuator 配置不當的發現及利用過程,如有分析不正確的地方,還請各位大佬輕噴~ ? ?
Actuator 簡介?? ?
如上所言,actuator 是 springboot 提供的用來對應用系統進行自省和監控的功能模塊。其提供的執行器端點分為兩類:原生端點和用戶自定義擴展端點,原生端點主要有:
| 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 頭等)? ? ? ? ? ? ? ? |
| get | /heapdump | 后臺用戶賬號密碼泄露 |
| get | /httptrace | 會記錄100個最近請求包 |
| get | /restart | 重新啟動應用程序 |
| get | /logfile | 輸出日志內容 |
漏洞發現
一般來說,筆者挖掘 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?? ?
參考文獻
1.https://xz.aliyun.com/t/2233
2.https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#production-ready
3.https://blog.csdn.net/qq_20325039/article/details/79822141
總結
以上是生活随笔為你收集整理的Springboot之actuator配置不当漏洞(autoconfig、configprops、beans、dump、env、health、info、mappings、metrics、trace)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C# PrintDocument 打印表
- 下一篇: 零信任技术进阶篇(关键技术及挑战、Bey