攻防世界-unserialize3


攻防世界-unserialize3

序列化和反序列化

序列化通俗来讲就是将对象转化为可以传输的字符串;

反序列化就是把那串可以传输的字符串再变回对象。

例子:

<?php
class chybeta{
        var $test = '123';
}
$class1 = new chybeta;    //这里就是创建啦一个新的对象
$class1_ser = serialize($class1);   //将这个对象进行字符串封装,就是对其进行序列化
print_r($class1_ser);
?>

img

来解释一下:O:7:"chybeta":1:{s:4:"test";s:3:"123";}

这里的O呢就是object对象的意思,数字7代表着对象的函数名有7个占位,然后就是对象名了

这个数字1表示对象里有一个变量,大括号里的s代表的是string类型还有一个i是int型

再使用反序列化函数,结果print为chybeta Object([test] => 123)

原文链接:https://blog.csdn.net/LTtiandd/article/details/99591998

魔法函数

在这里插入图片描述

题目分析

访问看到image-20210802102055048

明显需要看出需要绕过__wakeup函数才行,?code表名使用GET方法传参数__

code可能是XCTF类序列化再反序列化的结果

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

所以将对象数改成1以上的值就可以,也就是XCTF后的2,表示的是类中的变量的个数。

payload: ?code=O:4:"xctf":2:{s:4:"flag";s:3:"111";}

参考:(3条消息) 攻防世界-unserialize3_魔术函数,以及wakeup()函数的绕过_Kvein Fisher的博客-CSDN博客


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM