一道反序列化题:
打开后给出了一个php类,我们可以控制code值:
`unserialize()` 会检查是否存在一个 `__wakeup()` 方法。如果存在,则会先调用 `__wakeup` 方法,预先准备对象需要的资源。
作用:__wakeup() 经常用在反序列化操作中,例如重新建立数据库连接,或执行其它初始化操作。
我们先给这个类创建一个对象,然后输出这个对象的序列化值:
然后将序列化结果拿给?code参数进行get请求
发现执行了_wakeup方法,那么怎么绕过这个方法呢?
百度了一下,当序列化字符串表示对象属性个数的值大于真实个数的属性时就会跳过__wakeup
的执行
那么我们把O:4:"xctf":2:{s:4:"flag";s:3:"111";}传给code再进行请求:
得出flag.