之前写的两篇文章都太理想化,真实的代码谁写成$data = unserialize($_POST['a']),直接让你反序列化,在实际的PHP程序中,主要是反序列化链(pop链),如thinkphp、Laravel的反序列化链的漏洞和利用phar://伪协议完成反序列化漏洞。今天就来学习一个phar文件序列化漏洞。
phar
phar是一个合成词,由PHP 和 Archive构成,可以看出它是php归档文件的意思。一个php应用程序往往是由多个文件构成的,如果能把他们集中为一个文件来分发和运行是很方便的。于是在PHP5.3之后支持了类似Java的jar包,名为phar。用来将多个PHP文件打包为一个文件。Phar 归档可由 PHP 本身处理,因此不需要使用额外的工具来创建或使用,使用php脚本就能创建或提取它。
三种phar归档文件格式:
tar归档、zip归档、phar归档,前两种执行需要php安装Phar 扩展支持,用的也比较少。phar格式归档文件可以直接执行,它的产生依赖于Phar扩展,由自己编写的php脚本产生。
开启phar
首先需要修改php.ini配置将phar的readonly关闭,默认是不能写phar包的,include是默认开启的。
phar.readonly => On
归档project目录下的所有文件:
下面这个文件与project文件夹同级目录
//产生一个yunke.phar文件
$phar = new Phar('yunke.phar', 0, 'yunke.phar');
// 添加project里面的所有文件到yunke.phar归档文件
$phar->buildFromDirectory(dirname(__FILE__) . '/project');
//设置执行时的入口文件,第一个用于命令行,第二个用于浏览器访问,这里都设置为index.php
$phar->setDef

本文深入探讨了PHP中的Phar文件格式,包括其用途、三种归档格式以及如何开启和创建Phar文件。重点讲解了Phar文件的序列化元数据存储方式,如何在文件系统函数中利用phar://伪协议触发反序列化漏洞,并通过实例展示了如何构造恶意的Phar文件。此外,还提出了利用图片文件上传绕过限制的攻击场景。
最低0.47元/天 解锁文章
6188

被折叠的 条评论
为什么被折叠?



