先來說說序列化是什么吧,序列化是將對象的狀態(tài)信息轉(zhuǎn)換成可以存儲或傳輸?shù)男问降倪^程。在序列化期間,將對象的當(dāng)前狀態(tài)寫入臨時或永久存儲區(qū)。稍后,您可以通過從存儲區(qū)讀取或恢復(fù)對象的狀態(tài)重新創(chuàng)建對象。簡而言之,序列化是一種將一對象轉(zhuǎn)換為一個字符串的方法,該字符串可以以特定格式在進(jìn)程之間跨平臺傳輸。
php的反序列化漏洞,php的盲點(diǎn),也是一個常見的漏洞,這種漏洞充滿了一些場景,雖然有些很難調(diào)用,但是成功的后果很危險。漏洞形成的根本原因是沒有序列識別程序,從而導(dǎo)致序列字符串的檢測。反序列化漏洞不僅僅存在于php中,而且還存在于java、python中。基本上是一樣的原理。在java反序列化中,調(diào)用反序列化的readobject方法isalized,并在不編寫readobject方法時引起漏洞。
因此,在開發(fā)過程中出現(xiàn)了共同的反序列化漏洞:可以繞過重寫對象輸入流對象的解析類方法中的檢測。使用第三方類的黑名單控件。雖然java比php更加嚴(yán)格,但幾乎不可能使用黑名單機(jī)制禁用大型應(yīng)用程序中的所有危險對象。因此,如果在審計(jì)過程中發(fā)現(xiàn)使用黑名單過濾的代碼,那么大多數(shù)代碼都有一兩條可以被利用的代碼。而黑名單方法只能確保當(dāng)前的安全性,如果稍后添加新的特性,可能會引入利用漏洞的新方法。因此黑名單不能保證序列化過程的安全性。事實(shí)上,大部分反序列化漏洞是由于使用不安全的基礎(chǔ)庫造成的。黑客gabriellawrence和chrisfrohoff于2015年發(fā)現(xiàn)的apachecommons集合庫,直接影響到大型框架,如weblogic、websphere、jboss、jenkins、opennms。脆弱性的影響才得到解決。