溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Java反序列化之commons-beanutils分析

發(fā)布時(shí)間:2020-04-02 10:58:33 來源:網(wǎng)絡(luò) 閱讀:2089 作者:fatshi 欄目:安全技術(shù)

TemplatesImpl類是一個(gè)可序列化的類,其中有一個(gè)屬性_bytecodes,里面保存的數(shù)據(jù)在defineTransletClasses函數(shù)里將會(huì)被加載成類:
Java反序列化之commons-beanutils分析
Java反序列化之commons-beanutils分析

存在著這樣一條調(diào)用鏈條:
Java反序列化之commons-beanutils分析
簡(jiǎn)單來說,只要是能調(diào)用到getOutputProperties函數(shù),就能觸發(fā)包含在_bytecodes里的類構(gòu)造函數(shù)被執(zhí)行(這個(gè)類是由***者來實(shí)現(xiàn)的)。

Payload第一部分:
Java反序列化之commons-beanutils分析
創(chuàng)建了一個(gè)BeanComparator對(duì)象,將其作為參數(shù)用來創(chuàng)建一個(gè)PriorityQueue,向queue對(duì)象中添加兩個(gè)大整數(shù)對(duì)象(占位用)。
接著通過反射機(jī)制設(shè)置了comparator后面將會(huì)對(duì)比對(duì)象的屬性為outputProperties。

Payload第二部分:
Java反序列化之commons-beanutils分析
通過反射機(jī)制修改queue中數(shù)組保存的對(duì)比對(duì)象為內(nèi)置了***代碼的templates。
返回queue,將其生成序列化數(shù)據(jù)。

漏洞觸發(fā)邏輯:
反序列化的queue的時(shí)候,其對(duì)應(yīng)的PriorityQueue類readObject函數(shù)會(huì)依次讀取序列化數(shù)據(jù)中的元素,放入到隊(duì)列中。然后,調(diào)用heapify函數(shù)進(jìn)行排序操作。
Java反序列化之commons-beanutils分析
最終,會(huì)調(diào)用到siftDownUsingComparator函數(shù),其中會(huì)調(diào)用comparator的compare方法:
Java反序列化之commons-beanutils分析
compare方法中將會(huì)調(diào)用被對(duì)比對(duì)象的對(duì)應(yīng)屬性get方法,這里的o1,o2就是之前傳入的templates對(duì)象,this.property就是之前通過反射機(jī)制修改的outputProperties。因此,最終就調(diào)用了TemplatesImpl的getOutputProperties函數(shù),觸發(fā)POC代碼執(zhí)行:
Java反序列化之commons-beanutils分析

Java反序列化之commons-beanutils分析

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI