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对象转换成字符串
常见的魔术方法
__construct() //类的构造函数,创建对象时触发
__destruct() //类的析构函数,对象被销毁时触发
__call() //在对象上下文中调用不可访问的方法时触发
__callStatic() //在静态上下文中调用不可访问的方法时触发
__get() //读取不可访问属性的值时,这里的不可访问包含私有属性或未定义
__set() //在给不可访问属性赋值时触发
__isset() //当对不可访问属性调用 isset() 或 empty() 时触发
__unset() //在不可访问的属性上使用unset()时触发
__invoke() //当尝试以调用函数的方式调用一个对象时触发
__sleep() //执行serialize()时,先会调用这个方法
__wakeup() //执行unserialize()时,先会调用这个方法
__toString() //当反序列化后的对象被输出在模板中的时候(转换成字符串的时候)自动调用
复制代码
Pikachu
打开标题就让我输入一个序列化的东西,但是没有啥源码,估计就是概述里面的那个示例
那我们就分析一下
我们去创造一个
S
的对象,然后会触发
destruct
这个魔术方法,然后打印出
test
的值,那我们就可以在
test
的这里去动手脚了
new S() -> __destruct() -> $this->test
复制代码
我们打开php在线这个网站,去序列化一下
PHP 在线工具 | 菜鸟工具 (jyshare.com)
我们构造一下payload:
[code]
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4