中间件解析漏洞

关于IIS解析漏洞可以回顾

PHP-FPM – ki10Moc’s Magic World

IISIS5.x/6.0解析漏洞

一般使用ISS5/6的服务器大多为WindowsServer20003,开发语言为asp

当在网站下建立文件夹的名字为*.asp *.asa *.cer *.cdx的文件夹,在其目录内的任何或站名的文件都会被IIS当做asp文件来解析执行

asp一句话

<%eval request("admin")%>

IIS5

服务器默认不解析;后的内容,因此*.asp;jpg会被解析成asp文件

IIS6

在IIS6版本中默认的可执行文件还有*.asa *.cer

IIS7

漏洞条件:

1、php.ini中cgi.cgi_pathinfo=1

2、IIS7在Fast-CGI模式下运行

上传*.jpg文件,*.jpg/.php会被当做php文件执行

Apache解析漏洞

解析规则:从右向左开始判断

.jpg.php.png 若果无法解析png,就会判断.*jpg.php是否可以执行,以此类推,如果所有的后缀都无法解析,就会将该文件作为默认类型进行处理,默认类型为text/plain

<FilesMatch ".+\\.ph(p[345]?|t|tml)$">
    SetHandler application/x-httpd-php
</FilesMatch>
<FilesMatch ".+\\.phps$">
    SetHandler application/x-httpd-php-source
    # Deny access to raw php sources by default
    # To re-enable it's recommended to enable access to the files
    # only in specific virtual host or directory
    Order Deny,Allow
    Deny from all
</FilesMatch>
# Deny access to files without filename (e.g. '.php')
<FilesMatch "^\\.ph(p[345]?|t|tml|ps)$">
    Order Deny,Allow
    Deny from all
</FilesMatch>

# Running PHP scripts in user directories is disabled by default
# 
# To re-enable PHP in user directories comment the following lines
# (from <IfModule ...> to </IfModule>.) Do NOT set it to On as it
# prevents .htaccess files from disabling it.
<IfModule mod_userdir.c>
    <Directory /home/*/public_html>
        php_admin_flag engine Off
    </Directory>
</IfModule>

从配置文件来看

".+\\.ph(p[345]?|t|tml)$

这里检测的是文件名的末尾

如果将$改为\.就可以解析*.php.xxx

Nginx解析漏洞

Nginx通常以CGI或Fast-CGI来支持PHP解析

SCRIPT_FILENAME会指向PHP文件,随后分配给进程池的PHHP解析器处理

fix_pathinfo

它是用来对设置cgi模式下为php是否提供绝对路径信息或PATH_INFO信息。该选项默认值为1

PATH_INFO

包含由客户端提供的、跟在真实脚本名称之后并且在查询语句(query string)之前的路径信息,如果存在的话。

**http://www.test.com/index.php/foo/bar.html?c=index&m=search**  其中$_SERVER[‘PATH_INFO’] = ‘/foo/bar.html’ $_SERVER[‘QUERY_STRING’] = ‘c=index&m=search’;

但如果是www.xxx.com/phpinfo.jpg/1.php

如果1.php是不存在的,PHP会认为SCRIPT_FILENAME是phpinfo.jpg,而1.php是PATH_INFO,所以就会将phpinfo.jpg作为PHP文件来解析

前面提到SCRIPT_FILENAME才是真正要解析的PHP文件,如果图片内容是一段代码,就会被执行

所以在配置文件中需要将cgi.fix_pathinfo设置为0

并添加代码

if($fastcgi_script_name~ ..*/.*php){
return 403;
}//匹配到类似test.jpg/a.php的URL时,返回403错误代码

新版本的php中引入了security.limit_extensions,限制可执行文件后缀,只允许直行.php文件

发布日期:
分类:PHP

发表评论

您的电子邮箱地址不会被公开。