10-反序列化漏洞
PHP 类与对象
类:一个共享相同结构和行为的对象的集合
对象:类的实例
PHP Magic 函数
魔术方法是一种特殊的方法,当对对象执行某些操作时会覆盖 PHP 的默认操作。


PHP 序列化和反序列化
序列化:把对象转换为字符
反序列化:对单一的已序列化的变量进行操作,将其转换为 PHP 的值
serialize
其他序列化格式:
json 字符串 json_encode
xml 字符串 wddx_serialize_value
二进制格式
字节数组
若类中同时定义了__unserialize () 方法和__wakeup () 方法,则反序列化时只会调用__unserialize () 方法
漏洞发生条件
- unserialize 函数的参数可控
- 脚本中定义了 Magic 方法,方法中有读写 php 文件或执行命令的操作,如__destruct (), unlink ()
- 操作的内容需要有对象中的成员变量的值,如 filename
常见利用函数
命令执行:
exec (), passthru (), popen (), system (), call_user_func
文件操作:
file_put_contents (), file_get_contents (), unlink ()