PHP反序列化字符逃逸详解

这段时间遇到几个关于反序列化的字符逃逸的程序,今天来分享一下经验。

<?php
function filter($str){
return str_replace('bb', 'ccc', $str);
}
class A{
public $name='aaaa';
public $pass='123456';
}
$AA=new A();
$res=filter(serialize($AA));
$c=unserialize($res);
echo $c->pass;
?>

以上面代码为例,如何在不直接修改 $pass 值的情况下间接修改 $pass 的值。

代码的流程为:

先序列化代码,然后将里面不希望出现的字符替换成自定义的字符串。然后进行反序列化,最后输出 pass 变量。

要解决上面这个问题,先来看一下 php 序列化代码的特征。

6b4655a5d5c4b6b3a6457c564470d08e.png

在反序列化的时候 php 会根据 s 所指定的字符长度去读取后边的字符。

如果指定的长度错误则反序列化就会失败。

8a9d86539028252c28be02194173e907.png

此时的 name 所读取的数据为 aaaa ” 而正常的语法是需要用 ” ; 去闭合当前的变量,而因为长度错误所以此时 php 把闭合的双引号当做了字符串,所以下一个字符就成了分号,没能闭合导致抛出了错误。

把精力回到开头所说的代码,根据刚才讲的,如果我们将 name 变量中添加 bb 则程序会报错。

646888a64e39bd73ab916d71ab019c3a.png

查看过滤前后的代码能发现,应该是 6 位长度的 name 变量在过滤后变成了 7 位,根据反序列化读取变量的原则来讲,此时的 name 能读取到的是 aaaacc ,末尾处的那个 c 是读取不到的,这就形成了一个字符串的逃逸。当我们添加多个 bb ,每添加一个 bb 我们就能逃逸一个字符,那我们将逃逸的字符串的长度填充成我们要反序列化的代码的话那就可以控制反序列化的结果以及类里面的变量值了。

88c1afdac6f9838804796ebc07958486.png

填充如上图数量的 bb 即可修改 pass 的值。

具体分析如下:

2b43c25adc9431ed671532e0c89e033e.png

逃逸或者说被 “顶”出来的 payload 就会被当做当前类的属性被执行。

91fd1c646647e6d5864ee9c3c21fa014.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/40064.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue报错:Component name “xxx” should always be multi-word vue/multi-word-component

问题&#xff1a;搭建脚手架时报错&#xff0c;具体错误如下&#xff1a; ERROR in [eslint] E:\personalProject\VueProjects\vueproject2\src\components\Student.vue10:14 error Component name "Student" should always be multi-word vue/multi-word-compon…

【办公类-52-01】20240703计划小结的缩略版制作(获取字符最多的3个字,删除字后面的内容)

背景需求&#xff1a; 每学期写完“信息计划”“信息小结”都需要上传园所“圆圆通”的信息公开&#xff0c;领导要求使用缩略版&#xff08;就是删掉一些内容&#xff0c;不能整篇都发布出去&#xff0c;以免被抄袭&#xff1f;&#xff09; 2023年第二学期的信息小结有16页 …

CX1概念车空气动力学设计,打造典型“美式肌肉车”风格

Altair CX1概念车的设计 CX1是Altair公司为了满足汽车行业的设计和虚拟仿真需求而开发的一款概念车型。该车总长接近5米&#xff0c;外观具有典型的美式肌肉车的风格&#xff0c;具有视觉冲击力。 车辆的外形设计过程就是风险管理&#xff0c;设计师想要一个大胆而富有表现力的…

赢麻了!苹果再获OpenAI董事会观察员席位!0元白嫖ChatGPT,比肩微软

今年&#xff0c;苹果和OpenAI的合作有点密切。 据最新消息&#xff0c;苹果获得OpenAI的董事会观察员席位。 苹果应用商店负责人、前营销主管菲尔席勒&#xff08;Phil Schiller&#xff09;将担任这一职位&#xff0c;但Schiller迄今为止尚未出席任何OpenAI的会议。 观察员…

C语言刷题小记

前言 本篇博客和大家分享一些C语言的OJ题目&#xff0c;希望大家可以通过这些题目进一步提升自己的编程能力&#xff0c;如果你对本篇内容感兴趣&#xff0c;可以一键三连&#xff0c;多多关注&#xff0c;下面进入正文部分。 题目1 十六进制转十进制 描述 BoBo写了一个十六…

firewalld(6)自定义services、ipset

简介 在前面的文章中我们已经介绍了zone、rich rule 、--direct等功能和基本配置。在前面文章中&#xff0c;我们提到过firewalld内置了很多服务&#xff0c;可以通过firewall-cmd --get-services来查看服务&#xff0c;也可以通过配置文件查看这些服务/var/lib/firewalld/ser…

【Unity 角色控制器组件】

【Unity 角色控制器组件】 Character Controller&#xff1a; Unity 内置的一个组件&#xff0c;用于提供高级的物理控制&#xff0c;允许开发者控制角色的移动、跳跃和碰撞。 csharp csharp // 假设你已经有了一个带有Character Controller组件的游戏对象// 获取Character Co…

In Ictu Oculi: Exposing AI Created Fake Videos by Detecting Eye Blinking

