zoukankan      html  css  js  c++  java
  • PHP反序列化漏洞学习

    对反序列化漏洞的个人理解

    反序列化后会倒着方向的去执类里的东西,倘若类里有一些可以命令执行的那么就会导致命令注入。

    反序列化的基础知识

      序列化:serialize
      反序列化:unrealize
    问:为什么要序列化?

    答:很简单,序列化可以把一个数组或对象转化成一个字符串,方便传输和存储。(数组或者对象[类实例化后称之为对象]不好保存到一个文件当中,转换为字符串了就好存储了)

    反序列化的实例:

    <?php 
    class Perman
    {
        public $name = "19";
        public $age = "20";
        public $sex = "girl";
        function __construct()
        {
            echo "hello world.<br/>";
        }
        function action()
        {
            echo "This is action<br/>";
        }
        function __destruct()
        {
            echo "The End<br/>";
        }
    }
    $ok = new Perman();
    $ok -> action();
    echo serialize($ok)."<br/>";//序列化$ok
     ?>

     输出效果:

       

    简单分析一下序列化:realize出来的内容:

      O:代表对象、6:代表对象的长度、s:字符串(this is action<br/>)的长度、19:代表字符串的长度(有一个换行的html代码占据了五个字节)

     可以看到序列化后的代码在构析函数之后执行了。

     再来就是:反序列化:unrealize

    <?php
     class F{
        public $filename='a.txt';
        function __destruct(){
            echo '--------------><br />';
        }
    }
    $a = new F();
    echo $a->filename.'<br />';
    echo serialize($a);
    $b = unserializeecho '<br />'.$b->filename;
    echo '<br />'.$b->filenameF;

    输出效果:

      

    可以看到析构函数输出了两次, 说明这两个应是同一个类, 只是 $b 多出了一个属性 filenameF, filename可直常输出, filenameF也可正常输出。

    对于filenameF就 相当于又返回去执行了F这个对象。倘若在反序列化过程当中:('O:1:"F":1:{s:9:"filenameF";s:8:"bcda.txt";}');可控那么就会导致命令注入,进而产生命令执行。

     反序列漏洞的产生

    在反序列化的时候没有过滤导致反序列化反向执行的时候产生命令注入。

  • 相关阅读:
    使用netty实现im聊天
    使用rabbitmq实现集群im聊天服务器消息的路由
    springcloud feign使用
    10万用户一年365天的登录情况如何用redis存储,并快速检索任意时间窗内的活跃用户
    redis的rdb与aof持久化机制
    springcloud-zinpin的安装与使用
    kafka的基本安装与使用
    RabbitMq 实现延时队列-Springboot版本
    RabbitMq 基本命令
    Dcoker 安装 rabbitMq
  • 原文地址:https://www.cnblogs.com/xishaonian/p/7153411.html
Copyright © 2011-2022 走看看