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] 死亡退出知识点。