序列化其实就是将数据转化成一种可逆的数据结构,自然,逆向的过程就叫做反序列化。
比如:现在我们都会在淘宝上买桌子,桌子这种很不规则的东西,该怎么从一个城市运输到另一个城市,这时候一般都会把它拆掉成板子,再装到箱子里面,就可以快递寄出去了,这个过程就类似我们的序列化的过程(把数据转化为可以存储或者传输的形式)。当买家收到货后,就需要自己把这些板子组装成桌子的样子,这个过程就像反序列的过程(转化成当初的数据对象)。
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
标签:__,对象,个数,wakeup,序列化,属性 来源: https://blog.csdn.net/qq_53106085/article/details/121064107
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。