首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

文章目录

序列化与反序列化

PHP魔法函数

反序列化漏洞

简介

原理

触发条件

示例

PHP反序列化

PHP反序列化

序列化与反序列化

序列化说通俗点就是把一个对象变成可以传输的字符串。

序列化过程中还会对不同属性的变量进行不同方式的变化

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

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

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

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

PHP魔法函数

序列化结构

反序列化漏洞

简介

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

原理

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

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

触发条件

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

示例

payload

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

大致过程:

------------END-----------

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20210101A05OUD00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券