域名交易网站哪个好,凉山州规划和建设局网站,焦作住房和城乡建设厅网站,广州做网站新锐目录 PHP反序列化演示案例#xff1a;先搞一把PHP反序列化热身题稳住-无类问题-本地在撸一把CTF反序列化小真题压压惊-无类执行-实例最后顶一把网鼎杯2020青龙大真题舒服下-有类魔术方法触发-实例 https://www.cnblogs.com/zhengna/p/15661109.html 代码在线测试平台#xff… 目录 PHP反序列化演示案例先搞一把PHP反序列化热身题稳住-无类问题-本地在撸一把CTF反序列化小真题压压惊-无类执行-实例最后顶一把网鼎杯2020青龙大真题舒服下-有类魔术方法触发-实例 https://www.cnblogs.com/zhengna/p/15661109.html 代码在线测试平台https://c.runoob.com/compile/1/ 序列化和反序列化其实就是数据格式相互转化的一种形式
PHP反序列化
原理未对用户输入的序列化字符串进行检测导致攻击者可以控制反序列化过程从而导致代码执行SQL注入目录遍历等不可控后果。在反序列化的过程中自动触发了某些魔术方法。当进行反序列化的时候就有可能会触发对象中的一些魔术方法。 serialize() //将一个对象转换成一个字符串 unserialize() //将字符串还原成一个对象
触发unserialize函数的变量可控文件中存在可利用的类类中有魔术方法 序列化函数参考文章https://www.cnblogs.com/20175211lyz/p/11403397.html __construct() //创建对象时触发 __destruct() //对象被销毁时触发! __call() //在对象上下文中调用不可访问的方法时触发 __callstatic() //在静态上下文中调用不可访问的方法时触发 __get() //用于从不可访问的属性读取数据 __set() //用于将数据写不可访问的属性 __isset() //在不可访问的属性上调用isset()或empty()触发 __unset() //在不可访问的属性上使用unset()时触发 __invoke() //当脚本尝试将对象调用为函数时触发
演示案例
先搞一把PHP反序列化热身题稳住-无类问题-本地
基本上很多程序里面都是用class来代表类有class就是有类有类的话就需要学习里面的函数方法
在撸一把CTF反序列化小真题压压惊-无类执行-实例
反序列化和代码基础没有什么关系知道序列化执行的情况就完事了当我们创建一个方法就会调用里面的东西 当代码中有这些魔术方法的时候你就按照特定的条件去触发方法里面的代码就会被加载执行
最后顶一把网鼎杯2020青龙大真题舒服下-有类魔术方法触发-实例
涉及反序列化魔术方法调用弱类型绕过ascii绕过
使用该类对flag进行读取这里面能利用的只有__destruct函数(析构函数)。__destruct函数对$this-op进行了判断并内容在2字符串时会赋值为1process函数中使用对$this-op进行判断(为2的情况下才能读取内容)因此这里存在弱类型比较可以使用数字2或字符串 2绕过判断。is_valid函数还对序列化宇符串进行了校验因为成员被protected修饰因此序列化字符串中会出现ascii为0的字符。经过测试在PHP7.2的环境中使用public修饰成员并序列化反序列化后成员也会被public覆盖修饰。仅验证数值验证值和类型