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";}');可控那么就会导致命令注入,进而产生命令执行。

     反序列漏洞的产生

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

  • 相关阅读:
    AlexNet模型
    AlexNet详细解读
    Network in Network学习笔记
    在AlexNet中LRN 局部响应归一化的理
    深度学习相关转载收集
    网络结构解读之inception系列五:Inception V4
    网络结构解读之inception系列四:Inception V3
    网络结构解读之inception系列三:BN-Inception(Inception V2)
    网络结构解读之inception系列二:GoogLeNet(Inception V1)
    mac下安装启动Mongodb
  • 原文地址:https://www.cnblogs.com/xishaonian/p/7153411.html
Copyright © 2011-2022 走看看