文件上传漏洞
漏洞简述
指由于程序员未对上传的文件进行严格的验证和过滤,导致用户可以越过其本身权限向服务器上传可执行的动态脚本文件,上传文件可以是木马、病毒、恶意脚本或Webshell等,即“文件上传”本身没有问题,有问题的是文件上传后,服务器怎么处理和解释文件。如果服务器的处理逻辑做得不够安全,则会导致严重的后果,这种攻击方式是最为直接和有效的。
漏洞危害
一般情况下文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。文件上传本身是web中最为常见的一种功能需求,关键是文件上传之后服务器端的处理、解释文件的过程是否安全。一般的情况有:
1. 上传文件WEB脚本语言,服务器的WEB容器解释并执行了用户上传的脚本,导致代码执行;
2. 上传文件FLASH策略文件crossdomain.xml,以此来控制Flash在该域下的行为;
3. 上传文件是病毒、木马文件,攻击者用以诱骗用户或管理员下载执行;
4. 上传文件是钓鱼图片或包含了脚本的图片,某些浏览器会作为脚本执行,可用于实施钓鱼或欺诈;漏洞修复
1、 最有效的,将文件上传目录直接设置为不可执行,对于Linux而言,撤销其目录的'x'权限;实际中很多大型网站的上传应用都会放置在独立的存储上作为静态文件处理,一是方便使用缓存加速降低能耗,二是杜绝了脚本执行的可能性;
2、 文件类型检查:建议使用白名单方式,结合MIME Type、后缀检查等方式(即只允许允许的文件类型进行上传);此外对于图片的处理可以使用压缩函数或resize函数,处理图片的同时破坏其包含的HTML代码;
3、 使用随机数改写文件名和文件路径,使得用户不能轻易访问自己上传的文件;
4、 单独设置文件服务器的域名。漏洞防御
1、文件上传的目录设置为不可执行。只要web容器无法解析该目录下面的文件,即使攻击者上传了脚本文件,服务器本身也不会受到影响。
2、判断文件类型。在判断文件类型时,可以结合使用MIME Type、后缀检查等方式。在文件类型检查中,强烈推荐白名单方式,黑名单的方式已经无数次被证明是不可靠的。此外,对于图片的处理,可以使用压缩函数或者resize函数,在处理图片的同时破坏图片中可能包含的HTML代码。
3、使用随机数改写文件名和文件路径。文件上传如果要执行代码,则需要用户能够访问到这个文件。在某些环境中,用户能上传,但不能访问。如果应用了随机数改写了文件名和路径,将极大地增加攻击的成本。再来就是像shell.php.rar.rar和crossdomain.xml这种文件,都将因为重命名而无法攻击。
4、单独设置文件服务器的域名。由于浏览器同源策略的关系,一系列客户端攻击将失效,比如上传crossdomain.xml、上传包含Javascript的XSS利用等问题将得到解决。
5、使用安全设备防御。文件上传攻击的本质就是将恶意文件或者脚本上传到服务器,专业的安全设备防御此类漏洞主要是通过对漏洞的上传利用行为和恶意文件的上传过程进行检测。恶意文件千变万化,隐藏手法也不断推陈出新,对普通的系统管理员来说可以通过部署安全设备来帮助防御。
Last updated
Was this helpful?