• PHP反序列化漏洞详解


    PHP反序列化漏洞

      首先我们要了解反序列化就要明白什么是序列化

    序列化

      序列化是一个将对象转化为实例的过程

      在php文件中,有的对象内容需要使用,但是使用的频率不高,将代码存放的话会占用系统资源,但是删除则下次使用时就要重新码增加了负担,所以序列化就帮助程序员解决了这个问题,它可以将不常用的代码进行序列化,从而省去了系统的空间,当需要使用这段代码时将代码反序列化就可以接着使用

      序列化类似于json格式,有序列化函数:serialize()

      示例代码:

      

    <?php
    class democlass
    {
        public $name = "Tony";
        public $sex = "man";
        public $age = "22";
    }
    
    $example = new democlass();
    $example->name = "John";
    $example->sex = "woman";
    $example->age = "18";
    
    echo serialize($example);
    
    ?>

      访问代码后:  

      O:代表对象

      a :表示数组

      s:表示字符

      

    反序列化

      了解了序列化后就明白反序列化就是将一个实例转为对象的过程

      反序列化函数:unserialize()

     

    漏洞如何利用

      从上我们可以看出,序列化和反序列化都是非常正常的常用手法,为什么在常见的过程中会出现漏洞呢?这个时候我们就要了解一下php的魔法函数:

      _construct() 当一个对象被创建时调用

      _destruct() 当一个对象被销毁时调用
      _toString() 当一个对象被当作一个字符串使用
      _sleep() 在对象再别序列化之前运行
      _wakeup() 将在序列化之后调用

       当实例转为对象时会触发魔法函数,直接调用执行,所以当我们将一个恶意代码进行序列化后,再进行反序列化就会直接触发执行恶意代码

      示例代码:

      

    <?php
    class S{
        public $test = "<img src=x onerror=alert(1)>";
    }
    $a = new S();
    echo serialize($a);
    ?>

      执行生成实例代码:O:1:"S":1:{s:4:"test";s:28:"<img src=x onerror=alert(1)>";}

      然后将实例进行反序列化

      

     直接执行xss语句,形成反序列化漏洞

  • 相关阅读:
    把影响集中到一个点
    How to avoid Over-fitting using Regularization?
    适定性问题
    Numerical Differentiation 数值微分
    What Every Computer Scientist Should Know About Floating-Point Arithmetic
    Generally a good method to avoid this is to randomly shuffle the data prior to each epoch of training.
    What is the difference between iterations and epochs in Convolution neural networks?
    Every norm is a convex function
    Moore-Penrose Matrix Inverse 摩尔-彭若斯广义逆 埃尔米特矩阵 Hermitian matrix
    perl 类里的函数调用其他类的函数
  • 原文地址:https://www.cnblogs.com/twlr/p/12287670.html
Copyright © 2020-2023  润新知