解析漏洞总结 1.IIS 2.apache 3.nginx

IIS5.x/6.0

目录解析漏洞

当在网站下建立文件夹的名字为*.asp、*.asa、*.cer、*.cdx 的文件夹,那么其目录内的任何扩展名的文件都会被IIS当做asp文件来解释并执行。

文件解析漏洞

在 IIS5.x/6.0 中, 分号后面的不被解析,也就是说 xie.asp;.jpg 会被服务器看成是xie.asp。还有IIS6.0默认的可执行文件除了asp还包含这两种 .asa   .cer 。在文件上传时我们可以构造xxx.cer;.jpg等后缀成功上传。

IIS7.0

畸形解析漏洞

将文件保存成test.jpg格式,上传到服务器后,/test.jpg/x.php,此时test.jpg将会被服务器当成php文件执行,所以图片里面的代码就会被执行。我们会发现在目录下已经创建了一个一句话木马文件 test.php 。

2.apache

1.x/2.x

文件解析漏洞

apache是从右到左开始判断解析,如果为不可识别解析,就再往左判断。直到结束如果还没找到就以默认方式解析。如xxx.asp.qwe.sdf.sdf.fdc 最终就以asp文件解析。

陌生后缀

apache将 phtml pht php phps php3p php3 php4 php5后缀名都将以php解析执行

.htaccess文件

 .htaccess 文件生效前提条件为:mod_rewrite 模块开启且AllowOverride All

列举两个利用方式:

#1:这个.htaccess的意思就是把所有名字里面含有shell的文件当成php脚本来执行

<FilesMatch   "shell"> 

SetHandler  application/x-httpd-php 

</FilesMatch>

#2:这里代码的意思可以让 .jpg后缀名文件格式的文件名以php格式解析

AddType application/x-httpd-php .jpg

3.nginx

nginx<0.8.03

畸形解析漏洞

将文件保存成test.jpg格式,上传到服务器后,/test.jpg/x.php,此时test.jpg将会被服务器当成php文件执行,所以图片里面的代码就会被执行。我们会发现在目录下已经创建了一个一句话木马文件 test.php 。

主要原因是Nginx拿到文件路径(更专业的说法是URI)/test.jpg/test.php 后,一看后缀是.php,便认为该文件是php文件,于是转交给php去处理。php一看 /test.jpg/test.php 不存在,便删去最后的/test.php,又看/test.jpg存在,便把/test.jpg当成要执行的文件了,又因为后缀为.jpg,php认为这不是php文件,所以就以php解析执行了。

nginx0.5、0.6、0.7<=0.7.65、0.8<= 0.8.37

Nginx默认是以CGI的方式支持PHP解析的,普遍的做法是在Nginx配置文件中通过正则匹配设置SCRIPT_FILENAME。当访问www.xx.com/phpinfo.jpg/1.php这个URL时,$fastcgi_script_name会被设置为“phpinfo.jpg/1.php”,然后构造成SCRIPT_FILENAME传递给PHP CGI,但是PHP为什么会接受这样的参数,并将phpinfo.jpg作为PHP文件解析呢?这就要说到fix_pathinfo这个选项了。 如果开启了这个选项,那么就会触发在PHP中的如下逻辑:

PHP会认为SCRIPT_FILENAME是phpinfo.jpg,而1.php是PATH_INFO,所以就会将phpinfo.jpg作为PHP文件来解析了

漏洞形式

www.xxxx.com/UploadFiles/image/1.jpg/1.php
www.xxxx.com/UploadFiles/image/1.jpg%00.php
www.xxxx.com/UploadFiles/image/1.jpg/%20 .php

xxx.jpg%00.php (Nginx <8.03 空字节代码执行漏洞)

另外一种手法:上传一个名字为test.jpg图片马然后访问test.jpg/.php,在这个目录下就会生成一句话木马test.php。