Web攻防10_PHP反序列化_概念魔术方法POP链构造

文章目录

  • 1、什么是反序列化操作? - 类型转换
  • 2、常见PHP魔术方法- 对象逻辑
      • 魔术方法概念
      • 常见魔术方法
      • 魔术方法与反序列化漏洞
  • 3、反序列化安全漏洞
      • 原理:
      • 漏洞探针
      • 漏洞危害
  • 4、反序列化漏洞利用- POP链构造
      • 反序列化常见起点
      • 反序列化常见跳板
      • 反序列化常见终点
      • POP链构造练习:

请添加图片描述

1、什么是反序列化操作? - 类型转换

- PHP & JavaEE & Python

序列化:将对象转换为数组或字符串等格式

反序列化:将数组或字符串等格式转换成对象

相关函数

serialize() //将对象转换成一个字符串

unserialize() //将字符串还原成一个对象

为什么要序列化(将对象转换为字节序列字符串格式)?

  1. 要将对象状态保存在文件或数据库中时,无法直接保存,需要将对象进行序列化,读取时反序列化
  2. 要将对象进行远程传输时(如前后端交互发送数据),将字符化的数据进行传输,接收后进行反序列化

2、常见PHP魔术方法- 对象逻辑

魔术方法概念

一个类中自带的特殊的方法,可以不需要主动调用,会在程序运行的一些特殊时刻自动触发。

魔术方法名称不可更改,但是可以重写。

常见魔术方法

  • __construct(): 在实例化一个对象时自动调用,用于对象的初始化操作。
  • __destruct(): 在对象被销毁时自动调用,用于执行清理操作。
  • __get($property): 在访问一个不可访问的属性时自动调用,用于获取属性的值。
  • __set($property, $value): 在给一个不可访问的属性赋值时自动调用,用于设置属性的值。
  • __isset($property): 在对不可访问的属性使用 isset() 或 empty() 时自动调用,用于判断属性是否已设置。
  • __unset($property): 在对不可访问的属性使用 unset() 时自动调用,用于销毁属性。
  • __call($method, $arguments): 在调用一个不可访问的方法时自动调用,用于动态调用方法。
  • __callStatic($method, $arguments): 在调用一个不可访问的静态方法时自动调用,用于动态调用静态方法。
  • __toString(): 在将对象以字符串形式输出时自动调用,用于自定义对象的字符串表示。
  • __invoke(): 在将对象作为函数调用时自动调用,用于将对象作为可调用的函数。
  • __wakeup(): 在对象被反序列化时自动调用,用于对象的重新初始化操作,与反序列化漏洞相关。
  • __set_state($properties): 在使用 var_export() 导出一个对象时调用,用于自定义对象的导出。
  • __clone(): 在对象被克隆时自动调用,用于处理对象的深拷贝。
  • __sleep(): 在对象被序列化时自动调用,用于返回需要被序列化的属性列表。
  • __autoload($class): 在使用未定义的类时自动调用,用于自动加载类文件。
  • __debugInfo(): 在调用 var_dump() 时自动调用,用于自定义对象的调试信息。

魔术方法与反序列化漏洞

在PHP中,对象的序列化和反序列化通常会触发魔术方法的调用,特别是__wakeup()__destruct() 方法。

  • __wakeup(): 在对象被反序列化时自动调用,用于对象的重新初始化操作。如果未正确实现,恶意用户可以在对象重新初始化时执行恶意代码,导致安全漏洞。
  • __destruct(): 在对象被销毁时自动调用,用于执行清理操作。如果未正确实现,恶意用户可以在对象销毁时执行恶意代码,导致安全漏洞。

因此,开发者在编写具有反序列化功能的PHP应用程序时,如果没有正确安全的实现相关魔术方法,就会被恶意用户利用反序列化漏洞来执行不受控制的代码。

3、反序列化安全漏洞

原理:

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

示例漏洞:

<?phpclass B{public $cmd='ipconfig';public function __destruct(){system($this->cmd);}}//函数引用,无对象创建触发魔术方法unserialize($_GET['x']);

漏洞探针

反序列化漏洞一般经常通过白盒审计发现,发现后可能会公开

在黑盒中几乎不可能发现未知的反序列化漏洞,只能通过目标的技术栈类型及版本来找到有公开过的反序列化漏洞,再通过工具来利用。

漏洞危害

  • 远程代码执行(RCE): 恶意用户可以利用反序列化漏洞来执行任意代码,包括远程命令执行,这可能导致服务器被完全控制。
  • 敏感信息泄露: 攻击者可以利用反序列化漏洞来访问和泄露应用程序中的敏感信息,例如数据库凭据、会话令牌等。
  • 拒绝服务(DoS): 恶意用户可以利用反序列化漏洞来触发服务崩溃或资源耗尽,导致拒绝服务攻击,使应用程序不可用。
  • 提权: 如果应用程序以特权权限运行,攻击者可以利用反序列化漏洞来提升其权限,例如从普通用户权限提升到管理员权限。

