浅谈PHP反序列化漏洞原理
序列化与反序列化 序列化用途:方便于对象在网络中的传输和存储 0x01 php反序列化漏洞 在PHP应用中,序列化和反序列化一般用做缓存,比如session缓存,cookie等。 常见的序列化格式: 二进制格式 字节数组 json字符串 xml字符串 序列化就是将对象转换为流,利于储存和传输的格式 反序列化与序列化相反,将流转换为对象 例如:json序列化、XML序列化、二进制序列化、SOAP序列化 而php的序列化和反序列化基本都围绕着 serialize() , unserialize() 这两个函数 php对象中常见的魔术方法 __construct() // 当一个对象创建时被调用, __destruct() // 当一个对象销毁时被调用, __toString() // 当一个对象被当作一个字符串被调用。 __wakeup() // 使用unserialize()会检查是否存在__wakeup()方法,如果存在则会先调用,预先准备对象需要的资源 __sleep() // 使用serialize()会检查是否存在__wakeup()方法,如果存在则会先调用,预先准备对象需要的资源 __destruct() // 对象被销毁时触发 __call() // 在对象上下文中调用不可访问的方法时触发 __callStatic() // 在静态上下文中调用不可访问的方法时触发 _