9-::$DATA后缀绕过

9-::$DATA后缀绕过

php 复制代码
$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
    if (file_exists(UPLOAD_PATH)) {
        $deny_ext = array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".htaccess",".ini");
        $file_name = trim($_FILES['upload_file']['name']);
        $file_name = deldot($file_name);//删除文件名末尾的点
        $file_ext = strrchr($file_name, '.');
        $file_ext = strtolower($file_ext); //转换为小写
        $file_ext = trim($file_ext); //首尾去空
        
        if (!in_array($file_ext, $deny_ext)) {
            $temp_file = $_FILES['upload_file']['tmp_name'];
            $img_path = UPLOAD_PATH.'/'.date("YmdHis").rand(1000,9999).$file_ext;
            if (move_uploaded_file($temp_file, $img_path)) {
                $is_upload = true;
            } else {
                $msg = '上传出错!';
            }
        } else {
            $msg = '此文件类型不允许上传!';
        }
    } else {
        $msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';
    }
}

没有过滤::$DATA

::$DATA​ 是 Windows NTFS 文件系统的备用数据流(Alternate Data Stream, ADS) 的语法。当一个文件名末尾加上 ::$DATA​ 时,Windows 会强制将其解释为​主数据流 ​(即普通文件内容),而忽略 ::$DATA 自身。

绕过原理 ​:

上传时,如果程序只对 $_FILES['upload_file']['name']​ 进行简单的黑名单后缀检查,比如检测是否以 .php​ 结尾,那么你可以在文件名后面加上 ::$DATA,例如:

text

复制代码
shell.php::$DATA
  • 程序检测到的后缀可能是 .php::$DATA(如果直接取扩展名),黑名单里通常没有这个后缀,因此通过检查。
  • 当文件被 move_uploaded_file() 移动到 Windows 目标目录时,系统会忽略 ::$DATA ,实际保存的文件名变成 shell.php
  • 最终得到可解析的 PHP 文件,从而完成上传绕过。

如果代码中有 str_ireplace('::$DATA', '', $file_ext) 这样的过滤,这个绕过方法就会失效(例如你的第七关代码已经过滤了)。


为什么上传到 Windows 上之后,后面的 ::$DATA 不见了?

因为 ::$DATA​ 是 Windows 底层文件系统(NTFS)的一个​特殊标识符,不是文件名的一部分。当系统创建文件时:

  • 解析路径:shell.php::$DATA → 表示"文件 shell.php 的主数据流"。
  • 最终文件系统只保存文件名 shell.php,而不保留 ::$DATA 字符。

所以在文件夹中看到的是 shell.php​,而不是带有 ::$DATA 的奇怪名字。

这个特性原本用于兼容性(比如从非 NTFS 系统访问文件),被攻击者利用来绕过简单的上传检测。

相关推荐
X7x58 小时前
网络入侵防御系统(IPS):从被动防御到主动拦截的网络安全革命
网络安全·网络攻击模型·安全威胁分析·安全架构·ips
Soari8 小时前
AI 编码智能体的“安全防弹衣”:深度拆解 agent-skills,构建百分百受信任的专业技能注册表
人工智能·网络安全·github·软件工程·aiagent·claudecode·agent-skills
梧六柒11 小时前
8- 点绕过
网络安全
深邃-11 小时前
【Web安全】-SRC平台介绍:CNVD平台-事件型漏洞-通用型漏洞,教育SRC平台,漏洞盒子,补天漏洞平台,企业SRC平台,企业和公益SRC平台
网络协议·安全·web安全·网络安全·https·src·cnvd
HackTwoHub11 小时前
AI 挖洞新思路、深度解析两大间接提示词注入漏洞攻防思路,注入也能获得上万美金
人工智能·安全·web安全·网络安全·系统安全·安全架构
KivenMitnick1 天前
LovelyERes:AWD适用的蓝队综合工具
运维·安全·网络安全
其实防守也摸鱼1 天前
ctfshow--Crypto(funnyrsa1-密码2)解题步骤
python·安全·web安全·网络安全·密码学·web·工具
汤愈韬1 天前
hcip-security_防火墙高可靠技术3_防火墙链路高可靠技术
网络·网络协议·网络安全
X7x51 天前
网络入侵检测系统(NIDS):企业网络安全的守望者
网络安全·网络攻击模型·安全威胁分析·安全架构·nids