4、反序列化漏洞利用- POP链构造

POP:面向属性编程(Property-Oriented Programing)常用于上层语言构造特定调用链的方法,序列化攻击都在PHP魔术方法中出现可利用的漏洞,因自动调用触发漏洞,但如关键代码没在魔术方法中,而是在一个类的普通方法中。这时候就可以通过构造POP链寻找相同的函数名将类的属性和敏感函数的属性联系起来。

反序列化常见起点

  • __wakeup(): 在对象被反序列化时自动调用,用于对象的重新初始化操作,与反序列化漏洞相关。

  • __destruct(): 在对象被销毁时自动调用,用于执行清理操作。

  • __toString(): 在将对象以字符串形式输出时自动调用,用于自定义对象的字符串表示。

反序列化常见跳板

  • __get($property): 在访问一个不可访问的属性时自动调用,用于获取属性的值。
  • __set($property, $value): 在给一个不可访问的属性赋值时自动调用,用于设置属性的值。
  • __isset($property): 在对不可访问的属性使用 isset() 或 empty() 时自动调用,用于判断属性是否已设置。

反序列化常见终点

  • __call($method, $arguments): 在调用一个不可访问的方法时自动调用,用于动态调用方法。
  • call_user_func() 一般php代码执行会选择这里
  • call_user_func_array() 一般php代码执行会选择这里

构造pop链时去掉不用改变或不可改变的内容,将所需修改内容保留修改即可

POP链构造练习:

CTFSHOW-反序列化题目254~258

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

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

相关文章

LeetCode 19. 删除链表的倒数第 N 个结点

LeetCode 19. 删除链表的倒数第 N 个结点 1、题目 力扣题目链接&#xff1a;19. 删除链表的倒数第 N 个结点 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例 1&#xff1a; 输入&#xff1a; head [1,2,3,4,5], n 2 输出&am…

LeetCode 678——有效的括号字符串

阅读目录 1. 题目2. 解题思路3. 代码实现 1. 题目 2. 解题思路 需要两个栈&#xff0c;一个用来保存左括号所在的位置索引&#xff0c;一个用来保存星号所在的位置索引。 从左往右遍历字符串&#xff0c;如果是左括号或者星号&#xff0c;则将位置索引分别入栈&#xff0c;如…

ELK——日志处理界的瑞士军刀

目录 引言 一、ELK简介 &#xff08;一&#xff09;基本概述 1.Elasticsearch服务 2.Logstash服务 2.2 logstash关键组件 2.2 logstash数据流向 3.Kibana服务 &#xff08;二&#xff09;ELK工作流程 &#xff08;三&#xff09;ELK的应用价值 二、部署搭建ELK &…

【Web】NSSRound#1-20 Basic 刷题记录(全)

