zoukankan      html  css  js  c++  java
  • php反序列化漏洞-咖面Amber

    https://www.bilibili.com/video/BV1Ft41187ZX

    php反序列化原理

    php序列化与反序列化基础

    • 序列化与反序列化

      • 序列化:将变量转换为可保存或传输的字符串的过程
      • 反序列化:在适当的时候把这个字符串转化为原来的变量使用
    • php序列化与反序列化函数

      • serialize:可以将变量转换为字符串并且在转换中可以保存当前变量的值

      • unserialize:可以将serialize生成的字符串变换回变量

      • php进行序列化的目的是保存一个对象方便以后重用

    • 类,变量,方法,对象

    <?php
       //创建一个person类
    class Person
    {
       //变量
        public $name='';
        public $age=0;
        //方法
        public function Information()
        {
            echo 'Person: '.$this->name.'is '.$this->age.'years old <br/>';
    	}
    }
    
    $per=new Person();
    $per->name='lonmar';
    $per->age=18;
    $per->Information();
    ?>
    

    php序列化实例

    • 序列化一个对象将会保存对象的所有变量, 但是不会保存对象的方法,只会保存类的名字。
    <?php
    class Person
    {
        public $name='';
        public $age=0;
        public function Information()
        {
             echo 'Person: '.$this->name. 'is '.$this->age.' years old <br/>';
    	}
    }
    
    $per=new Person();
    $per->name='lonmar';
    $per->age=18;
    
    echo serialize($per);
    ?>
        
        输出:
    	O:6:"Person":2:{s:4:"name";s:6:"lonmar";s:3:"age";i:18;}
    
    • php反序列化实例
    <?php
    class Person
    {
        public $name='';
        public $age=0;
        public function Information()
        {
             echo 'Person: '.$this->name. 'is '.$this->age.' years old <br/>';
    	}
    }
    
    $per=unserialize('O:6:"Person":2:{s:4:"name";s:6:"lonmar";s:3:"age";i:18;}');
    $per->Information()
    ?>
        
       输出	 Person: lonmaris 18 years old
    
    

    php魔法函数

    • php类中包含了一些魔法函数,这些函数可以在脚本的任何地方不用声明就可以使用
    • 与php反序列化有关的魔法函数

    php反序列化漏洞

    • php反序列化漏洞又称对象注入,可能会导致注入,远程代码执行等安全问题的发生。

    • php反序列化漏洞如何产生:

    如果一个php代码中使用了unserialize函数去调用某一类, 该类中会自动执行一些自定义的magic method,这些magic method中如果包含了一些危险的操作, 或者这些magic method会去调用类中其他带有危险操作的函数,如果这些危险操作是我们可控的,那么就可以进行一些不可描述的操作 了。

  • 相关阅读:
    搭建Maven版SSM工程
    mac终端常用的命令
    常见的HTTP请求错误
    Go通关03:控制结构,if、for、switch逻辑语句
    Go通关14:参数传递中,值、引用及指针之间的区别
    Go通关13:究竟在什么情况下才使用指针?
    Go通关12:如何写出高效的并发模式?
    Go通关11:并发控制神器之Context深入浅出
    Go通关10:并发控制,同步原语 sync 包
    Go通关09:并发掌握,goroutine和channel声明与使用!
  • 原文地址:https://www.cnblogs.com/l0nmar/p/12823486.html
Copyright © 2011-2022 走看看