文件上传漏洞

文件上传漏洞

 

1. 定义

文件上传漏洞是由于程序未对上传的恶意文件进行检测和过滤所导致的漏洞,  攻击者可以向服务器上传动态可执行脚本, 包括: 木马,病毒,恶意脚本或者WebShell等。这种攻击是最有效和直接的,  文件上传功能本身没有问题,  重点是上传的是什么文件,  上传后服务器怎么处理这些文件。

 

2. 中间件

什么是中间件,  中间件的作用是提供系统和软件之间连接,以便于软件各部件之间的"交流"。通俗的来说, 就是一些高级服务器框架, 比如: IIS,  Apache, Nginx等。 有些中间件本身就存在漏洞(自己开发逻辑原因等),  导致被利用。

进一步引申出 解析漏洞, 具体请往下看。

 

3. 原理

一些web网站允许上传图片、文本或者其他资源到指定的位置。
文件上传漏洞就是利用网页代码中的文件上传路径变量过滤不严将可执行的文件上传到一个到服务器中,再通过URL去访问以执行恶意代码。

       preview

容易出现文件上传漏洞的地方:

1.  有上传功能的地方 (如上传头像、附件等)

2.  能够访问到系统文件或者上传文件的地方 (攻击者通过修改dir参数从而遍历整个系统目录!)

 

4. 危害

  • 网站被控制,对文件增删改查,执行命令,连接数据库
  • 如果服务器长久未更新,可以利用exp提权,导致服务器沦陷
  • 同服务器的其他网站沦陷

 

5. 引发原因

  • 服务器配置不当(iis6.0 put 直接写文件)
  • 本地文件上传限制被绕过(javascript验证)
  • 服务端过滤不严格被绕过 
  • 文件路径截断 (0x00)
  • 文件解析漏洞导致文件执行 (iis,apache,nginx)
  • 开源编辑器上传漏洞(fckeditor 自定义文件名,文件夹结合iis6.0解析漏洞,ewebeditor :可以登录后台,配置允许上传的文件类型.asp)

 

6. 检测与绕过 

1) 前端拦截

定义: 网页上写一段Javascript脚本,校验上传文件的后缀名,有白名单(规定的类型)形式和黑名单(排除的类型)形式。

绕过:  

  • 在网页源码中改变函数调用的逻辑, 或者直接禁用js实现绕过
  • 通过抓包改成允许上传的文件类型, 实现绕过

附上MIME类型:

audio/mpeg -> .mp3
application/msword -> .doc
application/octet-stream -> .exe
application/pdf -> .pdf
application/x-javascript -> .js
application/x-rar -> .rar
application/zip -> .zip
image/gif -> .gif
image/jpeg -> .jpg / .jpeg
image/png -> .png
text/plain -> .txt
text/html -> .html
video/mp4 -> .mp4

 

2)  漏洞解析

具体参考:  典型漏洞归纳之解析漏洞

 

3)  畸形文件

定义:  又可以理解为文件拓展名检测, 表现为专门检测文件的后缀名是否包含指定黑名单或者白名单, 然后进行相应的处理

绕过: 

  • 大小写绕过
  • 不存在名单的可执行文件类型绕过
  • 构造文件名绕过 (如检测脚本是消除黑名单文件名, 则可以构造)
  • ....(待补充)

 

4)  截断上传

截断上次实质上是属于文件拓展名的检测, 下面阐述原理

截断的核心是:  %00 (url解码后, 解码前是乱码的汉字). 

常用的还有: \0, ?

它表示字符不为空(NULL), 不等价于空字符(""), 更不是空格( )

当程序输出到含有%00的地方时候, 后面的数据会被停止读取, 可以理解为一个结束符, 后面的数据直接被忽略(可以理解被注释掉了), 这就导致了漏洞的产生。

比如, 网址过滤掉了php的后缀名, 但允许上传图片类型的文件, 这时候攻击者会构造: ***.php%00.png,  检测函数会检测到是图片类型, 但是文件经过服务器处理之后就变成了:  ***.php,  后面的完全被截断了!

 

5)  .htaccess文件攻击

.htaccess文件(或者"分布式配置文件"),全称是Hypertext Access(超文本入口)。提供了针对目录改变配置的方法, 即在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录。网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。

格式为:

<FileMatch "cimer"> 

SetHandler application/x-httpd-php

</FilesMatch>

通过.htaccess文件, 通过php解析器解析一个文件名的时候, 只要文件名包含cimer即可。如果这个cimer的内容是一个木马, 就....

 

 

7. 防御

  • 上传的目录不给权限(执行权限等), 防止webshell攻击
  • 文件扩展名采用白名单校验
  • 上次文件进行重命名
  • 隐藏上次文件路径
  • 及时更新web应用软件(中间件), 避免解析漏洞

 

参考: 

文件上传漏洞

Web安全 - 文件上传漏洞

  

 

 

        

 

 

 

 

 

 

 

 

 

### 文件上传漏洞的修复与安全措施 在 Web 应用开发中,文件上传是一个常见的功能模块,但也可能成为攻击者的目标。如果页面上未提供明显的上传按钮,则更需注意潜在的安全风险。以下是针对文件上传漏洞的具体修复方案以及当页面缺少上传按钮时可采取的安全措施。 #### 一、文件上传漏洞的常见成因 文件上传漏洞通常源于以下几个方面: - **缺乏严格的文件类型验证**:允许用户上传恶意脚本文件(如 `.php` 或 `.jsp`),从而执行远程代码注入。 - **路径遍历漏洞**:未能有效过滤特殊字符(如 `../`),导致攻击者可以覆盖服务器上的敏感文件。 - **权限管理不当**:上传后的文件被放置在可以直接访问的目录下,使得攻击者可以通过 URL 访问这些文件[^1]。 #### 二、文件上传漏洞的修复方法 为了防止上述问题的发生,可以从以下几方面着手: ##### 1. 验证文件类型和扩展名 确保仅接受预期类型的文件,并通过 MIME 类型和文件头来双重校验文件的真实性。例如,在 PHP 中可以使用如下代码实现初步验证: ```php $allowedTypes = ['image/jpeg', 'application/pdf']; if (!in_array($_FILES['file']['type'], $allowedTypes)) { die('Invalid file type'); } ``` ##### 2. 使用随机化文件命名机制 为了避免文件冲突或被预测到具体位置,应对上传的文件重新命名,采用 UUID 或时间戳等方式生成唯一名称[^3]: ```php $newFileName = uniqid() . '.' . pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION); move_uploaded_file($_FILES['file']['tmp_name'], '/safe/path/' . $newFileName); ``` ##### 3. 设置专用存储目录并禁用脚本解析 将上传的文件保存在一个无法直接通过浏览器访问的目录中,或者配置 Web 服务器以阻止该目录内的任何脚本解释器工作。例如,在 Apache 的 `.htaccess` 文件中加入以下内容: ```apache <FilesMatch "\.(php|phtml|pl)$"> Order allow,deny Deny from all </FilesMatch> ``` #### 三、无上传按钮情况下的安全防护策略 即使页面表面上不存在上传按钮,仍可能存在隐藏接口供 API 调用或其他方式触发文件提交行为。因此需要额外关注以下几点: ##### 1. 输入参数合法性检查 对于所有接收外部数据的地方都应实施严格的数据清洗流程,特别是涉及 multipart/form-data 请求体的部分[^4]。 ##### 2. 实施 CSRF 防护 由于隐蔽式的文件上传往往依赖跨站点请求伪造 (CSRF),所以应当启用 token-based 方法保护每一个 POST 表单提交动作。 ##### 3. 日志记录与异常监控 建立完善的日志体系用于捕捉可疑活动迹象;同时部署入侵检测系统(IDS)/Web应用防火墙(WAF)实时拦截非法流量尝试。 #### 四、总结 综上所述,无论是常规还是隐秘形式存在的文件上传环节都需要给予高度重视。遵循以上提到的最佳实践原则可以帮助最大限度减少遭受威胁的可能性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值