当前位置: 首页 > backend >正文

-PHP 反序列化POP 链构造魔术方法流程漏洞触发条件属性修改

1 、什么是反序列化操作? - 类型转换
- PHP & JavaEE & Python (见图)
序列化:对象转换为数组或字符串等格式
反序列化:将数组或字符串等格式转换成对象
serialize() // 将对象转换成一个字符串
unserialize() // 将字符串还原成一个对象
2 、常见 PHP 魔术方法? - 对象逻辑(见图)
__construct(): // 当对象 new 的时候会自动调用
__destruct() // 当对象被销毁时会被自动调用
__sleep(): //serialize() 执行时被自动调用
__wakeup(): //unserialize() 时会被自动调用
__invoke(): // 当尝试以调用函数的方法调用一个对象时会被自动调用
__toString(): // 把类当作字符串使用时触发
__call(): // 调用某个方法 , 若方法存在 , 则调用 ; 若不存在 , 则会去调用 __call
数。
__callStatic(): // 在静态上下文中调用不可访问的方法时触发
__get(): // 读取对象属性时 , 若存在 , 则返回属性值 ; 若不存在,则会调用 __get 函数
__set(): // 设置对象的属性时 , 若属性存在 , 则赋值 ; 若不存在 , 则调用 __set 函数。
__isset(): // 在不可访问的属性上调用 isset() empty() 触发
__unset(): // 在不可访问的属性上使用 unset() 时触发
__set_state() ,调用 var_export() 导出类时,此静态方法会被调用
__clone() ,当对象复制完成时调用
__autoload() ,尝试加载未定义的类
__debugInfo() ,打印所需调试信息
3 、为什么会出现安全漏洞?
原理:未对用户输入的序列化字符串进行检测,导致攻击者可以控制反序列化过程,从而
导致代码执行, SQL 注入,目录遍历等不可控后果。在反序列化的过程中自动触发了某些
魔术方法。当进行反序列化的时候就有可能会触发对象中的一些魔术方法。
<?php
class B{
public $cmd='ipconfig';
public function __destruct(){
system($this->cmd);
}
}
http://www.xdnf.cn/news/1508.html

相关文章:

  • 开源版「v0」OpenUI:根据文本生成UI界面代码
  • Sqlserver 自增长id 置零或者设置固定值
  • 【工具变量】各市ZF数字治理指标数据集(2001-2024年)
  • RabbitMQ 详解(核心概念)
  • 什么是回表?
  • A2A协议实现概览:多语言生态系统的蓬勃发展
  • vue项目中使用tinymce富文本编辑器
  • 楼宇自控系统如何打破传统桎梏,为建筑管理开创全新思路
  • 京东商品详情数据 API 接口讨论学习
  • Python内置函数---bytearray()
  • 八大排序算法
  • git pull的时候报错
  • 主流开源 LLM 应用开发平台详解
  • 记录下递归
  • 0.(新专栏目录)数据分类的艺术:从理论到实践的全面指南
  • 结构型模式:适配器模式
  • java后端开发day35--集合进阶(四)--双列集合:MapHashMapTreeMap
  • leetcode 二分查找应用
  • Linux/AndroidOS中进程间的通信线程间的同步 - IPC方式简介
  • Podman Desktop:现代轻量容器管理利器(Podman与Docker)
  • 基于stm32的智能门锁系统
  • ecovadis评估注意事项?ecovadis评估过程需要多长时间
  • gem5-gpu教程05 内存建模
  • 46. 全排列
  • Prisma JSON存储扩展性
  • 1.6软考系统架构设计师:架构师的角色与能力要求 - 练习题附答案及超详细解析
  • OpenCV图像轮廓示例
  • 如何创建GitLab 合并请求?
  • 【每日八股】复习 MySQL Day2:索引
  • 【Java面试笔记:基础】10.如何保证集合是线程安全的? ConcurrentHashMap如何实现高效地线程安全?