《白帽子讲web安全》读书笔记系列6:文件上传漏洞

1、文件上传漏洞概述

文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。

 

文件上传后导致的常见安全问题:

1)上传文件为web脚本语言,服务器web容器解释并执行了上传的脚本,导致代码执行;

2)上传文件为Flash的策略文件crossdomain.xml,黑客用以控制flash在该域下的行为;

3)上传文件为病毒、木马文件,黑客用以诱骗用户或管理员下载执行;

4)上传文件为钓鱼图片或包含脚本的图片,在某些版本的浏览器中会被作为脚本执行,被用于钓鱼或欺诈。

 

文件上传漏洞需要满足下列条件:

1)上传的文件能够被web容器解释执行;

2)用户能够从web上访问这个文件

3)用户上传文件若被安全检查、格式化、图片压缩等功能改变了内容,则可能导致攻击失败。

 

绕过文件上传检查功能

判断文件后缀:修改上传过程的POST包,在文件名后添加一个%00字节。在许多语言中0x00被认为是终止符,构造类似xxx.php[\0].JPG的文件名,绕过文件类型判断;但对于服务器端而言,此文件因为0字节截断的关系,最终变成了xxx.php

判断文件头:伪造一个合法的文件头,将真实PHP等脚本代码附在合法的文件头之后,但需要php来解释此文件。

 

2、功能 or 漏洞

Apache文件解析问题

Apache1.x 2.x中对文件名的解析时从后往前解析,知道遇见一个Apache认识的文件类型为止。恶意文件名phpshell.php.rar.rar.rar:rar是正常上传文件类型,允许上传;Apache不认识rar,往前遍历,最后文件被解析为phpshell.php,从而导致脚本被执行。

 

IIS文件解析问题

IIS6在处理文件解析时发生过类似0x00字符截断文件名的问题,不过截断字符为分号“;”。恶意构造文件名:abc.asp;xx.jpg。

IIS6还出现过因为处理文件夹扩展名出错,导致将/*.asp/目录下的所有文件都作为ASP文件进行解析,比如http://xxxx/xyz.asp/abc.jpg.

PUT是在WebDav中定义的一个方法,结合MOVE,就能实现上传文本文件,然后把文本文件改成脚本文件,从而执行webshell。此类攻击需要先用OPTIONS方法探测服务器支持的HTTP方法类型;该漏洞自动化扫描工具:IIS PUT Scanner

 

PHP CGI路径解析问题

Nginx配置fastcgi使用PHP时,可能存在文件类型解析问题,造成上传漏洞。如访问http://xxx/aa.jpg/ccc.php时,ccc.php是不存在的文件,会将aa.jpg当做php进行解析。

这个漏洞的原因和“在fastcgi方式下,PHP获取环境变量的方式”有关。PHP的配置文件中有个关键参数cgi.fix_pathinfo,这个选项默认开启。在映射URI时,两个环境变量很重要:PATH_INFO、SCRIPT_FILENAME,对于ccc.php不存在的http://xxx/aa.jpg/ccc.php,PATH_INFO=ccc.php、SCRIPT_FILENAME=aa.jpg,aa.jpg将被当做php进行解析。官方建议cgi.fix_pathinfo=0

 

利用上传文件钓鱼

钓鱼者利用文件上传功能将包含HTML的文件(如一张图片)上传到目标网站,然后通过传播这个文件的URL进行钓鱼,URL中不会出现钓鱼地址,更具有欺骗性。

正常情况下,浏览器不会将jpg当做html执行,但IE6、IE7、IE8兼容模式会“自作聪明”的将此类文件当做html执行。

 

3、设计安全的文件上传功能

1)文件上传的目录设置为不可执行

2)判断文件类型:结合使用MIME Type、后缀检查等方式,以白名单方式进行过滤检查;

3)使用随机数改写文件名和路径:攻击者能上传但不能直接访问;

4)单独设置文件服务器的域名:利用浏览器同源策略的关系,一系列客户端工具将失效

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值