php反序列化漏洞-咖面Amber

Posted L0NMAR

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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会去调用类中其他带有危险操作的函数,如果这些危险操作是我们可控的,那么就可以进行一些不可描述的操作 了。

以上是关于php反序列化漏洞-咖面Amber的主要内容,如果未能解决你的问题,请参考以下文章

15-PHP代码审计——yii 2.0.37反序列化漏洞

15-PHP代码审计——yii 2.0.37反序列化漏洞

16-PHP代码审计——Typecho1.0.14反序列化漏洞

16-PHP代码审计——Typecho1.0.14反序列化漏洞

PHP反序列化漏洞代码审计—学习资料

最全的PHP反序列化漏洞的理解和应用