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

PHP反序列化简单使用

注:比较简陋,仅供参考。

编写PHP代码,实现反序列化的时候魔法函数自动调用计算器

PHP反序列化

serialize(); 将对象序列化成字符串

unserialize(); 将字符串反序列化回对象

创建类

class Stu{
public $name;
public $age;
public $sex;
public $score;
}

创建对象

$stu1 = new Stu();
$stu1->name = "zs";
$stu1->age = 22;
$stu1->sex = true;
var_dump($stu1);
echo "<br />";
echo serialize($stu1);

反序列化

字符串转换成对象

O:object

反序列化

以 __ 开头的函数,是PHP 中的魔术方法。类中的魔术方法,在特定情况下会自动调用。即使魔术方法在类中没有被定义,也是真实存在的。__construct() 在创建对象时自动调用__destruct() 在销毁对象时自动调用__wakeup() unserialize()时会自动调用这个函数__sleep() serialize()时会自动调用这个函数

PHP反序列化举例

可能会有小bug,问题不大

漏洞逻辑

当执行反序列化语句 $stu1 = unserialize($stu1); 时,系统会自动调用 stu() 类中的 __wakeup() 方法,__wakeup() 方法调用函数a(),函数 a() 调用函数 b(),函数 b() 接收传参,执行系统命令

<?php
// 定义函数 a()
function a(){// 调用函数 b()b();
}
// 定义函数 b()
function b(){
// 方法一:// 如果参数 cmd 的值为 zs 则执行 system 打开计算器/if(@$_GET['cmd']=='zs'){/    system("calc");/}
// 方法二:可以执行其他系统命令// 如果参数 cmd 的值为 calc 则打开计算器$cmd=$_GET['cmd'];
    @system($cmd);
}
// 创建 stu 类
class Stu{// 定义属性public $name;public $age;public $sex;public $score;// 定义方法,当执行 unserialize() 反序列化函数时自动调用 __wakeup() 方法public function __wakeup(){a();}}// 创建对象$stu1 = new Stu();// 对象赋值$stu1->name = "zs";$stu1->age = 22;$stu1->sex = true;// var_dump($stu1);// 序列化$stu1 = serialize($stu1);// var_dump($stu1);// 反序列化echo "<br />";$stu1 = unserialize($stu1);// var_dump($stu1);?>

验证

http://www.lryc.cn/news/239589.html

相关文章:

  • 专业课140+总分420+东南大学920专业综合考研,信息学院通信专业考研分享
  • 数据结构与算法编程题11
  • 【LeetCode刷题】--40.组合总和II
  • mysql面试内容点
  • msvcp140.dll是什么?msvcp140.dll丢失的有哪些解决方法
  • 数字图像处理(冈萨雷斯)学习笔记
  • MES系统管理范围及标准
  • vscode运行dlv报错超时
  • 【Leetcode合集】1. 两数之和
  • 使用Java解决快手滑块验证码
  • 瑞吉外卖Day06
  • 从暗黑3D火炬之光技能系统说到-Laya非入门教学一~资源管理
  • for,while,until语句
  • Apache POI简介
  • 基于Qt的UDP通信、TCP文件传输程序的设计与实现——QQ聊天群聊
  • 【C++】:STL中的string类的增删查改的底层模拟实现
  • 【论文阅读笔记】Supervised Contrastive Learning
  • 数据库管理工具,你可以用Navicat,但我选DBeaver!
  • 数据库的三范式(Normalization)
  • 【代码随想录】刷题笔记Day32
  • LeetCode算法题解(动态规划,背包问题)|LeetCode416. 分割等和子集
  • Java Class 类文件格式看这一篇就够了
  • 『亚马逊云科技产品测评』活动征文|构建生态农场家禽系统
  • [github配置] 远程访问仓库以及问题解决
  • mysql5.6 删除用户/ drop user
  • VMware三种网络模式
  • Java虚拟机(JVM)的调优技巧和实战2
  • 2020年下半年试题一:论信息系统项目的成本管理
  • 9. 回文数 --力扣 --JAVA
  • ChainLight zkSync Era漏洞揭秘