1. 程式人生 > 實用技巧 >BUUCTF之[EIS 2019]EzPOP&BUUCTF[2020 新春紅包題]1 web

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] 死亡退出知識點。