返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >php浅析反序列化结构知识点
  • 151
分享到

php浅析反序列化结构知识点

php 2022-08-08 13:08:03 151人浏览 八月长安
摘要

本篇文章主要给大家介绍了关于PHP的相关知识,序列化其实就是将数据转化成一种可逆的数据结构,自然,逆向的过程就叫做反序列化。php将数据序列化和反序列化会用到两个函数:serialize 将对象格式化成有序的字符串、unserialize

本篇文章主要给大家介绍了关于PHP的相关知识,序列化其实就是将数据转化成一种可逆的数据结构,自然,逆向的过程就叫做反序列化。php将数据序列化和反序列化会用到两个函数:serialize 将对象格式化成有序的字符串、unserialize 将字符串还原成原来的对象,希望对大家有帮助。

(推荐教程:PHP视频教程)

简介

序列化的目的是方便数据的传输和存储,在PHP中,序列化和反序列化一般用做缓存,比如session缓存,cookie等。

反序列化中常见的魔术方法

  • __wakeup() //执行unserialize()时,先会调用这个函数

  • __sleep() //执行serialize()时,先会调用这个函数

  • __destruct() //对象被销毁时触发

  • __call() //在对象上下文中调用不可访问的方法时触发

  • __callStatic() //在静态上下文中调用不可访问的方法时触发

  • __get() //用于从不可访问的属性读取数据或者不存在这个键都会调用此方法

  • __set() //用于将数据写入不可访问的属性

  • __isset() //在不可访问的属性上调用isset()或empty()触发

  • __unset() //在不可访问的属性上使用unset()时触发

  • __toString() //把类当作字符串使用时触发

  • __invoke() //当尝试将对象调用为函数时触发

反序列化绕过小Trick

php7.1+反序列化对类属性不敏感

我们前面说了如果变量前是protected,序列化结果会在变量名前加上\x00*\x00

但在特定版本7.1以上则对于类属性不敏感,比如下面的例子即使没有\x00*\x00也依然会输出abc

<?php
class test{
    protected $a;
    public function __construct(){
        $this->a = 'abc';
    }
    public function  __destruct(){
        echo $this->a;
    }
}
unserialize('O:4:"test":1:{s:1:"a";s:3:"abc";}');

绕过_wakeup(CVE-2016-7124)

版本:

PHP5 < 5.6.25

PHP7 < 7.0.10

利用方式:序列化字符串中表示对象属性个数的值大于真实的属性个数时会跳过__wakeup的执行

对于下面这样一个自定义类

<?php
class test{
    public $a;
    public function __construct(){
        $this->a = 'abc';
    }
    public function __wakeup(){
        $this->a='666';
    }
    public function  __destruct(){
        echo $this->a;
    }
}

如果执行unserialize('O:4:"test":1:{s:1:"a";s:3:"abc";}');输出结果为666

而把对象属性个数的值增大执行unserialize('O:4:"test":2:{s:1:"a";s:3:"abc";}');输出结果为abc

绕过部分正则

preg_match('/^O:\d+/')匹配序列化字符串是否是对象字符串开头,这在曾经的CTF中也出过类似的考点

利用加号绕过(注意在url里传参时+要编码为%2B)

serialize(array(a ) ) ; / / a));//a));//a为要反序列化的对象(序列化结果开头是a,不影响作为数组元素的$a的析构)

<?php
class test{
    public $a;
    public function __construct(){
        $this->a = 'abc';
    }
    public function  __destruct(){
        echo $this->a.PHP_EOL;
    }
}
function match($data){
    if (preg_match('/^O:\d+/',$data)){
        die('you lose!');
    }else{
        return $data;
    }
}
$a = 'O:4:"test":1:{s:1:"a";s:3:"abc";}';
// +号绕过
$b = str_replace('O:4','O:+4', $a);
unserialize(match($b));
// serialize(array($a));
unserialize('a:1:{i:0;O:4:"test":1:{s:1:"a";s:3:"abc";}}');

利用引用

<?php
class test{
    public $a;
    public $b;
    public function __construct(){
        $this->a = 'abc';
        $this->b= &$this->a;
    }
    public function  __destruct(){

        if($this->a===$this->b){
            echo 666;
        }
    }
}
$a = serialize(new test());

上面这个例子将$b设置为$a的引用,可以使$a永远与$b相等

16进制绕过字符的过滤

O:4:“test”:2:{s:4:“%00*%00a”;s:3:“abc”;s:7:“%00test%00b”;s:3:“def”;}

可以写成

O:4:“test”:2:{S:4:“\00*\00\61”;s:3:“abc”;s:7:“%00test%00b”;s:3:“def”;}

表示字符类型的s大写时,会被当成16进制解析。

(推荐教程:PHP视频教程)

以上就是php浅析反序列化结构知识点的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: php浅析反序列化结构知识点

