English |
  • 美国VPS主机推荐
  • |
  • 代购服务
  • |
  • 10美元以下VPS
  • |
  • VPS新手指南/教程
  • |
  • 留言板
  • |
  • 关于
  • | 登录 |

    再提供一种解决Nginx文件类型错误解析漏洞的方法

    2010年05月22日 上午 | 作者:VPS侦探

    昨日,80Sec 爆出Nginx具有严重的0day漏洞,详见《Nginx文件类型 错误解析漏洞》。只要用户拥有上传图片权限的Nginx+PHP服务器,就有被入侵的可能。

    其实此漏洞并不是Nginx的漏 洞,而是PHP PATH_INFO的漏洞,详见:http://bugs.php.net/bug.php?id=50852&edit=1

    例如用户上传了一张照片,访问地址为http://www.domain.com/images/test.jpg,而test.jpg文件内的内 容实际上是PHP代码时,通过http://www.domain.com/images/test.jpg/abc.php就能够执行该文 件内的PHP代码。

    网上提供的临时解决方法有:

    方法①、修改php.ini,设置 cgi.fix_pathinfo = 0;然后重启php-cgi。此修改会影响到使用PATH_INFO伪静态的应用,例如我以前博文的URL:http://blog.s135.com/read.php/348.htm 就不能访问了。

    方法②、在nginx的配置文件添加如下内容后重启:if ( $fastcgi_script_name ~ \..*\/.*php ) {return 403;}。该匹配同样会一并干掉类似“/read.php/348.htm”的URI。

    方法③、对于存储图片的location{...},或虚拟主机server{...},只允许纯静态访问,不配置PHP访问。例如在金山逍遥网论坛、 SNS上传的图片、附件,会传送到专门的图片、附件存储服务器集群上(pic.xoyo.com),这组服务器提供纯静态服务,无任何动态PHP配置。各 大网站几乎全部进行了图片服务器分离,因此Nginx的此次漏洞对大型网站影响不大。


    本人再提供一种修改 nginx.conf配置文件的临时解决方法,兼容“http://blog.s135.com/demo/0day/phpinfo.php/test” 的PATH_INFO伪静态,拒绝“http://blog.s135.com/demo/0day/phpinfo.jpg/test.php” 的漏洞攻击:

    location ~* .*\.php($|/)
    {
    if ($request_filename ~* .*\.php$) {
    set $is_path_info '0';
    }
    if (-e $request_filename) {
    set $is_path_info '1';
    }
    if ($is_path_info ~ '0') {
    return 403;
    }

    fastcgi_pass  127.0.0.1:9000;
    fastcgi_index index.php;
    include fcgi.conf;
    }

    也可将以下内容写在 fcgi.conf文件中,便于多个虚拟主机引用:

    if ($request_filename ~* .*\.(php|php5)$) {
    set $is_path_info '0';
    }
    if (-e $request_filename) {
    set $is_path_info '1';
    }
    if ($is_path_info ~ '0') {
    return 403;
    }

    fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
    fastcgi_param  SERVER_SOFTWARE    nginx;

    fastcgi_param  QUERY_STRING       $query_string;
    fastcgi_param  REQUEST_METHOD     $request_method;
    fastcgi_param  CONTENT_TYPE       $content_type;
    fastcgi_param  CONTENT_LENGTH     $content_length;

    fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
    fastcgi_param  SCRIPT_NAME        $uri;
    fastcgi_param  REQUEST_URI        $request_uri;
    fastcgi_param  DOCUMENT_URI       $document_uri;
    fastcgi_param  DOCUMENT_ROOT      $document_root;
    fastcgi_param  SERVER_PROTOCOL    $server_protocol;

    fastcgi_param  REMOTE_ADDR        $remote_addr;
    fastcgi_param  REMOTE_PORT        $remote_port;
    fastcgi_param  SERVER_ADDR        $server_addr;
    fastcgi_param  SERVER_PORT        $server_port;
    fastcgi_param  SERVER_NAME        $server_name;

    # PHP only, required if PHP was built with --enable-force-cgi-redirect
    fastcgi_param  REDIRECT_STATUS    200;

    转载自:http://blog.s135.com/nginx_0day/

    >>转载请注明出处:VPS侦探 本文链接地址:https://www.vpser.net/manage/path_info-securit-bug.html
    VPS侦探推荐:
    遨游主机VultrLinode搬瓦工LOCVPSKVMLAHOSTKVMHostXen80VPS美国VPS主机,国内推荐腾讯云阿里云
    欢迎加入VPS侦探论坛交流:https://bbs.vpser.net

    发表评论

    *必填

    *必填 (不会被公开)

    评论(一条评论)

    1. wwwawww说道:

      事实上这种修补并不完整。利用配置正则匹配的方式去限制他,而不是从根本上解决,完全可以被绕过规则。