浅谈文件上传漏洞

2018-04-30 16:34 阅读次数:来源:php开发电脑编程 新闻作者:php程序员培训

 

 


       

  现代的互联网的Web应用程序中,文件上传是一种常见的要求,因为它有助于提高业务效率。在Facebook和Twitter等社交网络的Web应用程序中都允许文件上传功能。在博客,论坛,电子银行网络,YouTube和企业支持门户,会给用户和企业员工有效的共享文件。允许用户上传图片,视频,头像和许多其他类型的文件。

  在网站运营过程中,不可避免地要对网站的某些页面或者内容进行更新,这个时候需要使用到网站的文件上传功能。如果不对被上传的文件进行限制或者限制被绕过,该功能便有可能会被利用上传可执行文件、脚本到服务器上,进而进一步导致服务器沦陷。

  上传文件的时候,如果服务器端脚本语言,未对上传的文件进行严格的验证和过滤,就有可能上传恶意的脚本文件,从而控制整个网站,甚至是服务器。

  有上传文件的位置,且上传到的目录,能够解析脚本语言, 就有可能存在文件上传漏洞。

  只在客户端浏览器上了限制而没有在服务器上限制,只要修改数据包就可以轻松绕过。(前端绕过)

  有一些网站用了黑名单过滤掉了一些关的可执行脚本文件后 缀。但黑名单不全或者被绕过,比如服务端过滤掉了后缀为 .php的 文件,但是没有过滤掉.php3等其可执行的脚本文件后缀,攻击者就可以上传其它可执行的脚本文件后缀到服务器上。

  某些情况下的服务器配置会导致.html、.xml等页面后缀的文件也可被执行。

  多文件上传时,有时服务器只对一个上传的文件进行了检,这时通过上传多个文件并将恶意文件杂进其中也可绕过服务器的过滤。

  在上传的文件中用一些特殊的符使得文件被上传到服务器中时路径被截断从而控制文件路径。 常用的进行文件路径截断的字符如下:

  一个文件名为test.php.aaa.bbb.ccc的文件,Apache会从ccc的位置往php的位置开始尝试解析,如果ccc不属于Apache能解析的后缀名,那么Apache就会尝试去解析bbb,这样一直往前尝试,直到遇到一个能解析的拓展名为止。

  另一个是只要文件名中含有”.asp;、.asa;、.cer;”会优先按 asp 来解析。

  对任意文件名只要在URL后面追加上字符串”/任意文件名.php”就会按照php的方式去解析。

  一个是对任意文件名,在后面添加/任意文件名.php的解析漏洞,比如原本文件名是 test.jpg,可以添加为 test.jpg/x.php 进行解析攻击。

  另一个是对低版本的 Nginx 可以在任意文件名后面添加%00.php 进行解析攻击。

  以上Nginx容器的版本下,上传一个在waf白名单之内扩展名的文件1.jpg,然后以1.jpg%00.php进行请求。

  以上Nginx容器的版本下,上传一个在waf白名单之内扩展名的文件1.jpg,然后以1.jpg%20%00.php进行请求。

  文件上传漏洞的防御主要还是围绕三部分,一是文件上传路径,二是文件访问权限,三是文件执行权限。

  对于图片文件的防御方法,主要是采用白名单以及图片渲染。另外的一种方法是将用户上传的文件都放到指定的目录中,同时在服务器配置中设定该目录下的所有文件不可执行,但是该方法存在的风险即是在路径可知的情况下配合文件包含漏洞即可突破。

  因此,个人觉得针对文件上传的最好防御方法即是让上传路径不可知,将用户上传文件的路径保存到数据库中,并且在需要的时候再去读取加载。




友情链接: 壹诺网站优化 山东威海凤凰湖 贵阳幼师学校 威海石岛楼盘 公务员考试 凤凰湖官网 威海银滩海景房 防爆板