文件上传漏洞一般是指“上传web脚本能够被服务器解析”的问题,也就是常说的webshell的问题,要完成这个攻击需要满足以下几个条件:
绕过文件上传检查功能:
Apache文件解析问题:在Apache1.x、2.x中,对文件名的解析就存在以下特性。
Apache对于文件名的解析是从后往前解析的,直到遇见一个Apache认识的文件类型为止。比如
Phpshell.php.rar.rar.rar.rar
因为Apache不认识.rar这个文件类型,所以会一直遍历后缀到.php,然后认为这是一个PHP类型的文件。
IIS文件解析问题:IIS6在处理文件解析时,也出过一些漏洞。前面提到的0x00字符截断文件名,在IIS和Windows环境下出现过类似的漏洞,不过截断字符变成了分号“;”。
当文件名为abc.asp;xx.jpg时,IIS 6会将此文件解析为abc.asp,文件名被截断了,从而导致脚本被执行。比如:
http://www.target.com/path/xyz.asp;abc.jpg
除此漏洞外,ISS 6还出过一个漏洞,因为处理文件夹拓展名出错,导致将/*.asp/目录下所有文件都作为ASP文件进行解析。比如:
http://www.target.com/path/xyz.asp;abc.jpg
设计安全的文件上传功能:
1.文件上传的目录设置为不可执行
只要web容器无法解析该目录下的文件,即攻击者上传了脚本文件,服务器本身也不会受到影响。在实际应用中,很多大型网站的上传应用,文件上传后会放到独立的存储上,做静态文件处理。
2.判断文件类型
在判断文件类型时,可以结合使用MIME Type、后缀检查等方式。在文件类型检查中,强烈推荐白名单的方式。此外,对于图片的处理,可以使用压缩函数或者resize函数,在处理图片的同时破坏图片可能包含的HTML代码。
3.使用随机数改写文件名和文件路径
文件上传如果要执行代码,则需要用户能够访问到这个文件。如果使用随机数改写了文件名和路径,将极大地增加攻击的成本。
4.单独设置文件服务器的域名
由于浏览器同源问题策略的关系,一系列客户端攻击将失效。
原文:https://www.cnblogs.com/lwfiwo/p/10619735.html