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语句,形成反序列化漏洞

  • 相关阅读:
    给数据库带来的挑战
    微服务vs传统开发
    服务拆分原则
    架构演化的步骤
    如何进行微服务架构演进
    为什么选择使用Spring Cloud而放弃了Dubbo
    Spring Cloud体系介绍
    Spring Cloud都做了哪些事
    什么是Spring Boot
    微服务架构优势
  • 原文地址:https://www.cnblogs.com/twlr/p/12287670.html
Copyright © 2011-2022 走看看