国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

FastJson序列化導(dǎo)致的 “$ref“

這篇具有很好參考價(jià)值的文章主要介紹了FastJson序列化導(dǎo)致的 “$ref“。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

前言:

剛轉(zhuǎn)后端沒多久,在通過RPC調(diào)用其他組的服務(wù)的時(shí)候,其他組對接的同學(xué)說,你的入?yún)⑹怯袉栴}的,然后他把入?yún)l(fā)我,類似于下面的 json

{
	"addressMO": {
		"roomNumber": "1002",
		"street": "上海市徐匯區(qū)田林街道"
	},
	"age": 10,
	"brotherMO": {
		"addressMO": {
			"$ref": "$.addressMO"
		},
		"className": "上海中學(xué)",
		"name": "我是哥哥"
	},
	"name": "我是弟弟"
}

這個(gè)對象包含一個(gè) addressMObrotherMO以及 nameagebrotherMO 中也包含了addressMO,就會導(dǎo)致 出現(xiàn)上面的 "$ref": "$.addressMO",這個(gè)其實(shí)表示的是引用根目錄中的 addressMO 對象。

這個(gè)例子其實(shí)是我簡化后的 demo,為了簡單說明。其他的 對象如下:

public static class PersonMO {
        private String name;
        private int age;
        private AddressMO addressMO;
        private BrotherMO brotherMO;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public int getAge() {
            return age;
        }

        public void setAge(int age) {
            this.age = age;
        }

        public AddressMO getAddressMO() {
            return addressMO;
        }

        public void setAddressMO(AddressMO addressMO) {
            this.addressMO = addressMO;
        }

        public BrotherMO getBrotherMO() {
            return brotherMO;
        }

        public void setBrotherMO(BrotherMO brotherMO) {
            this.brotherMO = brotherMO;
        }
    }

    public static class AddressMO {
        private String street;
        private String roomNumber;

        public String getStreet() {
            return street;
        }

        public void setStreet(String street) {
            this.street = street;
        }

        public String getRoomNumber() {
            return roomNumber;
        }

        public void setRoomNumber(String roomNumber) {
            this.roomNumber = roomNumber;
        }
    }

    public static class BrotherMO {
        private String name;
        private String className;
        private AddressMO addressMO;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public String getClassName() {
            return className;
        }

        public void setClassName(String className) {
            this.className = className;
        }

        public AddressMO getAddressMO() {
            return addressMO;
        }

        public void setAddressMO(AddressMO addressMO) {
            this.addressMO = addressMO;
        }
    }

測試代碼如下:

 @Test
    public void testJSON() {
        AddressMO addressMO = new AddressMO();
        addressMO.setStreet("上海市徐匯區(qū)田林街道");
        addressMO.setRoomNumber("1002");


        BrotherMO brotherMO = new BrotherMO();
        brotherMO.setName("我是哥哥");
        brotherMO.setAddressMO(addressMO);
        brotherMO.setClassName("上海中學(xué)");

        PersonMO personMO = new PersonMO();
        personMO.setName("我是弟弟");
        personMO.setAge(10);
        personMO.setAddressMO(addressMO);
        personMO.setBrotherMO(brotherMO);

        String ss = JSON.toJSONString(personMO);
        System.out.println("ss ===== " +ss);
    }

可以看到,對于一個(gè)對象,當(dāng)其首次出現(xiàn)時(shí),FastJson 的序列化是正常工作的,但是當(dāng)其重復(fù)出現(xiàn)時(shí),就會變?yōu)閷ο蟮囊?。這是FastJson內(nèi)部存在一些特殊邏輯,問題產(chǎn)生的原因在于FastJson存在循環(huán)/重復(fù)引用檢測特性,并且該特性是缺省開啟的。
實(shí)體轉(zhuǎn)化為json字符串后出現(xiàn)了$ref字樣的東西,這是因?yàn)樵趥鬏數(shù)臄?shù)據(jù)中出現(xiàn)相同的對象時(shí),fastjson 默認(rèn)開啟引用檢測將相同的對象寫成引用的形式,引用是通過"$ref"來表示的。

