反序列化 什么是反序列化? 格式转换 序列化:对象转换为字符串或者数组等格式 反序列化:将数组或字符串转换成对象 为什么会出现安全漏洞? 魔术方法 如何利用漏洞? 通过构造pop链,找到代码的逻辑漏洞,进行getshell,rce等操作 反序列化利用分为三类 魔术方法的调用逻辑 语言原生类的调用逻辑
反序列化是一种格式转换的过程,它将对象从字符串或数组等格式转换为对象。与序列化相对应的是将对象转换为可存储或可传输的格式的过程。反序列化在计算机编程中起到了重要的作用,但同时也可能存在安全漏洞。
序列化是指将对象的状态信息转换为可存储或可传输的格式的过程。在各种编程语言中,序列化的逆过程就是反序列化,主要是为了方便对象传输。
反序列化利用分为三类:魔术方法的调用逻辑、语言原生类的调用逻辑(如SoapClient)、以及语言自身的安全缺陷(如CVE-2016-7124)。
在PHP中,基本类型的序列化形式如下:
bool: b:value =>b:0
int: i:value=>i:1
str: s:length:“value”;=>s:4"aaaa"
array :a::{key:value pairs};=>a:{i:1;s:1:“a”}
object:O::
NULL: N
序列化前:
序列化后:
O:4:“test”:5:{s:1:“a”;b:0;s:1:“b”;i:3;s:1:“c”;s:5:“hello”;s:1:“d”;a:4:{i:0;i:1;i:1;i:2;i:2;i:3;i:3;s:5:“hello”;}s:1:“e”;N;}