目录 [NSSRound#1 Basic]basic_check [NSSRound#1 Basic]sql_by_sql [NSSCTF 2nd]php签到 [NSSCTF 2nd]MyBox [NSSCTF 2nd]MyBox(revenge) [NSSCTF 2nd]MyHurricane [NSSCTF 2nd]MyJs [NSSRound#3 Team]This1sMysql [NSSRound#3 Team]path_by_path [NSSRound#…

【入门】时钟旋转

时间限制 : 1 秒 内存限制 : 128 MB 时钟上面的时针从m时走到n时旋转了多少度&#xff1f;&#xff08;m<n&#xff0c;且m和n都是1~12之间的整数&#xff09; 输入 2个整数m和n 输出 一个整数代表时针旋转的度数 样例 输入 1 4 输出 90 提示 基础问题 #includ…

SQL语法 case when语句用法讲解

CASE WHEN解释 &#xff1a; SQL中的CASE WHEN语句是一种条件表达式&#xff0c;它允许你根据不同的情况返回不同的值。CASE WHEN通常用于SELECT语句中&#xff0c;用于创建新的列&#xff0c;该列的值取决于其他列的值。CASE WHEN可以用于任何可以使用表达式的地方。 大致概…

二叉树和数据结构

小红的完全二叉树构造 题目描述 小红想构造一个总共 n 个节点完全二叉树&#xff0c;该二叉树满足以下两个性质&#xff1a; 1. 所有节点的权值值为 1 ~ n 的一个排列。 2. 除了根节点以外&#xff0c;每个节点的权值和它父亲的权值的乘积为偶数。 请你帮小红构造出这个二叉树…

K8S一 k8s基础知识及实战

一 K8S 概览 1.1 K8S 是什么&#xff1f; K8S官网文档&#xff1a;https://kubernetes.io/zh/docs/home/ K8S 是Kubernetes的全称&#xff0c;源于希腊语&#xff0c;意为“舵手”或“飞行员”&#xff0c;官方称其是&#xff1a;用于自动部署、扩展和管理“容器化&#xff08…

软考 系统架构设计师系列知识点之大数据设计理论与实践(5)

接前一篇文章&#xff1a;软考 系统架构设计师系列知识点之大数据设计理论与实践&#xff08;4&#xff09; 所属章节&#xff1a; 第19章. 大数据架构设计理论与实践 第3节 Lambda架构 19.3.1 Lambda架构对大数据处理系统的理解 Lambda架构由Storm的作者Nathan Marz提出&…

伺服系统中电机磁极偏角自学习的实现方案

一、 电机磁极偏角自学习原理简述 要知道磁极偏角&#xff0c;首先要明确的是磁极角&#xff0c;在我个人的理解里磁极角就是park和Ipark变换里所需的电角度&#xff0c;我们的矢量控制方法是定磁链的&#xff0c;就是要保证两相同步旋转坐标系的Id轴和三相静止坐标系的A轴要重…

45---M.2 SSD电路设计

视频链接 M.2 SSD硬件电路设计01_哔哩哔哩_bilibili M.2 SSD电路设计 1、M.2简介 1.1、M.2基本介绍 M.2接口也叫NGFF&#xff0c;英文全称Next Generation Form Factor。M.2接口是为超极本&#xff08;Ultrabook&#xff09;量身定做的新一代接口标准&#xff0c;是Intel推…

Java实现二叉树(下)

1.前言 http://t.csdnimg.cn/lO4S7 在前文我们已经简单的讲解了二叉树的基本概念&#xff0c;本文将讲解具体的实现 2.基本功能的实现 2.1获取树中节点个数 public int size(TreeNode root){if(rootnull){return 0;}int retsize(root.left)size(root.right)1;return ret;}p…

314_C++_QT表格的撤销、恢复,可对多行、多item进行撤销、恢复操作

行–删除后的,撤销、恢复图示: 原图示 删除后 撤销操作 恢复操作 item修改后的撤销、恢复 原item 撤销修改 恢复修改 代码: --</

[开发日志系列]PDF图书在线系统20240415

20240414 Step1: 创建基础vueelment项目框架[耗时: 1h25min(8:45-10:10)] 检查node > 升级至最新 (考虑到时间问题,没有使用npm命令行执行,而是觉得删除重新下载最新版本) > > 配置vue3框架 ​ 取名:Online PDF Book System 遇到的报错: 第一报错: npm ERR! …

实时避障系统开启盲人独立出行新时代

作为一名资深记者&#xff0c;我始终关注并报道科技如何助力特殊群体克服生活挑战的创新实践。近期&#xff0c;我有幸深入了解了一款专为盲人设计的辅助应用叫做蝙蝠避障&#xff0c;它以实时避障系统为核心&#xff0c;为视障人士独自出行提供了强有力的支持&#xff0c;悄然…

服务器挖矿病毒解决ponscan,定时任务解决

服务器挖矿病毒解决ponscan&#xff0c;定时任务解决 挖矿病毒会隐藏chattr的操作权限&#xff0c;让我们无法删除病毒文件&#xff0c;杀掉病毒进程。所以要去下载chattr.c的文件&#xff0c;编译成a.out。然后再对原来的chattr文件的权限进行修改。然后覆盖掉它。 chattr.c …

JavaFX制作login页面

JavaFx制作简单的login页面demo public class LoginFxDemo extends Application {public static void main(String[] args) {Application.launch(args);}Overridepublic void start(Stage primaryStage) throws Exception {Label nLabel new Label("姓名:");nLabel.…

编曲知识19:自动化处理 发送原理 混响 延迟

自动化处理 发送原理 混响 延迟小鹅通-专注内容付费的技术服务商https://app8epdhy0u9502.pc.xiaoe-tech.com/live_pc/l_661a68eae4b023c0a96a8b36?course_id=course_2XLKtQnQx9GrQHac7OPmHD9tqbv 自动化处理 自动化 鼠标挪动到轨道左下角打开自动化轨道 或右键轨道-左键单击…

Softmax函数和Sigmoid函数的思考

【为什么 Softmax 函数面对二分类问题时可以简化为 Sigmoid 函数】 将二分类问题当成普通多分类问题&#xff0c;神经网络如下所示&#xff1a; 因为有两个分类&#xff0c;所以需要有两个输出&#xff0c;然后经过 Softmax 后得到每个分类的预测概率。 假设第一个分类的得分…

SpringBoot 日志系统解析

日志实现框架 常见框架: JULLogbacLog4jLog4j2 日志实现的抽象层 避免代码的改动影响用户的使用, 常见的: JCLSLF4J 日志发展历程 JDK1.3及以前, 通过System.(out | err).println打印, 存在巨大缺陷解决系统打印缺陷问题出现log4,2015年8月停止更新受到log4j影响, SUN公…