- 文件上传漏洞的概述
- 上传漏洞的危害
- 文件上传漏洞的利用
- 文件上传漏洞的防御
1、背景
现代的互联网的Web应用程序中,文件上传是一种常见的要求,因为它有助于提高业务效率。在Facebook和Twitter等社交网络的Web应用程序中都允许文件上传功能。在博客,论坛,电子银行网络,YouTube和企业支持门户,会给用户和企业员工有效的共享文件。允许用户上传图片,视频,头像和许多其他类型的文件。
什么是文件上传
- 上传头像
- 插入图片
- 上传附件
······
为什么会有文件上传
在网站运营过程中,不可避免地要对网站的某些页面或者内容进行更新,这个时候需要使用到网站的文件上传功能。如果不对被上传的文件进行限制或者限制被绕过,该功能便有可能会被利用上传可执行文件、脚本文件到服务器上,进而进一步导致服务器沦陷。
什么是文件上传漏洞
上传文件的时候,如果服务器端脚本语言,未对上传的文件进行严格的验证和过滤,就有可能上传恶意的脚本文件,从而控制整个网站,甚至是服务器。
2、危害
- 网站被控制,对文件增删改查,执行命令,链接数据库
- 如果服务器长久未更新,可以利用exp提权,导致服务器沦陷
- 同服务器的其他网站沦陷
哪里存在文件上传漏洞
- 有上传文件的功能
- 且上传到的目录,能够解析脚本语言(否则,405)
- 能够访问到上传的文件就有可能存在文件上传漏洞。
导致文件上传漏洞的原因较多,主要包括以下几类:
- 服务器配置不当(iis6.0 put 直接写文件)
- 本地文件上传限制被绕过(javascript验证)
- 服务端过滤不严格被绕过 ()
- 文件路径截断 (0x00)
- 文件解析漏洞导致文件执行(iis,apache,nginx)
- 开源编辑器上传漏洞(fckeditor 自定义文件名,文件夹结合iis6.0解析漏洞,杀伤力*****ewebeditor :可以登录后台,配置允许上传的文件类型.asp)
服务器配置不当
当服务器配置不当时,在不需要上传页面的情况下便可导致任意文件上传。(PUT协议)iis6.0
本地文件上传限制被绕过
只在客户端浏览器上做了文件限制而没有在远程的服务器上做限制,只需要修改数据包就可以轻松绕过限制。
过滤不严格或被绕过
有一些网站使用了黑名单过滤掉了一些关键的可执行脚本文件后缀。但黑名单不全或者被绕过,比如服务端过滤掉了后缀为 .php的文件,但是没有过滤掉.php3等其他可执行的脚本文件后缀,攻击者就可以上传其他的可执行的脚本文件后缀到服务器上。禁止了php,asp,jsp,但是没有禁止php3,asa,cer,cdx等等
常用的一些可执行的文件脚本后缀:
.php .php2 .php3 .php5 .phtml
.asp .aspx .ascx .ashx
.cer .asa .cdx
.jsp .jspx
.py
过滤不严格或被绕过
• 某些情况下管理员错误的服务器配置会导致.html、.xml等静态页面后缀的文件也可被执行。
• 多文件上传时,有时服务器只对第一个上传的文件进行了检查,这时通过上传多个文件并将恶意文件掺杂进其中也可绕过服务器的过滤。
文件路径截断
在上传的文件中使用一些特殊的符号,使得文件被上传到服务器中时路径被截断从而控制文件路径。常用的进行文件路径截断的字符如下:
- \0
- ?
- %00
在可以控制文件路径的情况下,使用超长的文件路径也有可能会导致文
件路径截断。asdfasdfasdfasdfasdasdfasdf.jpg
文件解析漏洞
当服务器存在解析漏洞时,合法的文件名便可导致带有恶意代码的文件被执行,详情参见解析漏洞。iis,apache,nginx
开源编辑器上传漏洞
很多开源的编辑器历史都有不同的上传漏洞,详情可见:编辑器漏洞手册。
3、文件上传漏洞的利用
利用
- 找到上传点,尝试上传脚本文件
- 上传成功,访问上传的脚本文件
- 上传失败,采取过滤绕过方法
漏洞挖掘
- 查找上传点,图片,附件,头像等等
- 目录、文件扫描发现 类似upload.php等文件
- 目录、文件扫描 编辑器目录如ewebEditor、fckeditor、kingeditor。
4、文件上传漏的防御
- 上传文件的存储目录不给执行权限
- 文件后缀白名单,注意0x00截断攻击(PHP更新到最新版本)
- 不能有本地文件包含漏洞(include dama.jpg)
- 及时更新web应用软件避免解析漏洞攻击