1.文件解析

文件解析漏洞,是指Web容器(Apache、Nginx、IIS等)在解析文件时,将非脚本文件解析成脚本文件格式并得以执行而产生的漏洞。黑客可以利用该漏洞实现非法文件的解析。文件解析漏洞主要由于网站管理员操作不当或者 Web 服务器自身的漏洞,导致一些特殊文件被 IIS、apache、nginx 或其他 Web服务器在某种情况下解释成脚本文件执行。比如网站管理员配置不当,导致php2、phtml、ascx等等这些文件也被当成脚本文件执行了。甚至某些情况下管理员错误的服务器配置导致.html、.xml等静态页面后缀的文件也被当成脚本文件执行。但是,大部分的解析漏洞还是由于web服务器自身的漏洞,导致特殊文件被当成脚本文件执行了。

2.常见中间件

2.1Apache

2.1.1多后缀解析漏洞

在 Apache 2.0.x <= 2.0.59 , Apache 2.2.x <= 2.2.17 ,中Apache 解析文件的规则是从右到左开始判断解析,如果后缀名为不可识别文件,就再往左判断。因此对于apache而言,一个 test.php.yuip 文件依然会将其解析为 php 。如果所有的后缀apache都不认识,那么就会把该文件当做默认的类型,一般来说默认类型就是 text/plain 。

哪些后缀apache可以识别呢?在window中的认识的后缀都记录在/apche/conf/mime.types 中,Ubuntu下在 /etc/mime.types

靶场测试

此时以Dorabox为例测试,选择这两项都可以上传

然后上传一个名为info.php.uiottd的文件,内容为

上传成功后直接访问,此时可以看到,info.php.uiottd已经成功执行

2.1.2 Apache配置问题

如果Apache的配置项 httpd.conf 里有这样的配置:

SetHandler application/x-httpd-php

这时,只要文件名是 xxx.jpg ,就会以 php 来执行

如果在Apache的 httpd.conf 里有这样一行配置 AddHandler php5-script .php 这时只要文件名里包含.php即使文件名是 qwer.php.jpg 也会以 php 来执行。

如果在 Apache 的 httpd.conf 里有这样一行配置 AddType application/x-httpd-php .jpg

即使扩展名是 .jpg ,也会以 php 来执行。

Apache HTTPD 支持一个文件拥有多个后缀,并为不同后缀执行不同的指令。

AddHandler :将文件扩展名映射到指定的处理程序什么样的扩展名使用什么样的程序来处理,描述的是扩展名与处理程序之间的关系。如果在 Apache 的 conf 里有这样一行配置AddHandler application/x-httpd-php.php 这时只要文件名里包含 .php 即使文件名是 test2.php.jpg 也会以 php 来执行。

AddType :在给定的文件扩展名与特定的内容类型之间建立映射AddType 是与类型表相关的,描述的是扩展名与文件类型之间的关系,例如:AddType application/x-httpd-php .jpg ,表示 .jpg 扩展名的文件就是 application/x-httpd-php 类型的。

靶场测试

1. 上传一个 .htaccess 文件,文件内容如下:

2. 然后上传文件,文件名为:

方法1和方法3: qwer.jpg

方法2和方法3: qwer.php.jpg

文件内容为:

// 方法1:

SetHandler application/x-httpd-php

// 方法2:

AddHandler php5-script .php

// 方法3:

AddType application/x-httpd-php .jpg

1.2.3 罕见后缀(正则)

Apache的php配置文件 httpd-php.conf 中会有 .+\.ph(p[345]?|t|tml)$ 此类的正则表达式,被当 php 程序执行的文件名要符合正则表达式。也就是说 php3 , php4 , php5 , pht , phtml 等文件后缀也是可以被当作 php 文件进行解析的。

上传一个 test.php3 文件,内容为:

上传成功,访问一下

发现被当做 php 文件解析了。

2.2 IIS

使用 iis5.x-6.x版本的服务器,大多为windows server 2003,网站比较古老,开发语句一般为asp;该解析漏洞也只能解析asp文件,而不能解析aspx文件。

2.2.1 目录解析

形式:.com/xx.asp;.jpgWWW.XXX

原理:在IIS-6.0的版本,服务器默认不解析;后面的内容,所以xxx.asp;.jpg 会被解析成 xxx.asp

2.2.2解析文件类型

有的网站在上传检测中会用”黑名单”方法 ,但是 IIs6.0 默认的可执行文件除了asp还包含这三种:

/test.asa

/test.cer

/test.cdx

2.2.3 IIS7.5解析漏洞

IIS7.5 的漏洞与nginx的类似,都是由于php配置文件中,开启了cgi.fix_pathinfo,而这并不是nginx或者IIS7.5本身的漏洞,跟nginx解析漏洞一样,要在 php.ini cgi.fix_pathinfo=1开启的情况才会产生。可以配合操作系统文件命名规则,上传不符合windows文件命名规则的文件名。

test.asp

test.asp(空格)

test.php:1.jpg

test.php::$DATA

# php在window的时候如果文件名+"::$DATA"会把::$DATA之后的数据当成文件流处理,不会检测后缀名,且保持"::$DATA"之前的文件名

会被windows系统自动去掉不符合规则符号后面的内容,然后再配合这个解析漏洞来执行文件。

2.3Nginx

Nginx PHP CGI 解析漏洞nathinfo)

查看nginx的配置文件

(1)Nginx默认是以CGI的方式支持PHP解析的,普遍的做法是在Nginx配置文件中通过正则匹配设置SCRIPT FILENAME。当访问http://x.x.x.x/phpinfo.jpg/1.php这个URL时$fastcgi_script_name 会被设置为phpinfo.jpg/1.php,然后构造成SCRIPT FILENAME传递给PHP CGI。

(2)但PHP为什么会接受这样的参数,并将phpinfo.jpg作为PHP文件解析呢?

这就涉及到fix_pathinfo选项了。如果PHP中开启了fix_pathinfo 这个选项,PHP会认为SCRIPT FILENAME是phpinfo.jpg,而 1.php 是PATH_INFO,所以就会将 phpinfo.jpg作为PHP文件来解析了.

简单来说,由于Nginx的特性,只要URL中路径名以.php结尾,不管该文件是否存在,直接交给php处理。

影响版本

漏洞与Nginx、php版本无关,属于用户配置不当造成的解析漏洞

漏洞形式

/1.jpg/1.php/

1.jpg/.php/

1.jpg%00.php/

1.jpg/%20\0.php

还有一种方法是:上传一个名字为 test.jpg,文件内容如下

');?

然后访问 test.jpg/.php,在当前目录下就会生成一句话木马she11.php

靶场测试

vulhub靶场的漏洞环境

环境位置:vulhub/nginx/nginx_parsing_vulnerability上传一个 jpg 文件,文件名为 phpinfo.jpg ,文件内容为:

GIF89a

解析成功

查看Nginx的配置文件

好文链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。