FastJson序列化導(dǎo)致的 “$ref“
修改也很簡單,就是在 BrotherMO 中設(shè)置 AddressMO 對象是,通過 Copy AddressMO 對象的屬性就行了,如下:
FastJson序列化導(dǎo)致的 “$ref“
就能正常輸出了,其中的 DozerBeanMapper 是開源庫,用來復(fù)制對象屬性的。

{
	"addressMO": {
		"roomNumber": "1002",
		"street": "上海市徐匯區(qū)田林街道"
	},
	"age": 10,
	"brotherMO": {
		"addressMO": {
			"roomNumber": "1002",
			"street": "上海市徐匯區(qū)田林街道"
		},
		"className": "上海中學(xué)",
		"name": "我是哥哥"
	},
	"name": "我是弟弟"
}

其實(shí)不改也是沒問題的,通過反序列化出來的 PersonMO 對象都是正常的。
FastJson序列化導(dǎo)致的 “$ref“
剛開始,其他同事跟我說的時(shí)候我是很懵逼的,完全不知道,因?yàn)槲艺{(diào)用他的服務(wù)之前是加了日志的,都是正常的,但是同事說的是這個(gè)服務(wù)上線2年多了,肯定不是他們的問題,哈哈,然后 google 了下,記錄下,怕自己會忘記。文章來源地址http://www.zghlxwxcb.cn/news/detail-434488.html

到了這里,關(guān)于FastJson序列化導(dǎo)致的 “$ref“的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Fastjson反序列化漏洞復(fù)現(xiàn)小結(jié)

    Fastjson反序列化漏洞復(fù)現(xiàn)小結(jié)

    簡單來說:Fastjson是解析JSON格式的字符串的,允許用戶在輸入JSON串時(shí)通過“@type”鍵對應(yīng)的value指定任意反序列化類名,進(jìn)而執(zhí)行類里的惡意代碼。 1、Fastjson1.2.24遠(yuǎn)程代碼執(zhí)行(CNVD-2017-02833 ) 2、Fastjson=1.2.47遠(yuǎn)程代碼執(zhí)行漏洞(CNVD-2019-22238) 3、Fstjson =1.2.60 遠(yuǎn)程代碼執(zhí)行漏洞

    2023年04月08日
    瀏覽(25)
  • FastJson中AutoType反序列化漏洞

    FastJson中AutoType反序列化漏洞

    Fastjson1.2.80 反序列化漏洞情報(bào),攻擊者可以利用該漏洞攻擊遠(yuǎn)程服務(wù)器, 可能會造成任意命令執(zhí)行。在Fastjson=1.2.83的版本中,通過新的Gadgets鏈繞過autoType開關(guān),在autoType關(guān)閉的情況下仍然可能可以繞過黑白名單防御機(jī)制,實(shí)現(xiàn)了反序列化漏洞利用的遠(yuǎn)程代碼執(zhí)行效果,同時(shí),此

    2024年02月07日
    瀏覽(18)
  • Fastjson反序列化遠(yuǎn)程代碼執(zhí)行漏洞

    Fastjson反序列化遠(yuǎn)程代碼執(zhí)行漏洞

    據(jù)國家網(wǎng)絡(luò)與信息安全信息通報(bào)中心監(jiān)測發(fā)現(xiàn),開源Java開發(fā)組件Fastjson存在反序列化遠(yuǎn)程代碼執(zhí)行漏洞。攻擊者可利用上述漏洞實(shí)施任意文件寫入、服務(wù)端請求偽造等攻擊行為,造成服務(wù)器權(quán)限被竊取、敏感信息泄漏等嚴(yán)重影響。 先貼一個(gè)解決漏洞的方案: 不過任何升級一

    2024年02月09日
    瀏覽(20)
  • Fastjson反序列化漏洞原理與復(fù)現(xiàn)

    Fastjson是java的一個(gè)庫,可以將Java對象轉(zhuǎn)化為json格式的字符串,也可以將json格式的字符串轉(zhuǎn)化為Java對象。 Fastjson提供了 toJSONString() 和 parseObject() 方法來將Java對象與JSON相互轉(zhuǎn)換。調(diào)用 toJSONString() 方法即可將對象轉(zhuǎn)換成 JSON 字符串, parseObject() 方法則反過來將JSON字符串轉(zhuǎn)換成

    2024年02月12日
    瀏覽(39)
  • 滲透測試-Fastjson反序列化漏洞getshell

    滲透測試-Fastjson反序列化漏洞getshell

    目錄 前言 測試環(huán)境準(zhǔn)備 dnslog測試 搭建rmi服務(wù)器準(zhǔn)備惡意類 引用JdbcRowSetImpl攻擊 反彈shell$命令執(zhí)行 總結(jié) :fastjson 1.2.24反序列化導(dǎo)致任意命令執(zhí)行漏洞 注:本次滲透測試全在虛擬機(jī)中進(jìn)行僅用于學(xué)習(xí)交流,請勿在實(shí)際網(wǎng)絡(luò)中攻擊他人服務(wù)器。 前言 ????????最原始

    2024年02月07日
    瀏覽(31)
  • 【java安全】FastJson反序列化漏洞淺析

    【java安全】FastJson反序列化漏洞淺析

    0x00.前言 前面我們學(xué)習(xí)了RMI和JNDI知識,接下來我們就可以來了解一下FastJson反序列化了 0x01.FastJson概述 FastJson是阿里巴巴的開源JSON解析庫,它可以解析JSON格式的字符串,支持 將JavaBean序列化為JSON字符串,也可以將JSON字符串反序列化到JavaBean 0x02.FastJson使用 首先我們需要使用

    2024年02月11日
    瀏覽(33)
  • Jackson--FastJson--XStream--代碼執(zhí)行&&反序列化

    2.0.0 = FasterXML jackson-databind Version = 2.9.10.2 不受影響版本 FasterXML jackson-databind = 2.8.11.5 FasterXML jackson-databind = 2.9.10.3 POC: String json = \\\"[\\\"org.apache.xbean.propertyeditor.JndiConverter\\\", {\\\"asText\\\":\\\"ldap://localhost:1389/Exploit\\\"}]\\\"; FasterXML jackson-databind 2.x 2.9.10.8 POC String payload = \\\"[\\\"com.oracle.wls.shaded.org.apa

    2024年02月08日
    瀏覽(59)
  • fastjson 1.2.24  反序列化漏洞(審計(jì)分析)

    fastjson 1.2.24 反序列化漏洞(審計(jì)分析)

    環(huán)境 JDK 8u181 Fastjson 1.2.24 POC 跟進(jìn) parse 方法 跟進(jìn)到底層deserialze 方法 Poc 中傳入的 dataSourceName : ldap://192.168.3.229:8084/vnSYPYwMs 值 這里實(shí)際對應(yīng) setDataSourceName 方法,調(diào)用此方法并傳入 ldap 跟進(jìn) setDataSourceName 方法,這里只是簡單賦值 ? 步出回此方法 繼續(xù)步出,進(jìn)入parseRest方法 跟進(jìn)

    2023年04月14日
    瀏覽(37)
  • Fastjson反序列化漏洞(1.2.24 RCE)

    Fastjson反序列化漏洞(1.2.24 RCE)

    目錄 (一)Fastjson介紹 1、認(rèn)識Fastjson 1.1?序列化 1.2??反序列化 1.3?@type 自省 Autotype (二)漏洞原理 1、比較常用的攻擊類 1.1??com.sun.rowset.JdbcRowSetImpl 1.2?com.sun.org.apache.xalan.internal.xsltc.trax. TemplatesImp (三)1.2.24 RCE復(fù)現(xiàn) 1、vulnhub啟動 注意:Linux配置JRE版本 2、攻擊機(jī)監(jiān)聽(

    2024年02月07日
    瀏覽(32)
  • fastJson反序列化漏洞和log4j漏洞

    有 attach.class (編譯好的文件) 攻擊者建立rmi服務(wù)端,于rmi服務(wù)端建造一系列攻擊對象 ,假設(shè)遠(yuǎn)程地址為 http://abc,可url鏈接到惡意class-attach.class 若被攻擊者訪問到此服務(wù) rmi://abc/attach.class ,靜態(tài)代碼塊會優(yōu)先加載,無需構(gòu)造對象。 fastJson通過序列化漏洞 fastJson=1.2.47 (高版本添

    2024年02月16日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包