1.原理
文件上传漏洞是指用户上传了一个可执行脚本文件,并通过此文件获得了执行服务器端命令的能力。要完成这个攻击,要满足一下几个条件:
- 上传的文件能够被Web容器解释执行,所以文件上传后所在的目录要是Web容器所覆盖到的路径。
- 用户能够从Web上访问这个文件。
- 用户上传的文件如果被安全检查、格式化、图片压缩等功能改变了内容,则可能导致攻击不成功
文件包含漏洞(file include)(有次面试问我文件包含,我回答的文件上传…)
严格来说,文件包含是代码注入的一种。代码注入就是注入一段用户能控制的脚本代码,并让服务器端执行。“代码注入”的典型代表就是文件包含。文件包含可能会出现在jsp、php、asp语言中。php常用的四种四种文件包含函数:include()、requrie()、include_once()、requrie_once()。使用这些函数包含一个文件时,php内核并不会在意该被包含的文件是什么类型,该文件将作为php代码执行。可分为本地文件包含、远程文件包含。
2.分类
1、上传文件是PHP、JSP、ASP等脚本代码,服务器的Web容器解释并执行了用户上传的脚本,导致代码执行;
2、上传文件是FLASH的策略文件crossdomain.xml,导致可以控制Flash在该域下的行为(其他通过类似方式控制策略文件的情况类似);
3、上传文件是病毒、木马文件,黑客用以诱骗用户或者管理员下载执行植入到pc中。
4、上传文件是钓鱼图片或为包含了脚本的图片,在某些版本的浏览器中会被作为脚本执行,被用于钓鱼和欺诈。
还有些不常见的用法,比如将上传文件作为一个入口,溢出服务器的后台处理程序,如图片解析模块;或者上传一个合法的文本文件,其中包含了php脚本,再通过本地文件包含漏洞