Pikachu靶场通关之Unsafe Fileupload
字数 1075 2025-08-15 21:33:32
不安全的文件上传漏洞(Unsafe Fileupload)全面解析
一、漏洞概述
不安全的文件上传漏洞(Unsafe Fileupload)是Web应用系统中常见的高危漏洞,当系统对用户上传的文件缺乏足够的安全验证时,攻击者可能上传恶意文件(如webshell)从而获取服务器控制权。
二、漏洞原理
文件上传功能常见于各种Web应用(如头像上传、附件上传等)。正常情况下,后台应对上传文件进行严格验证:
- 文件类型、后缀名、大小验证
- 文件上传方式验证
- 文件重命名处理
- 隐藏上传后的文件路径
漏洞产生原因:当系统对上传文件缺乏验证或验证不严谨时,攻击者可上传恶意文件。
三、漏洞利用方式
1. 前端验证绕过(Client Check)
示例代码:
function checkFileExt(filename) {
var flag = false;
var arr = ["jpg","png","gif"];
var index = filename.lastIndexOf(".");
var ext = filename.substr(index+1);
for(var i=0;i<arr.length;i++) {
if(ext == arr[i]) {
flag = true;
break;
}
}
if(!flag) {
alert("上传的文件不符合要求,请重新选择!");
location.reload(true);
}
}
绕过方法:
- 禁用浏览器JavaScript功能
- 使用Burp Suite等工具拦截修改请求
2. MIME类型验证绕过
常见MIME类型:
- HTML: text/html
- 纯文本: text/plain
- GIF: image/gif
- JPEG: image/jpeg
绕过方法:
- 上传php文件并抓包
- 修改Content-Type为合法图片类型(如image/jpeg)
- 放行请求
3. getimagesize验证绕过
服务器通过检查文件头判断是否为真实图片。
绕过方法一:添加图片文件头
- 在php文件开头添加GIF89a等图片标识
- 上传修改后的文件
绕过方法二:图片马制作
copy 1.png/b + phpinfo.php/a 2.png
利用方法:结合文件包含漏洞执行图片马
http://x.x.x.x/vul/fileinclude/fi_local.php?filename=../../unsafeupload/uploads/2020/10/20/5936185f8e5245666f2586884965.jpg&submit=%E6%8F%90%E4%BA%A4%E6%9F%A5%E8%AF%A2
四、漏洞危害
- 上传Web脚本语言导致代码执行
- 上传crossdomain.xml控制Flash行为
- 上传病毒木马文件诱骗用户执行
- 上传恶意图片用于钓鱼攻击
- 直接上传webshell完全控制系统
五、防御措施
-
文件上传路径检查
- 避免0x00截断
- 防止IIS6.0文件夹解析漏洞
- 防止目录遍历
-
文件扩展名检测
- 白名单方式验证合法后缀
- 防止服务器以非预期格式解析文件
-
MIME类型验证
- 严格检查Content-Type头
- 与实际文件内容比对
-
文件内容检测
- 检查文件头是否符合类型
- 扫描文件中是否包含恶意代码
-
图片二次渲染
- 对上传图片进行重新渲染
- 消除嵌入的恶意代码
-
文件重命名
- 使用随机字符串或时间戳重命名
- 防止攻击者直接访问上传文件
六、最佳实践
- 使用白名单而非黑名单验证
- 结合多种验证方式(后缀+MIME+内容)
- 文件存储在Web根目录外
- 设置上传目录无执行权限
- 对上传文件进行病毒扫描
- 记录上传日志便于审计
通过以上措施可有效防范不安全的文件上传漏洞,保护Web应用安全。