反序列化漏洞简介及相关技巧小结
是对象;:4表示改对象名称有4个字符;:”Test”表示改对象的名称;:3表示改对象里有3个成员。 接着是括号里面的。我们这个类的三个成员变量由于变量前的修饰不同,在序列化出来后显示的也不同。 第一个变量a序列化后为 s:1:”a”;s:5:”ThisA”; 由于变量是有变量名和值的。所以序列化需要把这两个都进行转换。序列化后的字符串以分号分割每一个变量的特性。 这个要根据分号来分开看,分号左边的是变量名,分号右边的是变量的值。 先看左边的。其实都是同理的。s表示是字符串,1表示该字符串中只有一个字符,”a”表示该字符串为a。右边的同理可得。 第二个变量和第一个变量有所不同,多了个乱码和 * 号。这是因为第一个变量a是public属性,而第二个变量b是protected属性,php为了区别这些属性所以进行了一些修饰。这个乱码查了下资料,其实是 %00(url编码,hex也就是0×00)。表示的是NULL。所以protected属性的表示方式是在变量名前加个%00*%00 第三个变量的属性是private。表示方式是在变量名前加上%00类名%00 可以看到虽然Test类中有test1这个方法,但是序列化后的字符串中并没有包含这个方法的信息。所以序列化不保存方法。以看到类的成员变量被还原了,但是类方法没有被还原,因为序列化的时候就没保存方法。 魔术方法 大概了解了php序列化和序列化的过程,那么就来介绍一下相关的魔术方法。
(编辑:常州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |