返回介绍

5.1.10. Phar

发布于 2024-02-07 20:47:54 字数 1344 浏览 0 评论 0 收藏 0

5.1.10. Phar

5.1.10.1. 简介

Phar(PHP Archive)文件是一种打包格式,将PHP代码文件和其他资源放入一个文件中来实现应用程序和库的分发。

在来自Secarma的安全研究员Sam Thomas在18年的Black Hat上提出后利用方式后,开始受到广泛的关注。

Phar可利用是因为Phar以序列化的形式存储用户自定义的meta-data,而以流的形式打开的时候,会自动反序列化,从而触发对应的攻击载荷。

5.1.10.2. Phar文件结构

Phar由四个部分组成,分别是 stub / manifest / 文件内容 / 签名。 stub 需要 __HALT_COMPILER(); 这个调用在PHP代码中。

manifest 包含压缩文件的权限、属性、序列化形式存储的meta-data等信息,这是攻击的核心部分,主要就是解析Phar时对meta-data的反序列化。

5.1.10.3. 原理

phar的实现在 php-src/ext/phar/phar.c 中,主要是 phar_parse_metadata 函数在解析phar文件时调用了 php_var_unserialize ,因而造成问题。

而php在文件流处理过程中会调用 _php_stream_stat_path (/main/streams/streams.c) ,而后间接调用 phar_wrapper_stat ,所以大量的文件操作函数都可以触发phar的反序列问题。

目前已知部分的触发函数有:

fileatime / filectime / filemtime /stat / fileinode / fileowner / filegroup / fileperms / file / file_get_contents / readfile / fopen / file_exists / is_dir / is_executable / is_file / is_link / is_readable / is_writeable / is_writable / parse_ini_file / unlink / copy / exif_thumbnail / exif_imagetype / imageloadfont / imagecreatefrom*** / hash_hmac_file / hash_file / hash_update_file / md5_file / sha1_file / get_meta_tags / get_headers / getimagesize / getimagesizefromstring

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文