PHP serialize&unserialize Study writeup

引进序列化

以下为个人笔记

认识各类型序列化后的样子

序列化(Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对

象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,

重新创建该对象。

相关函数

serialize() 序列化

函数用于序列化对象或数组,并返回一个字符串。序列化对象后,可以很方便的将它传递给其他需要它

的地方,且其类型和结构不会改变。如果想要将已序列化的字符串变回 PHP 的值,可使用 unserialize()

演示代码:

<?php>
$str1="godyu521"; #定义字符串的序列化
$num=20240203;  #定义数字的序列化
$test_bool=True;#定义布尔值的序列化
$str3=array("shenyu",1,"godyu"); #定义数组的序列化
$str2=serialize($str1);
print serialize($num)."\n";
print serialize($test_bool)."\n";
echo $str2."\n";
echo serialize($str3)."\n";
class Godyu{
    public $test="phpserialize"; #定义对象的序列化
    public $test2="study";
    function g(){
        echo "godyu loves ctf"."\n";
        echo  $this->test2;
    }

}
$a=new Godyu();
print serialize($a)."\n";
print $a->g();
?>
图片[1],PHP serialize&unserialize Study writeup,网络安全爱好者中心-神域博客网
图片[2],PHP serialize&unserialize Study writeup,网络安全爱好者中心-神域博客网

序列化只会序列化属性不会序列化方法

图片[3],PHP serialize&unserialize Study writeup,网络安全爱好者中心-神域博客网

触发反序列化的一些魔术方法

图片[4],PHP serialize&unserialize Study writeup,网络安全爱好者中心-神域博客网

特殊属性的反序列化

图片[5],PHP serialize&unserialize Study writeup,网络安全爱好者中心-神域博客网

protected类似python中的封装 直接调用无法调用 但在另一个方法里可以调用

图片[6],PHP serialize&unserialize Study writeup,网络安全爱好者中心-神域博客网

如果是私有成员会在前面加上对象的属名,如果是继承类的就需要加*

GOdyu前后被空字符NULL包裹 ->空字符包裹前后的特殊属性

反序列化

反序列化其实就是把序列化之后的反回来给原来的

<?php
$data = 's:8:"godyu521";';    // 将序列化字符串赋值给变量$data
$result = unserialize($data); // 使用unserialize()函数解码序列化字符串
print($result)."\n";
?>
图片[7],PHP serialize&unserialize Study writeup,网络安全爱好者中心-神域博客网

漏不漏洞的先不提,先来两道CTFshow题

第一个算是没考序列化和反序列化 只是引入逻辑

Web254

图片[8],PHP serialize&unserialize Study writeup,网络安全爱好者中心-神域博客网
图片[9],PHP serialize&unserialize Study writeup,网络安全爱好者中心-神域博客网

那直接传get让他们等于

图片[10],PHP serialize&unserialize Study writeup,网络安全爱好者中心-神域博客网

Web255

图片[11],PHP serialize&unserialize Study writeup,网络安全爱好者中心-神域博客网
图片[12],PHP serialize&unserialize Study writeup,网络安全爱好者中心-神域博客网

我们去复制ctfShowUser的属性 方法不用复制 方法不能被序列化

图片[13],PHP serialize&unserialize Study writeup,网络安全爱好者中心-神域博客网

写一下cookie里需要传的参数

<?php
class ctfShowUser{
    public $username='xxxxxx';
    public $password='xxxxxx';
    public $isVip=True;
}
$user = new ctfShowUser();
$u=serialize($user);
print $u."\n";
$u1=unserialize($u);
print_r ($u1);
?>
图片[14],PHP serialize&unserialize Study writeup,网络安全爱好者中心-神域博客网

写进cookie里

图片[15],PHP serialize&unserialize Study writeup,网络安全爱好者中心-神域博客网

发送即可

图片[16],PHP serialize&unserialize Study writeup,网络安全爱好者中心-神域博客网

最近有些懈怠了

------本文已结束,感谢您的阅读------
THE END
喜欢就支持一下吧
点赞5 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容