ToB企服应用市场:ToB评测及商务社交产业平台

标题: unserialize-基于Pikachu的学习 [打印本页]

作者: 丝    时间: 2024-5-19 07:29
标题: unserialize-基于Pikachu的学习
php反序列化

PHP反序列化漏洞详解(万字分析、由浅入深)_php反序列化漏洞原理-CSDN博客
PHP反序列化基础 - Hello CTF (hello-ctf.com)
PHP反序列化漏洞的原理及复现 - FreeBuf网络安全行业流派
原理:

php步调为了保存和转储对象,提供了序列化的方法。php序列化是为了在步调运行的过程中对对象进行转储而产生的。序列化可以将对象转换成字符串,但仅保存对象里的成员变量,不保存函数方法。
php序列化的函数为serialize,可以将对象中的成员变量转换成字符串。
反序列化的函数为unserilize,可以将serialize生成的字符串重新还原为对象中的成员变量。
将用户可控的数据进行了反序列化,就是PHP反序列化漏洞。
咱们先了解一下序列化和反序列化都是什么寄义


普通来讲
序列化就是把字符串去转换成PHP对象
反序列化就是把php对象转换成字符串
常见的魔术方法
  1. __construct()            //类的构造函数,创建对象时触发
  2. __destruct()             //类的析构函数,对象被销毁时触发
  3. __call()                 //在对象上下文中调用不可访问的方法时触发
  4. __callStatic()           //在静态上下文中调用不可访问的方法时触发
  5. __get()                  //读取不可访问属性的值时,这里的不可访问包含私有属性或未定义
  6. __set()                  //在给不可访问属性赋值时触发
  7. __isset()                //当对不可访问属性调用 isset() 或 empty() 时触发
  8. __unset()                //在不可访问的属性上使用unset()时触发
  9. __invoke()               //当尝试以调用函数的方式调用一个对象时触发
  10. __sleep()                //执行serialize()时,先会调用这个方法
  11. __wakeup()               //执行unserialize()时,先会调用这个方法
  12. __toString()             //当反序列化后的对象被输出在模板中的时候(转换成字符串的时候)自动调用
复制代码
Pikachu

打开标题就让我输入一个序列化的东西,但是没有啥源码,估计就是概述里面的那个示例

那我们就分析一下
我们去创造一个S的对象,然后会触发destruct这个魔术方法,然后打印出test的值,那我们就可以在test的这里去动手脚了
  1. new S() -> __destruct() -> $this->test
复制代码
我们打开php在线这个网站,去序列化一下PHP 在线工具 | 菜鸟工具 (jyshare.com)
我们构造一下payload:
[code]




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4