PHP反序列化基础

作者: const27 分类: All,PHP反序列化 发布时间: 2020-06-03 09:39

php反序列化

基础:

魔术方法

construct(): 当本对象被创建的时候自动调用,(unserialize()时不会被自动调用)
wakeup():    对象被unserialize()时自动调用
destruct():  当本对象被销毁时自动调用
tostring():  当本对象被当作字符串处理时调用(echo等)
get()/set():       当试图获取/写入一个不可达到属性或不存在的值时,会自动调用
call():      与get类似,当试图调用一个不可到达方法时调用
sleep/wakeup  当对象被序列化/反序列化时调用
invoke       当对象被当作函数使用时调用。

其中,对于to_string()的触发条件有很多:

echo/print 打印输出对象时
对象与字符串拼接或==比较时
对象在经过字符串处理函数如 strlen()strstr()等时以及class_exists()时

ctf中的反序列化经验

1.序列化后的结果,一切以var_dump出来的页面的源代码界面为准!,且源代码中的乱码部分hex编码都是00! 此外 private的序列化后属性名会变为 %00class_name%00shuxing_name protected 的序列化后属性名会变为 %00*%00shuxing_name
2.另外一点就是,一个对象被反序列化出来后,他就释放在内存空间成为一个真正存在的对象了
3.还有一点是,序列化只会记录属性和值,不会记录函数
4.反序列化后不会调用__constrict()

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

Leave a Reply

Your email address will not be published. Required fields are marked *

标签云