导致文件上传的漏洞的原因较多,主要包括以下几类:
- 服务器配置不当
- 开源编辑器上传漏洞
- 本地文件上传限制被绕过
- 过滤不严或被绕过
- 文件解析漏洞导致文件执行
文件路径截断
服务器配置不当:
当服务器配置不当时,在不需要上传页面的情况下便可导致任意文件上传
开源编辑器上传漏洞:
很多开源的编辑器历史上都有不同的上传漏洞,包括但不只限于CKEditor,CKEditor 的文件上传漏洞
本地文件上传限制被绕过:
只在客户端浏览器上做了文件限制而没有在远程的服务器上做限制,只需要修改数据包就可以轻松绕过限制。
过滤不严或被绕过:
有些网站上使用了黑名单过滤掉了一些关键的可执行文件脚本后缀等,但黑名单不全或者被绕过,导致可执行脚本文件被上传到服务器上,执行。 如在服务器后端过滤掉了后缀为.php 的文件,但并没有过滤掉.php3 等其他可执行文件脚本后缀,攻击者就可以上传带有其他的可执行文件脚本本后缀的恶意文件到服务器上。 常用的一些可执行的文件脚本的后缀 php php2 php3 php5 phtml asp aspx ascx jsp jspx 在某些情况下由于管理员错误的服务器配置(将.html 后缀的文件使用php 进行解析等)会导致.html、.xml 等静态页面后缀的文件也可被执行。在上传文件保存磁盘为 NTFS 格式时可通过::$DATA 绕过黑名单限制,有时服务器只对第一个被上传的文件进行了检查,这时通过同时上传多个文件并将恶意文件掺杂进其中也可绕过服务器的过滤。
文件解析漏洞导致文件执行:
当服务器上存在文件解析漏洞时,合法的文件名便可导致带有恶意代码的文件被执行
文件路径截断:
在上传的文件中使用一些特殊的符号,使得文件被上传到服务器中时路径被截断从而控制文件路径。常用的进行文件路径截断的字符如下
\0?%00
在可以控制文件路径的情况下,使用超长的文件路径也有可能会导致文件路径截断。