Spring框架的反序列化遠程代碼執行漏洞分析(轉)


歡迎和大家交流技術相關問題:
郵箱: jiangxinnju@163.com
博客園地址: http://www.cnblogs.com/jiangxinnju
GitHub地址: https://github.com/jiangxincode
知乎地址: https://www.zhihu.com/people/jiangxinnju

漏洞介紹

國外的研究人員zero thoughts發現了一個Spring框架的反序列化遠程代碼執行漏洞。
spring-tx.jar包中的org.springframework.transaction.jta.JtaTransactionManager類存在JNDI反序列化問題。只要創建一個JtaTransactionManager 對象讓userTransactionName指向我們注冊的RMI鏈接(如rmi://x.x.x.x:1099/Object)然后將對象發送到有漏洞的服務器,即可執行遠程命令。具體細節可以分析漏洞作者的POC代碼。
漏洞發現者的博客
http://zerothoughts.tumblr.com/post/137769010389/fun-with-jndi-remote-code-injection

漏洞影響

受影響漏洞服務器主要需要滿足如下條件:

  1. CLASSPATH 中包含了 spring-tx.jar,spring-commons.jar,javax.transaction-api.jar
  2. 存在反序列化接口如RMI, JMS, IIOP等
    出現漏洞的關鍵jar包 spring-tx.jar,並不是spring最基本的包,默認並不使用,所以並不是所有使用了spring框架的應用都受影響,需要具體檢查是否包含了spring-tx.jar包。

POC簡要復現

環境描述:

Java環境——這里使用的是JDK1.7版本
Maven環境——見下面的maven包 apache-maven-3.3.9-bin.zip
Spring漏洞利用POC——spring-jndi-master.zip

環境搭建:

  1. Java環境安裝,略
  2. Maven安裝
    直接解壓apache-maven-3.3.9-bin.zip ,添加環境變量,然后用mvn –v測試是否安裝成功
    如我的maven路徑:C:\java\apache-maven-3.3.9
    添加環境變量:

Mvn –v測試

服務器搭建:

Poc里面有兩個文件夾server和client
Server用於搭建包含spring的服務器環境,client用於構建反序列化對象並發送給server
服務器搭建命令如下

首先進入server目錄
然后用mvn install安裝spring環境

Mvn就是開始安裝的maven,server目錄下有pom.xml文件。 Mvn install會根據里面的內容來下載安裝spring等組件。 最后會將jar包放到target中。

java -cp “target/*” ExploitableServer 9999命令在9999端口起到有漏洞的服務器程序。
ExploitableServer.java比較簡單,創建socket等待連接,讀取對象。

這樣便開啟了一個連接

客戶端攻擊對象構建:

命令與上面相似:

進入目錄,安裝spring組件,調用代碼向服務器發送指令。
Mvn install,客戶端也需要安裝spring的組件,來使得客戶端的java代碼能夠構造spring對象。

java -cp “target/” ExploitClient 127.0.0.1 9999 127.0.0.1
“target/
指定spring路徑
ExploitClient 為客戶端的main程序
127.0.0.1 9999 127.0.0.1三個參數分別對應為

客戶端包含三個文件

ExploitClient是主程序,包含序列化的過程,一些主要出現漏洞的類,以及數據的發送。

HttpFileHandler 主要是構建字節流
ExportObject 是功能代碼,構建自己的java代碼,服務器有權限就能執行。

執行結果:

自檢與修復:

由於主要出現漏洞的地方在於Spring-tx.jar包的JtaTransactionManager類中。 可以檢測項目中是否有使用spring-tx.jar包。如果有使用可以對JtaTransactionManager類進行重寫。同時有防火牆的用戶可以先對數據包中的JtaTransactionManager數據進行過濾,直到源碼修復。
POC網絡傳輸數據如下,可以先對使用了JtaTransactionManager的報文進行攔截。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM