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

     反序列漏洞的产生

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

  • 相关阅读:
    代码书写的细节
    php中的正则函数主要有三个-正则匹配,正则替换
    2个比较经典的PHP加密解密函数分享
    淘宝运营中的6大致命误区,你犯过么?
    30分钟教你写出10分的淘宝标题
    超全的web开发工具和资源
    转化率不好?告诉你转化飙秘诀
    帮你店铺日销千单的20个淘宝小技巧
    不刷单,中小卖家如何提升店铺流量?
    使用Flexible实现手淘H5页面的终端适配
  • 原文地址:https://www.cnblogs.com/xishaonian/p/7153411.html
Copyright © 2011-2022 走看看