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