⚠️本博文所涉安全渗透测试技术、方法及案例,仅用于网络安全技术研究与合规性交流,旨在提升读者的安全防护意识与技术能力。任何个人或组织在使用相关内容前,必须获得目标网络 / 系统所有者的明确且书面授权,严禁用于未经授权的网络探测、漏洞利用、数据获取等非法行为。


一、漏洞基础信息

漏洞编号:wooyun-2014-071540
漏洞类型:设计缺陷/逻辑错误|文件上传漏洞
影响环境Windows+PHP+IIS 组合环境
核心成因PHP在Windows环境下对文件名特殊字符解析异常,叠加NTFS数据流特性,导致黑名单校验失效


二、漏洞核心原理

该漏洞并非单一绕过手段,而是Windows系统特性+PHP解析特性+NTFS特性三者叠加导致的通用上传缺陷,核心有两大利用点:

2.1 Windows+PHP特殊字符映射特性

在 Windows+PHP+IIS 环境中,部分特殊字符会被系统自动转义:

  • 双引号 " ↔ 点号 .
  • 大于号 > ↔ 问号 ?
  • 小于号 < ↔ 星号 *

星号*为通配符,可匹配任意字符,攻击者借此覆盖已存在文件,写入恶意代码。

2.2 NTFS 数据流绕过特性

NTFS文件系统支持数据流::$DATA,PHP解析时会忽略::$DATA后缀,直接保留原文件名与后缀。

  • 上传文件名:shell.php::$DATA
  • 实际保存:shell.php
  • 黑名单无法拦截php::$DATA,直接绕过上传。

2.3 冒号截断前置铺垫

Windows下文件名中的冒号: 可实现截断:

  • 上传:bypass.php:jpg
  • 生成:空白bypass.php

为后续覆盖写入提供目标文件。


三、完整攻击链路

以测试环境 Windows+IIS7.5+PHP 为例:

3.1 第一步:冒号截断生成空白PHP文件

抓包修改上传文件名,用冒号截断

Content-Disposition: form-data; name="file"; filename="bypass.php:jpg"

服务器生成空白bypass.php,大小0字节。

3.2 第二步:特殊字符覆盖写入PHP代码

利用<等价*的特性,覆盖空白PHP文件:

Content-Disposition: form-data; name="file"; filename="bypass.<<<"

文件内容成功写入,bypass.php变为可执行脚本

3.3 极简利用方式(NTFS数据流一键上传)

直接抓包修改文件名为:

Content-Disposition: form-data; name="file"; filename="shell.php::$DATA"

服务器直接保存为shell.php无需前置步骤,一步 getshell


四、漏洞关键细节与避坑点

  1. 黑名单防护形同虚设
    仅禁用php/php3/exe等后缀,无法拦截php::$DATAphp:jpgphp.<<<等变形。
  2. 环境强依赖
    只在Windows+PHP+IIS下生效,Linux环境无此特性。
  3. 目录可控即可利用
    只要上传目录可访问、PHP可解析,就能直接执行恶意文件。
  4. 二次覆盖思路经典
    先截断生成空白文件,再通配符覆盖,是早期Windows上传漏洞高频利用思路。

五、漏洞危害总结

  1. 直接 getshell
    绕过上传校验,上传并解析PHP脚本,获取服务器控制权。
  2. 文件篡改/劫持
    覆盖站点现有PHP文件,植入后门、篡改页面内容。
  3. 通用高危
    不依赖特定CMS,凡Windows+PHP+黑名单上传场景均可能受影响。
  4. 隐蔽性强
    无明显异常特征,常规日志难以发现。

六、防御修复方案

  1. 白名单校验替代黑名单
    只允许jpg/png/pdf/doc等安全后缀,拒绝其他所有类型。
  2. 文件名强制重命名
    上传后用随机字符串+时间戳重命名,丢弃用户原始文件名。
  3. 过滤特殊字符
    严格过滤:"<>*?等Windows非法文件名字符。
  4. 关闭NTFS数据流解析
    服务器层面禁用PHP对::$DATA数据流的支持。
  5. 上传目录隔离+禁解析
    上传目录设为静态资源目录,禁止执行PHP等脚本解析。

七、总结

此漏洞是PHP与Windows系统特性冲突的经典案例,揭示了Web上传防护的核心误区:仅校验后缀≠安全,必须结合文件名净化、存储隔离、环境限制多重防护。
该思路至今仍适用于Windows服务器上传漏洞挖掘,是Web安全入门必学经典漏洞。


本文是「Web安全」系列内容,点击专栏导航查看全部系列内容。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