之前做CTF遇到phar反序列化漏洞概念,这里小结一下,主要参考自https://paper.seebug.org/680/
基本概念
phar (PHP Archive) 是PHP里类似于Java中jar的一种打包文件,用于归档。当PHP 版本>=5.3时默认开启支持PHAR文件的。
phar文件默认状态是只读,使用phar文件不需要任何的配置。
而phar://伪协议即PHP归档,用来解析phar文件内容。
phar文件结构:
1、stub
一个供phar扩展用于识别的标志,格式为xxx<?php xxx; __HALT_COMPILER();?>,前面内容不限,但必须以__HALT_COMPILER();?>来结尾,否则phar扩展将无法识别这个文件为phar文件。
2、manifest
phar文件本质上是一种压缩文件,其中每个被压缩文件的权限、属性等信息都放在这部分。这部分还会以序列化的形式存储用户自定义的meta-data,这里即为反序列化漏洞点。
3、contents
被压缩文件的内容。
4、signature
签名,放在文件末尾,格式如下:
phar使用Demo
注意:生成phar文件需要修改php.ini中的配置:
phar.php
<?php
class User{
var $name;
}
@unlink("SKI12.phar");
$phar = new Phar("SKI12.phar");
$phar->startBuffering();
$phar->setStub(