【关于学习渗透】手把手教你玩转java反序列化cb链
前言
java反序列化cb鏈大家應該都玩過,博主當初是通過看shiro無依賴了解到的,最近在重學基礎,就手把手一點一點調試一遍。記得11月份自博主反思之后,認為自己滲透的學習深度廣度都太差,對漏洞的學習只是學了一層表面,老是這么搞可不行啊,花一兩個月時間重新看了幾百集java語言基礎。這篇文章嚴格來說是學習java利用鏈的部分學習筆記,這也算博主部分學習的一小段總結吧,話不多說,直接開始。【資料】
一、利用鏈流程
畫了一張流程圖,供大家參考。如圖所示,這里我將從下往上分為三部分來講解利用鏈流程
TemplatesImpt類->調用惡意類
BeanComparator類->利用javabean調用getOutputProperties()
PriorityQueue類->反射調用PropertyUtils.getPropert
二、TemplatesImpt類
根據上面的流程圖我們可以知道TemplatesImpt類的危險方法是getOutputProperties(),我們從頭開始調試。
跑到newTransformer().getOutputProperties(),我們跟進newTransformer()
一路跟進,進入getTransletInstance()
我們看到做了兩個空判斷,_null、_class,之后_class不為空執行defineTransletClasses(),繼續跟進。
如圖所示,這里defineClass從_bytecodes[]中還原出一個Class對象并放在_class中,我們回到getTransletInstance()處,此時_class不為空,繼續往下走。
此時對還原的class做了一個實例化,到這里我們可以得知,在這里傳入一個惡意類,通過靜態代碼塊或者構造方法就可以執行惡意操作。
三、BeanComparator類
我們通過分析TemplatesImpt類已經得知該類可以惡意執行命令,那我們如何調用呢?
這里我們就要引入javabean這個概念了。而TemplatesImpl符合javabean的使用條件
PropertyUtils.getProperty(person,"name")
我們可以通過如上的形式去調用getOutputProperties()方法。接下來我們可以看看都什么函數調用了。
我們可以看到o1為我們傳遞的TemplatesImpt類,構造函數直接賦值,property為_outputProperties。接下來我們只需要找一個同名調用的compare,例如…CC4的優先隊列。
四、PriorityQueue類
首先我們看一下PriorityQueue類,存在Serializable接口,readObject方法。
我們跟進readObject的heapify()方法
可以看到heapify方法做了一個循環,然后將queue數組傳入siftDown方法。跟進siftDown
如果comparator不為空執行siftDownUsingComparator,進行跟進siftDownUsingComparator。
到這里,我們可以看到siftDownUsingComparator方法最終執行了comparator.compare,且comparator我們可以直接反射成BeanComparator。接下來我們只需要將queue添加TemplatesImpl類就可以了。我們看一下add方法。
跟進offer方法
這里我們如果直接傳入一個類,會報int類型錯誤,這里我是先傳數值,之后在通過反射改回來的。
接下來我們的走向很清晰明了,首先我們通過add添加數據,之后做兩步反射,最終執行BeanComparator.compare(TemplatesImpl,1),之后觸發PropertyUtils.getProperty,通過寫好的_name、_bytecodes執行TemplatesImpl的getOutputProperties()。
五、斷點調試利用鏈
首先執行反序列化執行PriorityQueue類的readObject(),進入heapify
做兩步反射,跳轉到BeanComparator.compare,繼續跟進
跳轉到PropertyUtilsBean類,獲取到_outputProperties的get方法。繼續跟進
跳轉到getOutputProperties方法,一路往下走,最終還原class,實例化惡意類。
成功觸發惡意類執行命令
總結
一個個基礎很差 技術很菜的小菜雞,文章里面有什么不足之處,望各位大神多加指正;【學習資料來源】
總結
以上是生活随笔為你收集整理的【关于学习渗透】手把手教你玩转java反序列化cb链的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【网络安全】JAVA代码审计—— XXE
- 下一篇: 【网络安全】2022年第一次靶场渗透实战