zoukankan      html  css  js  c++  java
  • 网络安全从入门到精通(第九章-4) unserialize反序列化漏洞

    本文内容:

    • 什么是发序列化
    • 小技巧函数
    • 魔术方法和反序列化利用

    1,什么是反序列化:

      1.什么是序列化:

        是将对象的转台信息转换为可以存储或传输的形式的过程[将状态信息转换为字符串]。

      2.什么是反序列化:

        反序列化就是再将这个状态信息拿出来使用[将字符串转换为状态信息]。

      3.状态信息:

        对象、类、数组、变量、自定函数等。

      4.反序列化漏洞:

        可以任意控制反序列化处理的字符串,就是反序列化漏洞。

    2,小技巧函数:

      1.__FILE__:获取当前文件路径。

      2.show_source():显示文件源码。

      3.print_r():可以输出非字符串,如对象,数组等。

      4.serialize:序列化,将对象状态信息转化为字符串。

      5.unserialize:反序列化,将字符串转化为对象的状态信息。

      举例:

        show_source(__FILE__) :查看当前文件的内容[源码]

        show_source("x.php") :查看x.php文件的内容[源码]

        serialize():将对象转变成字符串:   

          <?php
          show_source(__FILE__);
          class aa {
          var $b = '123';
          }
          $class1 = new aa; 新建对象
          $class1_ser=serialize($class1);  序列化
          var_dump($class1_ser);
          ?>

          运行结果:O:2:"aa":1:{s:1:"b";s:3:"123":}

          解释:

            O表示object对象。

            2表示对象的名称有2个字符。

            aa对象名称,1表示只有一个值

            s表示字符串1表示变量名字长度

            s表示字符串3表示变量值的长度

        unserialize():可以从序列化后的结果中恢复对象[object]。    

          <?php
          show_source(__FILE__);
          class aa {
          var $b = '123';
          }
          $class2 = 'O:2:"aa":1:{s:1:"b";s:3:"124";}' ;
          $class2_ser=unserialize($class2);  反序列化
          var_dump($class2_ser);
          ?>

          运行结果:aa Object([b] => 124)

    3,魔术方法和反序列化利用:

      1.__construct():当对床创建[new]时会自动调用,但是在unserialize()时是不会调用的。

      2.__destruct():当对象被销毁时会自动调用。

      3.__wankeup():如前所提:unserialize()时自动调用。

    注意:

    本质上serialize()和unserialize()在php内部实现上是没有漏洞的,漏洞的主要产生是由于应用程序在处理对象、魔术函数以及序列化相关问题的时候导致的。 

    当unserialize()的参数可控时,那么用户就可以注入精心构造的payload,当进行反序列化的时候就有可能会触发对象中的一些魔术方法,造成意想不到的危害。

  • 相关阅读:
    注册算法入门
    call传参之通过堆栈
    winhex注意
    输入字符串长度
    integer promotion
    网页flash兼容浏览器代码
    逆向工程——注册篇
    esp定律的一点说明
    base64
    意外
  • 原文地址:https://www.cnblogs.com/xz25/p/12765911.html
Copyright © 2011-2022 走看看