zoukankan      html  css  js  c++  java
  • 典型漏洞归纳之解析漏洞

    0x00 总览说明

    服务器解析漏洞算是历史比较悠久了,但如今依然广泛存在。在此记录汇总一些常见服务器(WEB server)的解析漏洞,比如IIS6.0、IIS7.5、apache、nginx等方便以后回顾温习。

    from:http://thief.one/2016/09/21/%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%A7%A3%E6%9E%90%E6%BC%8F%E6%B4%9E/

    0x01 归纳总结

    (一)IIS5.x-6.x解析漏洞

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

    目录解析(6.0)

    形式:www.xxx.com/xx.asp/xx.jpg
    原理: 服务器默认会把.asp,.asa目录下的文件都解析成asp文件。

    文件解析

    形式:www.xxx.com/xx.asp;.jpg
    原理:服务器默认不解析;号后面的内容,因此xx.asp;.jpg便被解析成asp文件了。

    解析文件类型

    IIS6.0 默认的可执行文件除了asp还包含这三种 :

    /test.asa
    /test.cer
    /test.cdx

    修复方案

    1.目前尚无微软官方的补丁,可以通过自己编写正则,阻止上传xx.asp;.jpg类型的文件名。
    2.做好权限设置,限制用户创建文件夹。

    (二)apache解析漏洞

    漏洞原理

      Apache 解析文件的规则是从右到左开始判断解析,如果后缀名为不可识别文件解析,就再往左判断。比如 test.php.owf.rar “.owf”和”.rar” 这两种后缀是apache不可识别解析,apache就会把wooyun.php.owf.rar解析成php。

    漏洞形式

    www.xxxx.xxx.com/test.php.php123

    其余配置问题导致漏洞

    (1)如果在 Apache 的 conf 里有这样一行配置 AddHandler php5-script .php 这时只要文件名里包含.php 即使文件名是 test2.php.jpg 也会以 php 来执行。
    (2)如果在 Apache 的 conf 里有这样一行配置 AddType application/x-httpd-php .jpg 即使扩展名是 jpg,一样能以 php 方式执行。

    修复方案

    1.apache配置文件,禁止.php.这样的文件执行,配置文件里面加入

    <Files ~ “.(php.|php3.)”>
            Order Allow,Deny
            Deny from all
    </Files>

    2.用伪静态能解决这个问题,重写类似.php.*这类文件,打开apache的httpd.conf找到LoadModule rewrite_module modules/mod_rewrite.so
    把#号去掉,重启apache,在网站根目录下建立.htaccess文件,代码如下:

    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule .(php.|php3.) /index.php
    RewriteRule .(pHp.|pHp3.) /index.php
    RewriteRule .(phP.|phP3.) /index.php
    RewriteRule .(Php.|Php3.) /index.php
    RewriteRule .(PHp.|PHp3.) /index.php
    RewriteRule .(PhP.|PhP3.) /index.php
    RewriteRule .(pHP.|pHP3.) /index.php
    RewriteRule .(PHP.|PHP3.) /index.php
    </IfModule>

    (三)nginx解析漏洞

    漏洞原理

      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,以下内容的文件。

    <?PHP fputs(fopen('shell.php','w'),'<?php eval($_POST[cmd])?>');?>

    然后访问test.jpg/.php,在这个目录下就会生成一句话木马shell.php。

     使用phpstudy测试,默认配置即可(虽然默认的cgi.fix_pathinfo是注释状态,但的确默认值为1)nginx版本1.11.5 (可见并不是)

    修复方案

    1.修改php.ini文件,将cgi.fix_pathinfo的值设置为0;
    2.在Nginx配置文件中添加以下代码:

    if ( $fastcgi_script_name ~ ..*/.*php ) {
    return 403;
    }

    这行代码的意思是当匹配到类似test.jpg/a.php的URL时,将返回403错误代码。

    (四)IIS7.5解析漏洞

    IIS7.5的漏洞与nginx的类似,都是由于php配置文件中,开启了cgi.fix_pathinfo,而这并不是nginx或者iis7.5本身的漏洞。

    PS: a.aspx.a;.a.aspx.jpg..jpg

  • 相关阅读:
    C# 操作配置文件
    C# Excel操作类
    没有找到 mspdb100.dll 的解决办法
    工厂方法模式
    .Net互操作2
    The certificate used to sign “AppName” has either expired or has been revoked. An updated certificate is required to sign and install the application解决
    手机抓包xcode自带命令行工具配合wireshark实现
    expecting SSH2_MSG_KEX_ECDH_REPLY ssh_dispatch_run_fatal问题解决
    使用ssh-keygen设置ssh无密码登录
    远程复制文件到服务器
  • 原文地址:https://www.cnblogs.com/shellr00t/p/6426856.html
Copyright © 2011-2022 走看看