-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);
    }
    }
相关推荐
谢尔登6 小时前
01_Java基础速通
java·开发语言
前端炒粉6 小时前
DOM 常用 API 速查表
开发语言·javascript·ecmascript
我不是程序员三三7 小时前
如何监控电脑|企业终端行为监控概念科普与落地方法论
数据库·电脑·php
程序员梅雨7 小时前
Linux & Shell 实用干货
linux·运维·服务器·后端·面试·php
en.en..8 小时前
C语言核心解析:#define与typedef本质区别
开发语言·c++·算法
2601_966949658 小时前
批量获取多只股票五档盘口的极简方案:QuantDash Python SDK 实战指南
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
点心的游戏开发世界9 小时前
GDScript 入门笔记:目录
开发语言·笔记·游戏引擎·godot
洋不写bug9 小时前
二叉树(二) 常见基础操作解析|结点数、树高、查找结点、判断完全二叉树
java·开发语言·数据结构·完全二叉树·二叉树结点数·树高·查找结点
果果燕9 小时前
实习笔记(六)主机按钮状态上报完整流程
开发语言·c++·php
平头哥技术团队9 小时前
Day 16 | 用 ul、ol、li 一个标签,把散资料收成有序的技能清单页
开发语言·前端·html·html5