我們想來弄個"瓶裝綜合果汁"在 500cc 的杯子裡
原料預計是 200cc 瓶裝甘蔗汁 + 300cc 的瓶裝蘋果汁做混合
但是…原裝甘蔗汁拿去冷凍忘記退冰了,是甘蔗冰塊!!!!!
結果,兩個混合的果汁,在 500cc 的杯子裝不下就滿出來了…
這樣你有抓到一點點反序列化的精神了嗎 XDDDD
預期序列化的內容為資料時,透過未檢核的內容,執行反序列化時卻將資料內容轉為指令執行,進而達到攻擊,導致遠端程式執行或是重播攻擊、注入攻擊和越權攻擊…
簡單說明越權存取應用:
本質在於物件注入(Objection Injection),反序列化攻擊的兩個要點:
其嚴重性取決於所注入的物件是否會造成危險功能,像說覆蓋既有物件進而執行非預期功能… 等等。
白名單檢驗
不要信任所有前端 User 可以輸入的資料,所以針對前端的來源,加上檢核即可。
停用部份系統功能
雖然治標不治本,或許可以停用 JVM 執行外部命令 Runtime.exec …等等系統功能。
停用反序列化功能
或是不用反序列化的功能了 XDDDD
甲骨文計畫放棄Java物件序列化功能:https://www.ithome.com.tw/news/123511
加上異常處理記錄或警示
反序列化異常時,將readObject()聲明為final並且拋出異常
但可能不能解決反序列化的根源問題
private final void readObject(ObjectInputStream in) throws java.io.IOException
{ throw new java.io.IOException("Cannot be deserialized");
}
另外,有前輩推薦一套好用的Java 反序列化漏洞檢測工具:ysoserial,該工具通過多種機制構造PoC,運用反射機制和動態代理機制,有興趣的話可以裝看看。//先說我沒裝 =v=|||
一篇文章带你深入理解漏洞之 PHP 反序列化漏洞
https://www.k0rz3n.com/2018/11/19/%E4%B8%80%E7%AF%87%E6%96%87%E7%AB%A0%E5%B8%A6%E4%BD%A0%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3PHP%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96%E6%BC%8F%E6%B4%9E/