序列化与反序列化

序列化其实就是将数据转化成一种可逆的数据结构,自然,逆向的过程就叫做反序列化。

比如:现在我们都会在淘宝上买桌子,桌子这种很不规则的东西,该怎么从一个城市运输到另一个城市,这时候一般都会把它拆掉成板子,再装到箱子里面,就可以快递寄出去了,这个过程就类似我们的序列化的过程(把数据转化为可以存储或者传输的形式)。当买家收到货后,就需要自己把这些板子组装成桌子的样子,这个过程就像反序列的过程(转化成当初的数据对象)。

php 将数据序列化和反序列化会用到两个函数:

1.serialize 将对象格式化成有序的字符串

2.unserialize 将字符串还原成原来的对象

 参考:

1.CTF笔记-1-PHP序列化与反序列化(__sleep与__wakeup) - 又菜又爱玩 (shirong.ink)

2.CTF中的序列化与反序列化 - Hel10 - 博客园 (cnblogs.com)

实例:

攻防世界:序列化与反序列化

 打开后:

序列化与反序列化

 _wakeup()函数漏洞原理:当序列化字符串表示对象属性个数的值大于真实个数的属性时就会跳过__wakeup的执行。

序列化结果:
O:4:"peak":3:{s:4:"name";s:9:"lishirong";s:6:"*sex";s:3:"man";s:9:"peakage";s:2:"18";}
0:表示对象(object)
  4:对象名称长度
     peak:对象名称
           3:表示对象里属性的个数
              s:属性名类型
                4:属性名长度
                   name:属性的名称
                              lishirong:属性值

构造payload并进行wakeup绕过 :?code=O:4:"xctf":2:{s:4:"flag";s:3:"111";}

序列化与反序列化

得到flag 

上一篇:聊聊 Kafka: Producer 的网络模型


下一篇:攻防世界-web:unserialize3