php phar反序列化任意执行代码
2018年 原理 一。关于流包装stream wrapper 大多数的文件操作允许使用各种URL协议去访问文件路径,如data://,zlib://,php:// 例如常见的有 include('php://filter/read=convert.base64-encode/resource=index.php') include('data://text/plain;base64,xxxxx') phar://也是流包装的一种 二。phar原理 ① phar是一种压缩文件,其中每个被压缩文件的权限、属性信息都放在这部分。并且这部分 以序列化的形式存储用于自定义的meta-data。 ② 对于phar文件的stub,可以理解为一个标志,他的格式是固定的 ……<?php ……; __HALT_COMPILER();?> 也就是必须要__HALT_COMPILER();结尾才可以,否则无法识别 ③ 如果要生成phar文件就必须要将php.ini中的phar.readonly设置为off ④ 在一些文件函数通过phar://伪协议解析phar文件时都会将meta-data反序列化。 受影响的函数有 fileatime filectime filemtime file_exists file_get_contents file_put_contents file filegroup