phar介绍
简单来说
phar
就是php
压缩文档。它可以把多个文件归档到同一个文件中,而且不经过解压就能被 php 访问并执行,与file://
php://
等类似,也是一种流包装器。
phar
结构由 4 部分组成
stub
phar 文件标识,格式为xxx<?php xxx; __HALT_COMPILER();?>;
manifest
压缩文件的属性等信息,以序列化存储;contents
压缩文件的内容;signature
签名,放在文件末尾;这里有两个关键点,一是文件标识,必须以
__HALT_COMPILER();?>
结尾,但前面的内容没有限制,也就是说我们可以轻易伪造一个图片文件或者phar
存储的meta-data
信息以序列化方式存储,当文件操作函数通过phar://
伪协议解析phar
文件时就会将数据反序列化,而这样的文件操作函数有很多。
以上内容摘自:由 PHPGGC 理解 PHP 反序列化漏洞 。接下来,我们还是通过两个CTF题目来学习phar反序列化的利用。