绕过 O: 过滤
有些题目会过滤序列化字符串里的 O:,阻止直接反序列化对象。这个笔记记录几种常见绕法,建议和 反序列化基础、绕过wakeup 一起看。
1. O:+6
部分 PHP 版本或场景中,对对象长度标记的解析可以接受带 + 的形式,例如把 O:6:"Class" 改成 O:+6:"Class",从而绕过简单字符串匹配。
2. 放入数组
如果过滤只针对字符串开头或固定位置,可以把对象放进数组中,让序列化结果从 a: 开头。
serialize(array($a));3. C 开头绕过
可以参考 绕过wakeup 里提到的 C 开头序列化格式绕过。核心是让过滤规则只盯 O: 时,改用其他可触发对象逻辑的序列化形式。
注意
- 这类绕过强依赖 PHP 版本和目标类是否支持对应序列化格式。
- 不要只记 payload,要在题目里确认过滤发生在反序列化前还是存储前。