上传文件漏洞&解析漏洞

本文致力于探索利用网站漏洞来上传非法文件的方法。

基本技术

下面是一些绕过文件上传限制的基本技术。其中的漏洞与网站使用的后台无关,而是由于网页的编写者没有进行完全和有效的限制才产生的漏洞。

类型1:前端验证

某些网站采用前端验证的方式限制用户上传文件,这时我们只需去除前端验证机制即可突破限制,完成上传。
例如:前端代码限制上传文件的类型只能为图片,因此我们上传php文件就会失败。使用firebug修改前端代码,删除验证的代码段,再次上传,即可成功。

类型2:MIME验证

对于上传的文件,上传时都会指明上传文件的类型,即MIME信息。如果服务器验证的是MIME,可以通过修改MIME信息进行绕过上传。
例如:后台要求用户上传文件不能使纯文本,验证MIME信息,即上传的MIME信息不得是plain/text。当我们在上传文件的时候,我们给服务器提供的是文件名、文件内容和MIME信息,服务器根据这些信息生成文件。所以当我们上传一个php文件时,将MIME改为图片的MIME,服务器就不会阻止文件的上传,从而正确生成一个看似不是纯文本文件的php文件。

类型3:文件扩展名漏洞

这类漏洞是由于后台判断的扩展名不全才发生的。
例如:服务器会将以php php2 php3 php4 php5为后缀名的文件全部按照php文件解析,其中的代码会被执行。但是某些后端判定并没有完全覆盖这些扩展名,因此上传这样扩展名的文件不会被排斥,这样我们就能成功上传一个非法但是有效的文件。

类型4:文件内容检测

简单来说就是在非法的文件中加入合法文件的成分,进而通过检查。
例如:规定上传文件必须是jpg文件,在上传时检查是否具有jpg文件的结构。我们知道,jpg文件有特定的文件头和文件结尾,在文件结尾之后的数据不再作为图片数据进行解析。因此,我们可以在一个正常的jpg图片后添加一段php代码,这样在上传判定时可以通过内容检测,在作为代码解析时也拥有正确的代码段。从而我们上传了一个非法文件。

类型5:空字节截断目录路径检测绕过

这是一种针对服务器对上传文件名解析时,使用空格作为截断符的机制设计的绕过。
例如:我们上传的本地文件的文件名中可能包含空格,如picture.php .jpg,这时计算机把文件当成jpg文件进行解析。当上传到服务器时,我们截获发出的包,把中间的空格(ASCII 20)改为终止符(ASCII 00),在判定时依然是jpg文件,但是到达服务器端后会因为终止符的出现而结束文件名的获取,这样我们就获得了一个目标扩展名的文件,如picture.php

解析导致的上传漏洞

这一部分利用服务器系统的一些解析漏洞来进行非法文件上传。因此,漏洞的出现和服务器的类型、版本号都有密切关系。很多漏洞已经在新版本的服务器中被修正,此处列出仅作为技术交流。

IIS6.0目录路径检测解析绕过

相关漏洞
    本例用了IIS6.0目录路径检测解析,文件的名字为“*.asp/xxx.jpg”,也同样会被 IIS 当作 ASP文件来解析并执行
    首先我们请求 /aaa.asp/xxxx.jpg
    从头部查找查找 "."号,获得 .asp/xxxx.jpg
    查找"/",如果有则内存截断,所以/aaa.asp/xxxx.jpg会当做/aaa.asp进行解析

根据漏洞描述,不难看出,只需上传的文件名形如/aaa.asp/xxxx.jpg,服务器就会按照asp的模式进行解析,而上传的实际文件后缀名又是jpg,因此实际上成功突破了上传限制。在实施时,我们只需通过抓包来修改上传路径即可。

IIS6.0解析缺陷绕过

相关漏洞

    本例用了IIS6.0目录路径检测解析,文件的名字为“*.php;xxx.jpg”,也同样会被 IIS 当作 PHP 文件来解析并执行
    首先我们请求 /aaa.php;xxx.jpg
    从头部查找查找 "."号,获得 .php;xxx.jpg
    查找";",如果有则内存截断,所以/aaa.php;xxx.jpg会当做/aaa.php进行解析

和上面的例子类似,我们只需按照规则上传一个文件名形如aaa.php;12345.jpg的文件,就能突破文件上传格式为jpg的限制,上传一个可以作为php解析的文件。在实施时,我们只需通过抓包来修改上传文件名即可。

Apache解析缺陷绕过

一般我们认为,文件的后缀名时文件名最后一个.之后的字符串,但是对于Apache而言,文件可以存在多个后缀名,即每个.之后的部分都可以作为后缀名。在解析时,Apache从后向前解析,遇到不合法的则跳过,直到遇上最后一个合法的为止,进行解析。
在我们上传非法文件时,我们可以利用这一特性把文件“改造”成合法文件。比如我们想要上传a.php,但是网站限制不能上传php文件,这时我们可以给文件添加一个合法的后缀,如a.php.7z,这样我们便可以成功上传。在服务器解析时,由于7z是一个不合法(不可解析)的后缀,因此跳过,进而解析成php文件。这样我们就成功上传了一个非法的文件。

编辑器引起的上传漏洞

FCK编辑器漏洞

FCK编辑器作为一种曾经非常流行的编辑器,现在依旧出现在许多网站的后台。由于FCK编辑器存在文件上传功能,因此可以作为一个上传点进行非法上传。
利用FCK编辑器进行非法上传,首先我们需要知道FCK编辑器的版本。进入/_samples/default.html/_whatsnew.html,我们可以查看到编辑器的版本。
不同版本的编辑器所在的路径不同。对于FCK2.4.4版本,其上传地址为editor/filemanager/browser/default/connectors/test.html,2.6.6版本则在/editor/filemanager/connectors/test.html。在得到了上传点地址后,我们就可以利用解析漏洞进行非法上传。
由于利用的漏洞本质还是解析漏洞,因此方法与上一部分介绍的相同。例如,当服务器使用的是IIS6.0时,我们可以首先创建一个形如a.asp的文件夹,并在其中上传后缀名为jpg的代码,便成功突破了上传限制,上传了一个可以解析的文件。

对非法上传的防御机制大致有如下几种:

客户端检测,使用JS对上传图片检测,包括文件大小、文件扩展名、文件类型等
服务端检测,对文件大小、文件路径、文件扩展名、文件类型、文件内容检测,对文件重命名
其他限制,服务器端上传目录设置不可执行权限

你可能感兴趣的:(上传文件漏洞&解析漏洞)