本文链接: https://lsjlt.com/news/33594.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • php浅析反序列化结构知识点
    本篇文章主要给大家介绍了关于PHP的相关知识,序列化其实就是将数据转化成一种可逆的数据结构,自然,逆向的过程就叫做反序列化。php将数据序列化和反序列化会用到两个函数:serialize 将对象格式化成有序的字符串、unserialize ...
    99+
    2022-08-08
    php
  • php浅析反序列化结构
    目录简介反序列化中常见的魔术方法反序列化绕过小Trick绕过_wakeup(CVE-2016-7124)绕过部分正则利用引用16进制绕过字符的过滤简介 序列化的目的是方便数据的传输和...
    99+
    2024-04-02
  • php反序列化pop链构造知识点有哪些
    本篇内容主要讲解“php反序列化pop链构造知识点有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“php反序列化pop链构造知识点有哪些”吧!pop链构造一般的反序列化题目,存在漏洞或者能注...
    99+
    2023-06-30
  • Python序列化与反序列化相关知识总结
    Python序列化与反序列 在程序运行的过程中,所有的变量都是在内存中,比如,定义一个 dict: d = dict(name='Bob', age=20, score=88) ...
    99+
    2024-04-02
  • Ezpop pop序列化链反序列化知识
    <php //flag is in flag.php //WTF IS THIS //Learn From https://ctf.ieki.xyz/library/php.h...
    99+
    2024-04-02
  • 图文浅析Java序列化和反序列化
    序列化 序列化:将对象转换为二进制序列在网络中传输或保存到磁盘 反序列化:从网络或磁盘中将二进制序列转换为对象 注意: 对象必须实现Serializable接口 对象的所有属性都要...
    99+
    2024-04-02
  • php 反序列化总结
    果然不记笔记过一段时间就有一些东西忘了,这里给大家一个参考,如果有什么不对,希望各位师傅可以提出来。 目录 基本 序列化 serialize函数  json_encode函数 反序列化 unserialize函数 json_decode函数...
    99+
    2023-09-16
    学习 php 开发语言 经验分享
  • CTF-PHP反序列化漏洞1-基础知识
    作者:Eason_LYC 悲观者预言失败,十言九中。 乐观者创造奇迹,一次即可。 一个人的价值,在于他所拥有的。可以不学无术,但不能一无所有! 技术领域:WEB安全、网络攻防 关注WEB安全、网络...
    99+
    2023-09-05
    php 开发语言 CTF php反序列化 web安全
  • CTF php反序列化总结
    前言:本⼈⽔平不⾼,只能做⼀些类似收集总结这样的⼯作,本篇文章是我自己在学php反序列化写的一篇姿势收集与总结,有不对的地方欢迎师傅们批评指正~ php反序列化 定义:序列化就是将对象转换成字符串。反...
    99+
    2023-08-31
    php web安全 网络安全
  • 深入浅析Java中的序列化与反序列化
    这篇文章将为大家详细讲解有关深入浅析Java中的序列化与反序列化,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Java 序列化和反序列化实例详解在分布式应用中,对象只有经过序列化才能在各个分...
    99+
    2023-05-31
    java 序列化 反序列化
  • 浅析Go中序列化与反序列化的基本使用
    目录什么是序列化与反序列化序列化工作原理在Go中如何序列化一个对象如何格式化序列化后的数据如何给序列化后的xml加上属性如何将xml反序列化为一个对象什么是序列化与反序列化 这里引入...
    99+
    2023-05-16
    Go序列化 反序列化使用 Go序列化 反序列化 Go序列化 Go 反序列化
  • Think PHP 6.0.13反序列化分析
    原poc链接:https://github.com/top-think/framework/issues/2749 think PHP 6.0.13下载 composer create-project topthink/think tp p...
    99+
    2023-10-06
    php web安全
  • R语言时间序列知识点总结
    时间序列对象:变量随着时间变化 时间序列的回归函数(例如ar或arima)通常以时间序列作为参数 许多绘图函数都有针对时间序列对象的特殊方法 ts函数创建时间序列对象 ts(da...
    99+
    2024-04-02
  • PHP反序列化漏洞详解(万字分析、由浅入深)
    文章目录 一、PHP面向对象编程public、protected、private魔术方法(magic函数)魔术方法在反序列化攻击中的作用 二、PHP序列化和反序列化PHP序列化PHP反序列...
    99+
    2023-10-27
    php PHP反序列化漏洞 魔术函数 mysql url
  • PHP数据结构:序列化与反序列化的艺术,实现数据持久化与传输
    在 php 中,序列化将数据结构转换为字符串,而反序列化将字符串还原为数据结构,实现数据的持久化和传输。序列化函数 serialize 将数据结构转换为字符串,而 unserialize...
    99+
    2024-05-14
    php 数据结构
  • PHP反序列化漏洞实例分析
    本篇内容介绍了“PHP反序列化漏洞实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、PHP面向对象编程在面向对象的程序设计(Obje...
    99+
    2023-06-29
  • PHP的session反序列化漏洞分析
    这篇文章主要讲解了“PHP的session反序列化漏洞分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PHP的session反序列化漏洞分析”吧!PHP session反序列化漏洞PHP ...
    99+
    2023-06-30
  • CTF-PHP反序列化漏洞3-构造POP链
    作者:Eason_LYC 悲观者预言失败,十言九中。 乐观者创造奇迹,一次即可。 一个人的价值,在于他所拥有的。可以不学无术,但不能一无所有! 技术领域:WEB安全、网络攻防 关注WEB安全、网络...
    99+
    2023-10-09
    php 开发语言 web安全 反序列化漏洞 pop链
  • 一道php反序列化题的pop链构造
    题目地址为:GitHub - mcc0624/php_ser_Class: php反序列化靶场 点击进入如下题 题目代码如下,其中像套娃一样,多次对魔术方法进行调用,挺烧脑。根据题目,显然目标是echo $flag 像这种题,需要使...
    99+
    2023-09-04
    php反序列化题 ctf pop链构造
  • PHP反序列化新手入门学习总结
    最近写了点反序列化的题,才疏学浅,希望对CTF新手有所帮助,有啥错误还请大师傅们批评指正。 php反序列化简单理解 首先我们需要理解什么是序列化,什么是反序列化? PHP序列化:serialize()...
    99+
    2023-09-06
    php PHP反序列化 CTF
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作