寒假学web--day09

news2025/1/27 6:12:17

简介

一些魔法函数与php反序列化漏洞

tips

反序列化和类的方法无关,不能把类的方法序列化

将php.exe所在目录放到环境变量中,就可以在终端里通过php.exe ./命令来执行php代码

魔术方法

__construct()

在实例化一个对象时会自动调用,可以用来初始化非public属性的值

php的构造方法不能重载

序列化与反序列化时,不会自动调用构造方法

__sleep()   __wakeup()

会在序列化和反序列化时自动执行

serialize函数会检查类中是否存在魔术方法__sleep(),如果存在,该方法会被先调用,然后再执行反序列化,此功能可以用于清理对象,并返回一个包含对象中所有应被序列化的变量名称的数组,如果该方法未返回任何内容,则NULL被序列化,比如

return ['username','password'];

如果被反序列化的变量是是一个对象,在成功重新构造对象之后,php会自动试图去调用wakeup()成员函数

__destruct()

销毁类的对象时自动执行

在程序最后一段写杀死相应的php进程的代码可以绕过析构方法,如果是在浏览器访问

system('taskkill /fi "imagename eq php-cgi.exe" /f');

 __call()   __callstatic()

对象执行类不存在的方法时,就会调用call方法

直接执行类不存在的静态方法时,会自动调用get方法

__get  __set  __isset  __unset

对不可访问或不存在的属性访问或引用时,会自动调用__get方法

对不可访问或不存在的属性赋值时,会自动调用__set方法

将类不可访问的属性作为isset函数的参数时,会自动调用__isset

将类不可访问的属性作为unset函数的参数时,会自动调用__unset

__tostring()

类的实例和字符串进行拼接或作为字符串使用时,会自动调用__tostring()方法

__invoke()

将类的实例被作为函数名字执行的时候,会调用invoke方法

__set_state()

执行var_export()时自动调用

__debuginfo()

执行var_dump时自动调用

__clone()

当使用clone关键字,clone一个对象时会自动调用

反序列化漏洞的条件

有反序列化提交的入口

被反序列化的类的魔术方法有可能被利用

绕过__wakeup方法

条件:


php5至php 5. 6.25之间的版本可以绕过

php7至php7 .0.10之间的版本可以绕过

绕过方法

让反序列化字符串中表示属性数量的值大于大括号内实际属性的数量时,wakeup方法就不会被调用

应用

常见的时wakeup里面会给一个属性赋值,而destruct里面可以由我们给属性赋值,所以我们需要绕过wakeup方法,让我们自己给这个属性传恶意代码

本地建一个php文件,把题目给的类的代码复制过来,然后进行实例化,给可以控制的属性传一个后门,再对这个对象序列化并urlencode

绕过O:/d的限制

有时候对我们的参数有过滤,不让输入 O:数字 的形式,试图防止反序列化某个对象

我们只需要把O:数字改为O:+数字,就可以绕过

妙用&绕过相等

原理

使两个变量指向同一块内存地址

应用

比如题目把/flag的内容赋值给了secret,然后后面要求属性password的值等于secret

这个时候,我们依然按照上面说的方法写一个脚本,然后写一个构造函数

function __construct(){
    $this->password = &$this->secret;
}

这样就能保证无论secret怎么改变,password都与secret的值相等

16进制绕过

反序列化后的字符串不能出现某个单词时,可以使用大写S绕过

即把s换成S,因为S支持ascll码

比如禁止使用name,我们就可以用n\97me代替


O:8:"backdoor":1:{s:4:"name";s:10:"phpinfo();";}

O:8:"backdoor":1:{S:4:"n\97me";s:10:"phpinfo();";}

php反序列化字符逃逸

  • 可以控制某个类中的属性值
  • 间接控制了某个类的反序列化字符串
  • 由于存在无脑过滤,字符增减,造成 描述中字符串的长度 和实际的不一致
  • 从而能够逃逸出若干个字符,实现字符可控,从而闭合前面的双引号
  • 实现反序列化字符串的完全可控

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

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

相关文章

深度解析:基于Vue 3的教育管理系统架构设计与优化实践

一、项目架构分析 1. 技术栈全景 项目采用 Vue 3 TypeScript Tailwind CSS 技术组合,体现了现代前端开发的三大趋势: 响应式编程:通过Vue 3的Composition API实现细粒度响应 类型安全:约60%的组件采用TypeScript编写 原子化…

CNN-BiLSTM卷积双向长短期记忆神经网络时间序列预测(Matlab完整源码和数据)

CNN-BiLSTM卷积双向长短期记忆神经网络时间序列预测(Matlab完整源码和数据) 目录 CNN-BiLSTM卷积双向长短期记忆神经网络时间序列预测(Matlab完整源码和数据)预测效果基本介绍 CNN-BiLSTM卷积双向长短期记忆神经网络时间序列预测一…

docker安装MySQL8:docker离线安装MySQL、docker在线安装MySQL、MySQL镜像下载、MySQL配置、MySQL命令

一、镜像下载 1、在线下载 在一台能连外网的linux上执行docker镜像拉取命令 docker pull mysql:8.0.41 2、离线包下载 两种方式: 方式一: -)在一台能连外网的linux上安装docker执行第一步的命令下载镜像 -)导出 # 导出镜…

Boot 系统选择U启动

1.进入Boot 系统 F2 或 Del Boot --->Boot 0ption Priorities #4 KingstwongDataTravele 是U盘 调整搭到#1 2.保持重启就好

9.中断系统、EXTI外部中断

中断系统原理 中断 中断系统是管理和执行中断的逻辑结构,外部中断是众多能产生中断的外设之一,所以本节我们就借助外部中断来学习一下中断系统。在以后学习其它外设的时候,也是会经常和中断打交道的。 中断:在主程序运行过程中…

