zoukankan      html  css  js  c++  java
  • 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语句,形成反序列化漏洞

  • 相关阅读:
    Navicat mysql 数据库备份和使用,备份以后是nb3文件
    深入理解IIS的多线程工作机制
    HttpClient系列~StringContent与FormUrlEncodedContent
    C# 串口编程,扫码枪使用
    .NET httpClient Post请求,GET请求方法
    VS2017中使用ReportViewer控件,vs2017找不到Microsoft Rdlc Report Designer for Visual Studio
    jquery 中 fn.apply(this, arguments)是什么函数?有什么作用?能举个例子吗
    JavaScript单线程
    jquery-1.10.2.min.map是什么,怎么用?
    秘钥生成
  • 原文地址:https://www.cnblogs.com/twlr/p/12287670.html
Copyright © 2011-2022 走看看