您好,登錄后才能下訂單哦!
本篇文章為大家展示了怎么實現Fastjson小于1.2.68版本反序列化漏洞分析,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
遲到的Fastjson反序列化漏洞分析,按照國際慣例這次依舊沒有放poc。道理還是那個道理,但利用方式多種多樣。除了之前放出來用于文件讀寫的利用方式以外其實還可以用于SSRF。
在之前其他大佬文章中,我們可以看到的利用方式為通過清空指定文件向指定文件寫入指定內容(用到第三方庫)。當gadget是繼承的第一個類的子類的時候,滿足攻擊fastjson的條件。此時尋找到的需要gadget滿足能利用期望類繞過checkAutoType。
下面分析了一種利用反序列化指向fastjson自帶類進行攻擊利用,可實現文件讀取、SSRF攻擊等。
從更新的補丁中可以看到expectClass類新增了三個方法分別為:
java.lang.Runnable、java.lang.Readable、java.lang.AutoCloseable
首先,parseObject方法對傳入的數據進行處理。通過詞法解析得到類型名稱,如果不是數字則開始checkAutoType檢查。
當傳入的數據不是數字的時候,默認設置期望類為空,進入checkAutoType進行檢查傳入的類。
判斷期望類,此時期望類為null。往下走的代碼中,autoCloseable 滿足不在白名單內,不在黑名單內,autoTypeSupport沒有開啟,expectClassFlag為false。
其中:
A.計算哈希值進行內部白名單校驗
B.計算哈希值進行黑名單校驗
C.非內部白名單且開啟autoTypeSupport或者是期望類的,進行hash校驗白名單acceptHashCodes、黑名單denyHashCodes。如果在acceptHashCodes內則進行加載( defaultClassLoader),在黑名單內則拋出 autoType is not support。
滿足條件C后來到clazz的賦值,解析來的代碼中對clazz進行了各種判斷。
從明文緩存中取出autoCloseable賦值給 clazz。
當clazz不為空時,expectClassFlag為空不滿足條件,返回clazz,至此,第一次的checkAutoType檢查完畢。
將檢查完畢的autoCloseable進行反序列化,該類使用的是JavaBeanDeserializer反序列化器,從MapDeserializer中繼承。
JSON.DEFAULT_TYPE_KEY 為@type ,并給它賦值傳入的key @type ,將第二個類也就是這次 的gadget傳入。
期望類在這里發生了變化,expectClass的值變為java.lang.AutoCloseable,typeName為gadget,
來到JSONType注解,取typename gadget轉換變為路徑,resource通過將 “.” 替換為”/“得到路徑 。其實已經開始讀取gadget了,它本意應該是加載AutoCloseable。
可以看到這里有讀取文件的功能。
isAssignableFrom()這個方法用于判斷里面的類是否為繼承類,當利用了java.lang.AutoCloseable這個方法去攻擊fastjson,那么后續反序列化的鏈路一定是要繼承于該類的子類。
TypeUtils.addMapping(typeName, clazz)這一步成功把gadget加入緩存中并返回被賦值gadget的clazz.
checkAutoType正式檢查完畢,此時用deserializer = parser.getConfig().getDeserializer(userType); userType既gadget進行反序列化。
進入coreConnect()
在這里進行連接。找到合適并且可利用的常用jar包中的gadget。gadget在被反序列化后即可執行類里的惡意的功能(不僅限于RCE還包括任意文件讀取/創建,SSRF等)。也可以使本漏洞得到最大化的利用。
至此漏洞利用完結。
上述內容就是怎么實現Fastjson小于1.2.68版本反序列化漏洞分析,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。