前言
FastJson這個漏洞我們之前講過了,今天主要是對它的鏈條進行分析一下,明白鏈條的構造原理。
Java安全—log4j日志&FastJson序列化&JNDI注入_log4j漏洞-CSDN博客
漏洞版本
1.2.24及以下沒有對序列化的類做校驗,導致漏洞產生
1.2.25-1.2.41增加了黑名單限制,更改autoType默認為關閉選項。
1.2.42版本是對1.2.41及以下版本的黑名單繞過,代碼內更新字符串黑名單hash方式
1.2.43版本是對1.2.42及以下版本的黑名單繞過
1.2.44-1.2.45版本1.2.43版本黑名單無法繞過,尋找新的利用鏈進行利用
1.2.47版本 利用fastjson處理Class類時的操作,將惡意類加載到緩存中,實現攻擊
1.2.62-1.2.67版本Class不會再往緩存中加載惡意類,尋找新的利用鏈進行突破
1.2.68版本,使用期望類AutoCloseable來繞過fastjson校驗
1.2.72-1.2.80使用期望類Throwable的子類,進行繞過
項目搭建
JDK不建議選版本太高的,以防止出錯啥的。
選擇Web依賴項,因為后續會用到Web的功能。
新建一個類叫FastJsonController,這里待會寫入我們的實驗代碼。
接著我們引入fastjson這個包,我這里選擇的是1.2.24版本,直接再pom.xml文件寫入以下代碼即可。
首先寫入以下代碼,對我們的JSON數據進行測試,可以看到能夠成功解析輸出,說明環境沒毛病。
public static void main(String[] args) {String str = "{\"name\":\"wlwznb\",\"age\":18}";JSONObject data = JSON.parseObject(str);System.out.println(data);}
鏈條分析
1.2.24 利用鏈分析
現在我們開始對鏈條來解析,把我們上面測試的JSON數據換成以下的鏈條,可以看出來有點像我們的fastjson利用鏈了。
String userStr = "{\"@type\":\"com.sf.maven.fastjsondemo1.demos.web.User\",\"age\":18,\"name\":\"wlwznb\"}";
這個 com.sf.maven.fastjsondemo1.demos.web.User 就是你自帶的 User 類的路徑,直接復制過來就行。
運行代碼,可以看出與上面的沒啥區別。
別急,此時我們打開User這個類,可以看出里面又很多方法。
我們往里面添加打印語句,這樣在調用這些方法的時候,我們就會知道被調用了。
此時我們再運行代碼,可以看到setAge、setName、getAge、getName這四個方法都被調用了,這說明在解析數據的時候不僅僅把age和name這兩個數據解析了,還把User類里面的set和get方法解析了。