文章目录
-
- 一、漏洞基础信息
- 二、漏洞核心原理
-
- [2.1 Windows+PHP特殊字符映射特性](#2.1 Windows+PHP特殊字符映射特性)
- [2.2 NTFS 数据流绕过特性](#2.2 NTFS 数据流绕过特性)
- [2.3 冒号截断前置铺垫](#2.3 冒号截断前置铺垫)
- 三、完整攻击链路
-
- [3.1 第一步:冒号截断生成空白PHP文件](#3.1 第一步:冒号截断生成空白PHP文件)
- [3.2 第二步:特殊字符覆盖写入PHP代码](#3.2 第二步:特殊字符覆盖写入PHP代码)
- [3.3 极简利用方式(NTFS数据流一键上传)](#3.3 极简利用方式(NTFS数据流一键上传))
- 四、漏洞关键细节与避坑点
- 五、漏洞危害总结
- 六、防御修复方案
- 七、总结
⚠️本博文所涉安全渗透测试技术、方法及案例,仅用于网络安全技术研究与合规性交流,旨在提升读者的安全防护意识与技术能力。任何个人或组织在使用相关内容前,必须获得目标网络 / 系统所有者的明确且书面授权,严禁用于未经授权的网络探测、漏洞利用、数据获取等非法行为。
一、漏洞基础信息
漏洞编号 :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文件
抓包修改上传文件名,用冒号截断:
http
Content-Disposition: form-data; name="file"; filename="bypass.php:jpg"
服务器生成空白bypass.php,大小0字节。
3.2 第二步:特殊字符覆盖写入PHP代码
利用<等价*的特性,覆盖空白PHP文件:
http
Content-Disposition: form-data; name="file"; filename="bypass.<<<"
文件内容成功写入,bypass.php变为可执行脚本。
3.3 极简利用方式(NTFS数据流一键上传)
直接抓包修改文件名为:
http
Content-Disposition: form-data; name="file"; filename="shell.php::$DATA"
服务器直接保存为shell.php,无需前置步骤,一步 getshell。
四、漏洞关键细节与避坑点
- 黑名单防护形同虚设
仅禁用php/php3/exe等后缀,无法拦截php::$DATA、php:jpg、php.<<<等变形。 - 环境强依赖
只在Windows+PHP+IIS下生效,Linux环境无此特性。 - 目录可控即可利用
只要上传目录可访问、PHP可解析,就能直接执行恶意文件。 - 二次覆盖思路经典
先截断生成空白文件,再通配符覆盖,是早期Windows上传漏洞高频利用思路。
五、漏洞危害总结
- 直接 getshell
绕过上传校验,上传并解析PHP脚本,获取服务器控制权。 - 文件篡改/劫持
覆盖站点现有PHP文件,植入后门、篡改页面内容。 - 通用高危
不依赖特定CMS,凡Windows+PHP+黑名单上传场景均可能受影响。 - 隐蔽性强
无明显异常特征,常规日志难以发现。
六、防御修复方案
- 白名单校验替代黑名单
只允许jpg/png/pdf/doc等安全后缀,拒绝其他所有类型。 - 文件名强制重命名
上传后用随机字符串+时间戳重命名,丢弃用户原始文件名。 - 过滤特殊字符
严格过滤:"<>*?等Windows非法文件名字符。 - 关闭NTFS数据流解析
服务器层面禁用PHP对::$DATA数据流的支持。 - 上传目录隔离+禁解析
上传目录设为静态资源目录,禁止执行PHP等脚本解析。
七、总结
此漏洞是PHP与Windows系统特性冲突 的经典案例,揭示了Web上传防护的核心误区:仅校验后缀≠安全 ,必须结合文件名净化、存储隔离、环境限制 多重防护。
该思路至今仍适用于Windows服务器上传漏洞挖掘,是Web安全入门必学经典漏洞。
本文是「Web安全」系列内容,点击专栏导航查看全部系列内容。