TemplatesImpl類是一個可序列化的類,其中有一個屬性_bytecodes,里面保存的數(shù)據(jù)在defineTransletClasses函數(shù)里將會被加載成類:
創(chuàng)新互聯(lián)長期為成百上千客戶提供的網(wǎng)站建設(shè)服務,團隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為湯原企業(yè)提供專業(yè)的網(wǎng)站建設(shè)、網(wǎng)站設(shè)計,湯原網(wǎng)站改版等技術(shù)服務。擁有10余年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。
存在著這樣一條調(diào)用鏈條:
簡單來說,只要是能調(diào)用到getOutputProperties函數(shù),就能觸發(fā)包含在_bytecodes里的類構(gòu)造函數(shù)被執(zhí)行(這個類是由***者來實現(xiàn)的)。
Payload第一部分:
創(chuàng)建了一個BeanComparator對象,將其作為參數(shù)用來創(chuàng)建一個PriorityQueue,向queue對象中添加兩個大整數(shù)對象(占位用)。
接著通過反射機制設(shè)置了comparator后面將會對比對象的屬性為outputProperties。
Payload第二部分:
通過反射機制修改queue中數(shù)組保存的對比對象為內(nèi)置了***代碼的templates。
返回queue,將其生成序列化數(shù)據(jù)。
漏洞觸發(fā)邏輯:
反序列化的queue的時候,其對應的PriorityQueue類readObject函數(shù)會依次讀取序列化數(shù)據(jù)中的元素,放入到隊列中。然后,調(diào)用heapify函數(shù)進行排序操作。
最終,會調(diào)用到siftDownUsingComparator函數(shù),其中會調(diào)用comparator的compare方法:
compare方法中將會調(diào)用被對比對象的對應屬性get方法,這里的o1,o2就是之前傳入的templates對象,this.property就是之前通過反射機制修改的outputProperties。因此,最終就調(diào)用了TemplatesImpl的getOutputProperties函數(shù),觸發(fā)POC代碼執(zhí)行:
網(wǎng)頁標題:Java反序列化之commons-beanutils分析
轉(zhuǎn)載注明:http://aaarwkj.com/article20/gihjco.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動態(tài)網(wǎng)站、網(wǎng)站收錄、品牌網(wǎng)站建設(shè)、網(wǎng)站內(nèi)鏈、網(wǎng)頁設(shè)計公司、微信公眾號
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)