BUUCTF之[EIS 2019]EzPOP&BUUCTF[2020 新春紅包題]1 web
阿新 • • 發佈:2020-08-13
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] 死亡退出知識點。