码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • PHP反序列化简单使用


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

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

    PHP反序列化

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

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

    创建类

    1. class Stu{
    2. public $name;
    3. public $age;
    4. public $sex;
    5. public $score;
    6. }

    创建对象

    1. $stu1 = new Stu();
    2. $stu1->name = "zs";
    3. $stu1->age = 22;
    4. $stu1->sex = true;
    5. var_dump($stu1);
    6. echo "";
    7. echo serialize($stu1);

    反序列化

    字符串转换成对象

    O:object

    反序列化

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

    PHP反序列化举例

    可能会有小bug,问题不大

    漏洞逻辑

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

    1. <?php
    2. // 定义函数 a()
    3. function a(){
    4. // 调用函数 b()
    5. b();
    6. }
    7. // 定义函数 b()
    8. function b(){
    9. // 方法一:
    10. // 如果参数 cmd 的值为 zs 则执行 system 打开计算器
    11. // if(@$_GET['cmd']=='zs'){
    12. //     system("calc");
    13. // }
    14. // 方法二:可以执行其他系统命令
    15. // 如果参数 cmd 的值为 calc 则打开计算器
    16. $cmd=$_GET['cmd'];
    17.     @system($cmd);
    18. }
    19. // 创建 stu 类
    20. class Stu{
    21. // 定义属性
    22. public $name;
    23. public $age;
    24. public $sex;
    25. public $score;
    26. // 定义方法,当执行 unserialize() 反序列化函数时自动调用 __wakeup() 方法
    27. public function __wakeup(){
    28. a();
    29. }
    30. }
    31. // 创建对象
    32. $stu1 = new Stu();
    33. // 对象赋值
    34. $stu1->name = "zs";
    35. $stu1->age = 22;
    36. $stu1->sex = true;
    37. // var_dump($stu1);
    38. // 序列化
    39. $stu1 = serialize($stu1);
    40. // var_dump($stu1);
    41. // 反序列化
    42. echo "";
    43. $stu1 = unserialize($stu1);
    44. // var_dump($stu1);
    45. ?>

    验证

  • 相关阅读:
    用面向对象的方式操作 JSON 甚至还能做四则运算 JSON 库
    koa中使用koa-body获取post请求中的参数
    计算机竞赛 车道线检测(自动驾驶 机器视觉)
    【2023,学点儿新Java-10】Java17 API文档简介&获取 |详解Java核心机制:JVM |详解Java内存泄漏与溢出 |Java优缺点总结 |附:GPT3.5-turbo问答测试
    【算法练习Day22】 组合总和 III&&电话号码的字母组合
    思辨:移动开发的未来在哪?
    jQuery学习:基本选择器
    SparkSQL系列-8、分布式SQL引擎和Catalyst 优化器
    LabVIEW下拉列表和枚举控件
    强化学习--多维动作状态空间的设计
  • 原文地址:https://blog.csdn.net/2301_79118231/article/details/134558512
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号