web安全---文件上传漏洞
字数 1289 2025-08-15 21:34:08
Web安全:文件上传漏洞详解与防御
一、文件上传漏洞概述
文件上传功能是大部分WEB应用的必备功能,允许用户上传头像、照片、证明材料或商品图片等。然而,如果缺乏有效的安全防护措施,文件上传功能会带来巨大的安全风险。
漏洞原理:当WEB应用在文件上传过程中没有对文件安全性进行有效校验时,攻击者可以通过上传webshell等恶意文件对服务器进行攻击。
二、Webshell类型
1. 大马
- 功能完善,需配合浏览器使用
- 代码量较大
- 隐蔽性较弱,通常需要加密来隐藏特征
2. 小马(一句话木马)
- 功能简单,需配合客户端使用
- 代码量小(如PHP的
<?php eval($_POST['v']); ?>) - 隐蔽性强,容易通过变形隐藏特征
- 常与cknife工具配合使用
3. 图片马
- 当网站限制只能上传图片格式时使用
- 将恶意代码嵌入图片文件中
- 利用服务器解析漏洞执行恶意代码
三、文件上传漏洞绕过技术
1. 文件类型限制绕过(服务端校验)
- 场景:限制只能上传jpg、jpeg、JPG、JPEG格式
- 绕过方法:
- 将文件改为1.jpg格式上传
- 使用Burp Suite拦截数据包
- 将文件名改为1.php
- 使用hackbar插件定义
v=phpinfo();查看PHP状态
2. MIME类型限制绕过(服务端校验)
- 场景:限制上传文件的MIME类型
- 绕过方法:
- 使用Burp Suite拦截
- 将Content-Type改为image/png
- 使用hackbar工具定义参数查看PHP状态
3. 后缀名黑名单绕过
- 场景:服务端筛选并拒绝php类型文件
- 绕过方法:
- 使用Burp Suite拦截
- 将文件名改为1.PHp(大小写混淆)
- 使用hackbar定义
v=system(ipconfig);执行命令
4. 截断绕过
- 方法:
- 构造文件名:1.php%00.jpg
- %00使用Ctrl+Shift+U编码
- 使用hackbar查看PHP状态
5. 图片马利用
- 场景:仅允许上传图片,修改后缀名无效
- 方法:
- 上传b374k.jpg图片马(密码为b374k)
- 直接通过浏览器使用图片马进行webshell操作
6. Apache解析漏洞利用
- 场景:允许上传jpg,jpeg,png,gif,7z格式
- 方法:
- 利用Apache从后往前识别扩展名的特性
- 通过Burp将1.jpg改为1.php.7z
- 服务器会识别为PHP文件
- 使用hackbar查看PHP状态
四、防御措施
- 加强文件后缀名黑名单:扩大禁止上传的文件类型范围
- 文件名随机化:对上传文件进行随机重命名
- 目录权限控制:
- 上传文件的临时目录和保存目录禁止执行权限
- 设置适当的文件系统权限
- 内容检查:
- 检查文件头信息与扩展名是否匹配
- 对图片文件进行二次渲染
- MIME类型验证:严格验证Content-Type
- 文件大小限制:限制上传文件的最大尺寸
- 使用安全组件:部署WAF等安全防护设备
文件上传漏洞是WEB安全中常见且危害较大的漏洞,开发人员应充分了解攻击手法并实施多层防御措施,才能有效保护系统安全。