- 目录
- 1. 序章
- 2. 计算机网络与协议
- 3. 信息收集
- 4. 常见漏洞攻防
- 5. 语言与框架
- 6. 内网渗透
- 7. 云安全
- 8. 防御技术
- 9. 认证机制
- 10. 工具与资源
- 11. 手册速查
- 12. 其他
5.1.10. Phar
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论