文章目录 In Ictu Oculi: Exposing AI Created Fake Videos by Detecting Eye Blinking背景关键点内容预处理Long-Term Recurrent CNNsLSTM-RNN模型训练实验data启示In Ictu Oculi: Exposing AI Created Fake Videos by Detecting Eye Blinking 会议:2018 IEEE International…

容嬷嬷给紫薇过生日:鬼畜搭台,AI带货

刚入7月&#xff0c;短视频平台已被AI视频续写占领。 类似于紫薇在地牢里被容嬷嬷喂西瓜、喂鸡翅、喂蛋糕。张学友在《旺角卡门》的经典镜头突然给你微笑、嘟嘴、甚至祝你生日快乐。甚至&#xff0c;还有吴京从打斗戏变成亲吻戏。 在AI续写的短视频里&#xff0c;你永远也想象…

【最新综述】医学图像分割深度半监督学习(上)

摘要&#xff1a; 最近&#xff0c;深度学习在各种计算机视觉任务中展现出了巨大的前景。然而&#xff0c;在许多实际应用中&#xff0c;没有大规模的标记数据集&#xff0c;这限制了深度学习的应用。为了解决这个问题&#xff0c;半监督学习引起了计算机视觉界的广泛关注&…

二叉树的前中后序遍历(递归法、迭代法)leetcode144、94/145

leetcode144、二叉树的前序遍历 给你二叉树的根节点 root &#xff0c;返回它节点值的 前序 遍历。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,2,3] 示例 2&#xff1a; 输入&#xff1a;root [] 输出&#xff1a;[] 示例 3&#xff1a; 输…

CesiumJS【Basic】- #057 绘制纹理填充多边形(Primitive方式)

文章目录 绘制纹理填充多边形(Primitive方式)1 目标2 代码2.1 main.ts绘制纹理填充多边形(Primitive方式) 1 目标 使用Primitive方式绘制绘制纹理填充多边形 2 代码 2.1 main.ts import * as Cesium from cesium;const viewer = new Cesium.Viewer

测试Andrew NG的语言翻译Agent

我正在测试 Andrew Ng 的语言翻译 A​​I 代理系统及其在逆变换下的稳定性。 给定源语言的文本&#xff0c;我们应用翻译函数 f&#xff0c;然后应用 f 的逆。它应该是不变的&#xff1a; 但是&#xff0c;数学与语言翻译有什么关系&#xff1f; 在完美的系统中&#xff0c;从…

springboot异常产生原因

DataIntegrityViolationException Cause: java.sql.SQLException: Field ‘id’ doesn’t have a default value org.springframework.dao.DataIntegrityViolationException: ### Error updating database. Cause: java.sql.SQLException: Field id doesnt have a default …

[译]全栈Redux实战

本文乱译自一篇英文博文&#xff08;Full-Stack Redux Tutorial&#xff09;&#xff0c;本人英语能力不足&#xff0c;技术能力有限&#xff0c;如有错误&#xff0c;多多包涵。 #关于ReduxReactImmutable的测试先行开发综合指南 Redux是最近发生在js界令人兴奋的事儿。它把…

提升Unity WebGL游戏启动速度

一、查看启动耗时 通过修改unity-namespace.js中hideTimeLogModal为false&#xff0c;显示timelog开发者可以看到小游戏目前的启动首屏时长&#xff1a; 将其设置为false后&#xff0c;启动小程序后就会显示启动耗时 要知道各个阶段的含义&#xff0c;我们必要理解启动流程。 …

springboot 整合 mybatis-plus

一.前言 1. mybatis-plus是什么 mybatis-plus是一个对mybati框架的拓展框架&#xff0c;它在mybatis框架基础上做了许多的增强&#xff0c;帮助我们快速的进行代码开发。目前企业开发中&#xff0c;使用mybati的项目基本会选择使用mybatis-plus来提升开发效率。 2.官网地址&…

LT8668SXC 、LT8668SX-D 、LT8668SX三种芯片的相似与不同

一、LT8668SXC(支持eDP输出&#xff09; 定义:LT8668SXC配置在HDMI2.1标准下工作&#xff0c;最大数据速率为8Gbps。 LT8668SXC还可以配置为在Type-C输入或DP1.4a下工作&#xff0c;数据速率高达8.1Gbps。 eDP1.4b输出由8个数据通道组成&#xff0c;支持RBR (1.62Gbps)、HBR (2…

比较多种msvcr110.dll丢失的解决方法,哪一种更加方便?

当遇到“msvcr110.dll丢失”这种问题时&#xff0c;这通常意味着你的系统中缺少了Microsoft Visual C 2012 Redistributable的组件。下面我将详细介绍五种解决方法&#xff0c;并对比它们的优点。 一.多种msvcr110.dll丢失的解决方法 方法 1: 重新安装Microsoft Visual C 2012…

Redis持久化的三种方式(RDB、AOF和混合)

Redis持久化的三种方式(RDB、AOF和混合) 目录 Redis持久化的三种方式(RDB、AOF和混合)介绍RDB示例1.配置文件2.触发 RDB 快照保存3.验证 AOF示例1.配置文件2.校验 混合型持久化存储配置文件 介绍 Redis数据主要存储与内存中&#xff0c;因此如果服务器意外重启、宕机、崩溃&am…