RocketMQ原理—4.消息读写的性能优化

大纲 1.Producer基于队列的消息分发机制 2.Producer基于Hash的有序消息分发 3.Broker如何实现高并发消息数据写入 4.RocketMQ读写队列的运作原理分析 5.Consumer拉取消息的流程原理分析 6.ConsumeQueue的随机位置读取需求分析 7.ConsumeQueue的物理存储结构设计 8.Cons…

【C++动态规划 网格】2328. 网格图中递增路径的数目|2001

本文涉及知识点 C动态规划 LeetCode2328. 网格图中递增路径的数目 给你一个 m x n 的整数网格图 grid ,你可以从一个格子移动到 4 个方向相邻的任意一个格子。 请你返回在网格图中从 任意 格子出发,达到 任意 格子,且路径中的数字是 严格递…

Web3.0时代的挑战与机遇:以开源2+1链动模式AI智能名片S2B2C商城小程序为例的深度探讨

摘要:Web3.0作为互联网的下一代形态,承载着去中心化、开放性和安全性的重要愿景。然而,其高门槛、用户体验差等问题阻碍了Web3.0的主流化进程。本文旨在深入探讨Web3.0面临的挑战,并提出利用开源21链动模式、AI智能名片及S2B2C商城…

MySQL(高级特性篇) 12 章——数据库其它调优策略

一、数据库调优的措施 (1)调优的目标 尽可能节省系统资源,以便系统可以提供更大负荷的服务(吞吐量最大)合理的结构设计和参数调整,以提高用户操作的响应速度(响应速度更快)减少系统…

单片机基础模块学习——DS18B20温度传感器芯片

不知道该往哪走的时候,就往前走。 一、DS18B20芯片原理图 该芯片共有三个引脚,分别为 GND——接地引脚DQ——数据通信引脚VDD——正电源 数据通信用到的是1-Wier协议 优点:占用端口少,电路设计方便 同时该协议要求通过上拉电阻…

掌握长尾关键词优化技巧提升SEO效果与流量增长策略

内容概要 长尾关键词是指由三个或更多个词组成的关键词,这类关键词通常搜索量相对较低,但在搜索引擎优化(SEO)中的作用却不可忽视。它们能够精确定位用户的需求,因为长尾关键词往往反映了用户更具体的搜索意图。掌握长…

AAAI2024论文解读|HGPROMPT Bridging Homogeneous and Heterogeneous Graphs

论文标题 HGPROMPT: Bridging Homogeneous and Heterogeneous Graphs for Few-shot Prompt Learning 跨同构异构图的小样本提示学习 论文链接 HGPROMPT: Bridging Homogeneous and Heterogeneous Graphs for Few-shot Prompt Learning论文下载 论文作者 Xingtong Yu, Yuan…

高频 SQL 50 题(基础版)_620. 有趣的电影

高频 SQL 50 题(基础版)_620. 有趣的电影 一级目录 表:cinema id 是该表的主键(具有唯一值的列)。 每行包含有关电影名称、类型和评级的信息。 评级为 [0,10] 范围内的小数点后 2 位浮点数。 编写解决方案,找出所有影片描述为 …

git的理解与使用

本地的git git除了最经典的add commit push用来做版本管理,其实他的分支管理也非常强大 可以说你学好了分支管理,就可以完成团队的配合协作了 git仓库 我们可以使用git init来初始化一个git仓库,只要能看见.git文件夹,就代表这…

Java进阶(一)

目录 一.Java注解 什么是注解? 内置注解 元注解 二.对象克隆 什么是对象克隆? 为什么用到对象克隆 三.浅克隆深克隆 一.Java注解 什么是注解? java中注解(Annotation)又称java标注,是一种特殊的注释。 可以添加在包,类&…

zookeeper的介绍和简单使用

1 zookerper介绍 zookeeper是一个开源的分布式协调服务,由Apache软件基金会提供,主要用于解决分布式应用中的数据管理、状态同步和集群协调等问题。通过提供一个高性能、高可用的协调服务,帮助构建可靠的分布式系统。 Zookeeper的特点和功能…

【学习笔记】深度学习网络-深度前馈网络(MLP)

作者选择了由 Ian Goodfellow、Yoshua Bengio 和 Aaron Courville 三位大佬撰写的《Deep Learning》(人工智能领域的经典教程,深度学习领域研究生必读教材),开始深度学习领域学习,深入全面的理解深度学习的理论知识。 在之前的文章中介绍了深度学习中用…

uni-app 程序打包 Android apk、安卓夜神模拟器调试运行

1、打包思路 云端打包方案(每天免费次数限制5,最简单,可以先打包尝试一下你的程序打包后是否能用): HBuilderX 发行App-Android云打包 选择Android、使用云端证书、快速安心打包本地打包: HBuilderX …

全面评测 DOCA 开发环境下的 DPU:性能表现、机器学习与金融高频交易下的计算能力分析

本文介绍了我在 DOCA 开发环境下对 DPU 进行测评和计算能力测试的一些真实体验和记录。在测评过程中,我主要关注了 DPU 在高并发数据传输和深度学习场景下的表现,以及基本的系统性能指标,包括 CPU 计算、内存带宽、多线程/多进程能力和 I/O 性…

速通 AI+Web3 开发技能: 免费课程+前沿洞察

AI 正以前所未有的速度重塑各行各业,从生成式模型到大规模数据处理,AI 逐渐成为核心驱动力。与此同时,Web3 去中心化技术也在重新定义信任、交易和协作方式。当这两大前沿技术相遇,AI Web3 的融合已不再是理论,而是未…