先来说说序列化是什么吧,序列化是将对象的状态信息转换成可以存储或传输的形式的过程。在序列化期间,将对象的当前状态写入临时或永久存储区。稍后,您可以通过从存储区读取或恢复对象的状态重新创建对象。简而言之,序列化是一种将一对象转换为一个字符串的方法,该字符串可以以特定格式在进程之间跨平台传输。
php的反序列化漏洞,php的盲点,也是一个常见的漏洞,这种漏洞充满了一些场景,虽然有些很难调用,但是成功的后果很危险。漏洞形成的根本原因是没有序列识别程序,从而导致序列字符串的检测。反序列化漏洞不仅仅存在于php中,而且还存在于java、python中。基本上是一样的原理。在java反序列化中,调用反序列化的readobject方法isalized,并在不编写readobject方法时引起漏洞。
因此,在开发过程中出现了共同的反序列化漏洞:可以绕过重写对象输入流对象的解析类方法中的检测。使用第三方类的黑名单控件。虽然java比php更加严格,但几乎不可能使用黑名单机制禁用大型应用程序中的所有危险对象。因此,如果在审计过程中发现使用黑名单过滤的代码,那么大多数代码都有一两条可以被利用的代码。而黑名单方法只能确保当前的安全性,如果稍后添加新的特性,可能会引入利用漏洞的新方法。因此黑名单不能保证序列化过程的安全性。事实上,大部分反序列化漏洞是由于使用不安全的基础库造成的。黑客gabriellawrence和chrisfrohoff于2015年发现的apachecommons集合库,直接影响到大型框架,如weblogic、websphere、jboss、jenkins、opennms。脆弱性的影响才得到解决。