最近做了些反序列化的题目,都是和serialize()和unserialize()函数相关的漏洞,在翻阅网上的文章时,突然看到了新的漏洞利用方法,可以在不使用php的serialize()和unserialize()函数情况下,引起严重的php对象注入漏洞。它可以使攻击者将相关漏洞的严重程度升级为远程代码执行。
PHP文件操作允许使用各种URL协议去访问文件路径: 例如php:// data:// zlib://
常见的例如:
php://filter/read=convert.base64-encode/resource=xxxx.php
data://text/plain;base64,xxxxxxxxxxxx
今天所谈到的phar也是流包装的一种 phar://
phar本质是一种压缩文件,其中每个被压缩文件的权限、属性等信息都放在这部分。这部分还会以序列化的形式存储用户自定义的meta-data,这是上述攻击手法最核心的地方。
还可以理解为一个标志,格式为
xxx<?php xxx;__HALT_COMPILER();?>
前面内容不限,但必须以__HALT_COMPILER();?>
来结尾,否则phar扩展将无法识别这个文件为phar文件。