PHP Phar 签名伪造攻击:利用 Metadata 块的哈希值绕过文件完整性校验 大家好,今天我们来深入探讨一个关于 PHP Phar 档案的安全问题:Phar 签名伪造攻击,特别是利用 Metadata 块的哈希值绕过文件完整性校验的方法。 Phar 档案为 PHP 提供了一种便捷的文件打包和分发机制,但同时也引入了一些安全风险。理解这些风险并掌握防御方法至关重要。 Phar 档案结构概览 首先,我们需要了解 Phar 档案的基本结构。一个 Phar 档案主要由以下几个部分组成: Stub: 一段 PHP 代码,通常以 <?php 开头,用于在 Phar 档案被直接执行时引导程序。 Manifest: 包含了 Phar 档案中所有文件信息的列表,例如文件名、文件大小、文件权限等。 File Content: 实际的文件内容,例如 PHP 脚本、图片、文本文件等。 Metadata: 一个可选的数据块,可以包含任何自定义数据,例如版本信息、版权声明等。 Signature: 用于验证 Phar 档案完整性的签名,通常使用 MD5、SHA1、SHA256 或 OpenSSL 等 …
PHP Phar包的签名篡改:修改Stub与Manifest绕过哈希校验的技巧
PHP Phar 包签名篡改:修改 Stub 与 Manifest 绕过哈希校验的技巧 大家好,今天我们要深入探讨一个安全领域的话题:PHP Phar 包的签名篡改。Phar 包是 PHP 中一种便捷的打包和分发应用程序的方式,它允许将多个文件打包成一个单独的可执行文件。为了保证 Phar 包的完整性和安全性,Phar 提供了签名机制。然而,如果签名机制配置不当或存在漏洞,攻击者就有可能篡改 Phar 包的内容,并绕过签名校验,从而执行恶意代码。 本次讲座我们将重点关注如何通过修改 Phar 包的 Stub 和 Manifest 来绕过哈希校验。我们将深入理解 Phar 包的结构,分析签名校验的流程,并提供实际的代码示例来演示攻击过程,最后给出防御建议。 Phar 包结构剖析 理解 Phar 包的结构是进行任何攻击的前提。一个标准的 Phar 包主要由以下几个部分组成: Stub: 这是 Phar 包的引导代码,通常是一段 PHP 代码,用于在 Phar 包被执行时加载和初始化 Phar 环境。Stub 必须以 __HALT_COMPILER(); 结尾,表明 Stub 的结束和 Ph …