序列化和反序列化

一、什么是序列化和反序列化:

        1、序列化:

                 将对象的状态信息转换为可存储或传输的星时代的过程。

        2、反序列化:

                将可存储或传输的形式的过程恢复为对象的过程

        3、存储格式:

                二进制、XML、JSON

二、反序列化漏洞:

        序列化与反序列化机制本身并无问题,但应用程序对于用户输入数据(不可信数据)进行了反序列化处理,使反序列化生成了非预期的对象,在对象的产生过程中可能产生攻击行为。

        常见编程语言PHP、JAVA、Python中均具有反序列化问题,但由于JAVA的公用库,如Apache Commons Collections的广泛使用,导致WebLogic、webSphere、JBoss、Jenkins等应用均具有此漏洞。

三、PHP序列化与反序列化

首先在WWW目录下创建student.php文件:

<?php

class Student{
    public $name;
    public $age;
    public function Say(){
        echo 'Hello, I am '.$this->name. ', I am '.$this->age.' years old'.'<br />';
    }
}

$s1 = new Student();
$s1->name = 'liming';
$s1->age = 44;
$s1->Say();

?>

执行结果为:

序列化:

PHP通过serialize进行序列化操作,保存对象以供以后使用:

<?php

class Student{
    public $name;
    public $age;
    public function Say(){
        echo 'Hello, I am '.$this->name. ', I am '.$this->age.' years old'.'<br />';
    }
}  

$s1 = new Student();
$s1->name = 'liming';
$s1->age = 44;
$s1->Say();

echo serialize($s1);  

?>

执行结果为:

O:7:"Student":2:{s:4:"name";s:6:"liming";s:3:"age";i:44;}为序列化结果。

反序列化:

<?php

class Student{
    public $name;
    public $age;
    public function Say(){
        echo 'Hello, I am '.$this->name. ', I am '.$this->age.' years old'.'<br />';
    }
}  

$s2 = unserialize('O:7:"Student":2:{s:4:"name";s:6:"liming";s:3:"age";i:44;}');
$s2->Say();

$s3 = unserialize('O:7:"Student":2:{s:4:"name";s:5:"xuyin";s:3:"age";i:66;}');
$s3->Say();

?>

执行结果:

 反序列化漏洞复现:

在www目录下创建log.php文件:

<?php

class LOG{

    public $filename = 'access.txt';
    function Write_log($text){
        echo "access".$text;
        file_put_contents($this->filename,$text,FILE_APPEND);
    }
}

$log1 = new LOG();
$log1->Write_log('Sometimes your whole life boils down to one insane move.');

?>

 执行结果为:

成功在www目录下创建文件

 

 

创建log1.php文件

<?php

class LOG{

    public $filename = 'access.txt';
    function Write_log($text){
        echo "Delete".$text;
        file_put_contents($this->filename,$text,FILE_APPEND);
    }
}

$log2 = unserialize($_POST['s']);
$log2->Write_log('unserialize data!!!');

?>

 执行代码:

 

access.txt文件被删除

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值