文件上传漏洞原理及防御

文件上传漏洞是指:用户上传了一个可执行的脚本文件,并通过该文件获得了执行服务端命令的权限

 

文件上传漏洞测试过程:

1 进行正常的上传,期间可抓包查看

2 尝试上传不同类型的恶意脚本文件,如JSP PHP文件等

3 查看是否在前端做了上传限制,如大小,格式,并尝试进行绕过

4 利用报错或者猜测等方式获得木马路径,访问

 

dvwa文件上传漏洞演示:

1 绕过大小限制

通过firebug来修改大小限制;

通过burp抓包更改大小限制;

 

2 上传cmd shell

low

上传cmd.php文件(一句话木马),去掉此时地址栏最后的#,拷贝文件上传成功提示最前面的文件相对路径到URL的最后,然后接参数?cmd=ipconfig发送请求,就相当于在cmd界面里进行操作

 

medium

直接上传cmd.php,发现不能上传成功,查看中级别的源代码,找到中级别下允许上传的文件类型,再次上传文件,抓包,在包中修改文件类型,重放请求,发现文件上传成功

 

high

按照中级别的方法上传文件发现并不可行,所以要换个思路。先放弃上传cmd.php文件,改为上传系统所允许的文件格式,上传一个图片文件,抓包,将文件名字x.jpg改为x.php.jpg,将cnd.php文件中的代码粘贴在图片乱码的最后面,重放请求,发现上传成功,执行low中的操作,执行结果一样。

 

文件上传防御:

1 对上传的文件在服务器上存储时进行重命名

2 检查上传文件的类型和大小、

3 禁止上传危险的文件类型,如jsp jar war等

4 直接受指定类型的文件

5 上传文件做日志记录

6 上传文件要保存的文件名和目录名由系统根据时间生成,不允许用户自定义

### 文件上传漏洞原理 文件上传漏洞是指攻击者能够通过应用程序的文件上传功能,向服务器上载恶意文件并执行。这种漏洞可能允许攻击者绕过应用的安全机制,在目标系统中植入恶意脚本或程序。 具体来说,当网站提供给用户上传图片或其他类型的文档时,如果验证严格,则可能导致未经授权的内容被放置于服务器端。例如,攻击者可以上传带有恶意PHP代码的一句话木马`<?php eval($_POST['pass']);?>`[^3],一旦成功上传并访问此文件,就能够在服务器环境中执行任意命令。 #### DVWA文件上传漏洞实例分析 为了更直观地理解这一过程,可以通过DVWA(Damn Vulnerable Web Application)平台来观察同层面的防护缺失: - **绕过大小限制**:即使设置了最大尺寸约束,某些浏览器可能会忽略这些设置;另外还可以尝试分片传输大文件。 - **绕过类型限制**:MIME类型检查够严谨的话,可以用合法扩展名包裹非法内容,比如将`.jpg.php`作为图像提交却包含可解析为PHP指令的数据流。 - **绕过后缀限制**:有些框架仅依赖文件名后缀判断合法性而忽略了实际编码格式,这使得更改文件签名成为一种有效的规避手段[^2]。 ### 文件上传漏洞防御措施 为了避免上述风险的发生,建议采取如下综合性的防范策略: #### 输入验证与过滤 实施严格的客户端和服务端双重校验机制,确保只有预期格式和范围内的资源才允许入库。特别是对于多媒体类目要特别注意其内部结构而非单纯依靠表象特征做决策。 ```python import mimetypes def validate_file(file): # 获取文件的真实 MIME 类型 mime_type, _ = mimetypes.guess_type(file.filename) allowed_types = ['image/jpeg', 'image/png'] if not file or file.filename == '': raise ValueError('No selected file') elif not mime_type in allowed_types: raise TypeError(f'Unsupported file type {mime_type}') ``` #### 权限管理 保持最小化原则配置操作系统级账户权限,使Web进程只能读写必要的路径区域,并且定期审查日志记录任何异常活动迹象。 #### 存储隔离 创建独立临时空间用于处理新接收的对象直到完成全部审核流程之前都得暴露在外网可见位置下。同时考虑启用对象存储服务代替本地磁盘操作以增强安全性。 #### WAF部署 安装专业的Web应用防火墙(WAF),它能实时监控流量模式识别可疑行为及时阻断潜在威胁源而影响正常业务运转效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值