1、文件上传的目录设置为不可执行。
2、判断文件类型,(使用白名单,黑名单不可靠)
3、使用随机数改写文件名和文件路径
4、单独设置文件服务器域名。
1、文件上传的目录设置为不可执行。
2、判断文件类型,(使用白名单,黑名单不可靠)
3、使用随机数改写文件名和文件路径
4、单独设置文件服务器域名。
转载于:https://www.cnblogs.com/zhimingxin/p/7680704.html
防范文件上传漏洞常见的几种方法:
1.文件上传的目录设置为不可执行
只要web容器无法解析该目录下面的文件,即使攻击者上传了脚本文件,服务器本身也不会受到影响,因此这一点至关重要。
2.判断文件类型
在判断文件类型时,可以结合使用MIME Type、后缀检查等方式。在文件类型检查中,强烈推荐白名单方式,黑名单的方式已经无数次被证明是不可靠的。此外,对于图片的处理,可以使用压缩函数或者resize函数,在处理图片的同时破坏图片中可能包含的HTML代码。
3.使用随机数改写文件名和文件路径
文件上传如果要执行代码,则需要用户能够访问到这个文件。在某些环境中,用户能上传,但不能访问。如果应用了随机数改写了文件名和路径,将极大地增加攻击的成本。再来就是像shell.php.rar.rar和crossdomain.xml这种文件,都将因为重命名而无法攻击。
4.单独设置文件服务器的域名
由于浏览器同源策略的关系,一系列客户端攻击将失效,比如上传crossdomain.xml、上传包含Javascript的XSS利用等问题将得到解决。
系统开发阶段的防御
系统开发人员应有较强的安全意识,尤其是采用PHP语言开发系统。在系统开发阶段应充分考虑系统的安全性。对文件上传漏洞来说,最好能在客户端和服务器端对用户上传的文件名和文件路径等项目分别进行严格的检查。客户端的检查虽然对技术较好的攻击者来说可以借助工具绕过,但是这也可以阻挡一些基本的试探。服务器端的检查最好使用白名单过滤的方法,这样能防止大小写等方式的绕过,同时还需对%00截断符进行检测,对HTTP包头的content-type也和上传文件的大小也需要进行检查。
系统运行阶段的防御
系统上线后运维人员应有较强的安全意思,积极使用多个安全检测工具对系统进行安全扫描,及时发现潜在漏洞并修复。定时查看系统日志,web服务器日志以发现入侵痕迹。定时关注系统所使用到的第三方插件的更新情况,如有新版本发布建议及时更新,如果第三方插件被爆有安全漏洞更应立即进行修补。对于整个网站都是使用的开源代码或者使用网上的框架搭建的网站来说,尤其要注意漏洞的自查和软件版本及补丁的更新,上传功能非必选可以直接删除。除对系统自生的维护外,服务器应进行合理配置,非必选一般的目录都应去掉执行权限,上传目录可配置为只读。
总结
上传的文件能够被Web容器解释执行。所以文件上传后所在的目录要是Web容器所覆盖到的路径。
用户能够从Web上访问这个文件。如果文件上传了,但用户无法通过Web访问,或者无法得到Web容器解释这个脚本,那么也不能称之为漏洞。
最后,用户上传的文件若被安全检查、格式化、图片压缩等功能改变了内容,则也可能导致攻击不成功。
文件上传漏洞
1、漏洞概述
文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。
上传文件本身没有问题,有问题的是服务器怎么处理、解释上传的文件。如果服务器的处理逻辑做的不够安全,则会导致严重的后果。
文件上传后导致的常见安全问题一般有:
文件上传漏洞前提条件:
FCKEditor是一款富文本编辑器。
FCKEditor文件上传后,通过检查文件的后缀来确定文件是否安全。代码如下:
如果我们上传后缀为php2,php4,inc,cer等文件,都可能导致文件上传漏洞。所以设置黑名单的方式并不可靠。
由于FCKEditor一般是作为第三方应用集成到网站中的,因此文件上传的目录一般默认都会被Web容器所解析,很容易形成文件上传漏洞。
在许多语言的函数中,比如在C、PHP等语言的常用字符串处理函数中,0x00被认为是终止符。
常见文件上传检查方法:
绕过方法:
比如:应用原本只允许上传JPG图片,那么可以构造文件名(需要修改POST包)为xxx.php%00.JPG,对于服务器而言,此文件因为%00字节截断,最终解析文件为xxx.php。
将真正的PHP脚本语言附在合法文件头之后
Apache对文件名的解析是从后往前解析的,直到遇见一个Apache认识的文件类型为止。比如:
因为Apache不认识 .rar这个文件类型,所以会一直遍历后缀到 .php,然后认为这是一个PHP类型的文件。
那么Apache怎么直到哪些文件是它所认识的呢?这些文件类型定义在Apache的mime.types文件中。
(1)当文件名为abc.asp;xx.jpg时,IIS 6会将此文件解析为abc.asp,文件名被截断了,从而导致脚本被执行。比如:
会执行xyz.asp,而不会解析abc.jpg。
(2)IIS 6还出过一个漏洞。因为处理文件夹扩展名出错,导致将/*.asp/目录下的所有文件都作为ASP文件进行解析。比如:
abc.jpg文件会被当做ASP文件进行解析。
注意:以上两个解析漏洞,是需要在服务器的本地硬盘上确实存在这样的文件或者文件夹,若只是通过Web应用映射出来的URL,则是无法触发的。
(3)支持PUT功能所导致的上传脚本问题。
PUT是WebDave中定义的一个方法,它允许用户上传文件到指定的路径下。如果IIS支持目录写权限,同时开启了WebDav,则会支持PUT方法,再结合MOVE方法,就能将原本只允许上传文本文件改写为脚本文件,从而执行webshell。MOVE能否执行成功,取决于IIS服务器是否勾选了 “ 脚本资源访问 ”。
FastCGI知识
问题:当访问
服务器会将test.jpg当作PHP进行解析。notexist.php是不存在的文件。
漏洞原因:在fastcgi方式下,PHP获取环境变量的方式有关。
PHP的配置文件中有一个关键的选项:cgi.fix_pathinfo,这个选项默认是开启的:
cgi.fix_pathinfo = 1
修复方法:将cgi.fix_pathinfo设置为0。
利用文件上传功能,钓鱼者可以先将包含了HTML的文件上传到目标网站,然后通过传播这个文件的URL进行钓鱼,而URL中不会出现钓鱼地址,更具有欺骗性。
只要Web容器无法解析该目录下的文件,即使攻击者上传了脚本文件,服务器本身也不会收到影响,因此此点至关重要。在实际应用中,很多大型网站文件上传后会放到独立的存储上,做静态文件处理,一方面方便使用缓存加速,降低性能损耗;另一方面也杜绝了脚本执行的可能。
在判断文件类型时,可以结合使用MIME Type、后缀检查等方式。在文件类型检查中,推荐白名单方式。对于图片的处理,可以使用压缩函数或者resize函数,在处理图片的同时破坏图片中可能包含的HTML代码。
文件名被修改后,攻击者无法访问到上传的脚本文件,因此无法实施攻击。
由于浏览器同源策略的关系,一系列客户端攻击将失效。
1,文件上传漏洞概述
(1)从FCKEditor文件上传漏洞谈起
(2)绕过文件上传检查功能
2,功能还是漏洞
(1)apache文件解析问题
(2)IIS文件解析问题
(3)PHP CGI路径解析问题
(4)利用上传文件钓鱼
3,设计安全的文件上传功能
(1)文件上传的目录设置为不可执行
(2)判断文件类型
(3)使用随机数改写文件名和文件路径
(4)单独设置文件服务器的域名