BUUCTF之[EIS 2019]EzPOP&BUUCTF[2020 新春红包题]1 web

BUUCTF之[EIS 2019]EzPOP&BUUCTF[2020 新春红包题]1 web

两题是差不多的,只是一个函数稍微修改了,其中一个后缀不能为php,只要通过路径穿越:filename='/../pz.php/.';

public function getCacheKey(string $name): string {
        // 使缓存文件名随机
        $cache_filename = $this->options['prefix'] . uniqid() . $name;
        if(substr($cache_filename, -strlen('.php')) === '.php') {
          die('?');
        }
        return $cache_filename;
    }

这题比较难,自己代码审计不过关,参考的这位大佬的博客
https://blog.csdn.net/zhangpen130/article/details/104114797
https://blog.csdn.net/zhangpen130/article/details/104102746

exp可以优化一下,比如__consturct()和那个start()。

里面里面option也可以写成数组形式。

还有一些细节不懂,比如这个$a->complete有什么用,有的exp里面是有用的,这位师傅的exp里面是2。

protected function serialize($data): string {
        if (is_numeric($data)) {
            return (string) $data;
        }

        $serialize = $this->options['serialize'];

        return $serialize($data); // $a->options['serialize'] = 'strval';,调用传进去的数组,serialize是键。
    }

这里我在本地跑都是报错,说return的形式不能是这样的。能理解过程但是测试都失败了。

希望路过的师傅可以指点一下!

[https://blog.csdn.net/ITmincherry/article/details/96166423] 死亡退出知识点。

原文地址:https://www.cnblogs.com/vstar-o/p/13495057.html