博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
再提供一种解决Nginx文件类型错误解析漏洞的方法
阅读量:5226 次
发布时间:2019-06-14

本文共 2271 字,大约阅读时间需要 7 分钟。

[文章作者:张宴 本文版本:v1.2 最后修改:2010.05.24 转载请注明原文链接:]

  注:2010年5月23日14:00前阅读本文的朋友,请按目前v1.1版本的最新配置进行设置。
  昨日,80Sec 爆出Nginx具有严重的0day漏洞,详见《》。只要用户拥有上传图片权限的Nginx+PHP服务器,就有被入侵的可能。
  其实此漏洞并不是Nginx的漏洞,而是PHP PATH_INFO的漏洞,详见:
  例如用户上传了一张照片,访问地址为,而test.jpg文件内的内容实际上是PHP代码时,通过就能够执行该文件内的PHP代码。
  网上提供的临时解决方法有:
  方法①、修改php.ini,设置cgi.fix_pathinfo = 0;然后重启php-cgi。此修改会影响到使用PATH_INFO伪静态的应用,例如我以前博文的URL: 就不能访问了。
  方法②、在nginx的配置文件添加如下内容后重启:if ( $fastcgi_script_name ~ \..*\/.*php ) {return 403;}。该匹配会影响类似 (5.0为目录), 的URL访问。
  方法③、对于存储图片的location{...},或虚拟主机server{...},只允许纯静态访问,不配置PHP访问。例如在金山逍遥网论坛、SNS上传的图片、附件,会传送到专门的图片、附件存储服务器集群上(pic.xoyo.com),这组服务器提供纯静态服务,无任何动态PHP配置。各大网站几乎全部进行了图片服务器分离,因此Nginx的此次漏洞对大型网站影响不大。


  本人再提供一种修改nginx.conf配置文件的临时解决方法,兼容“”的PATH_INFO伪静态,拒绝“”的漏洞攻击:

location ~* .*\.php($|/)
{
      if ($request_filename ~* (.*)\.php) {
            set $php_url $1;
      }
      if (!-e $php_url.php) {
            return 403;
      }
      fastcgi_pass  127.0.0.1:9000;
      fastcgi_index index.php;
      include fcgi.conf;
}

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

if ($request_filename ~* (.*)\.php) {
    set $php_url $1;
}
if (!-e $php_url.php) {
    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;


  附:文章修改历史
  ● [2010年05月21日] [Version 1.0] 新建
  ● [2010年05月23日] [Version 1.1] 针对网友michael提出的“如果构造一个形如/..trojan.jpg/dummy.php/?abcd=1,似乎可以绕过防范的nginx配置”,进行了配置修改,防范了此类情况发生。提供测试的URL如下,拒绝漏洞访问:
   (里面是PHP代码)
  
  
  
  同时兼容正常的PATH_INFO伪静态请求,测试URL如下:
   (这是正常的PHP文件)
  
  
  
  ● [2010年05月24日] [Version 1.2] 修正文字描述错误。

 

转载于:https://www.cnblogs.com/L-H-R-X-hehe/p/3970620.html

你可能感兴趣的文章
vue.js计算属性 vs methods
查看>>
Day004课程内容
查看>>
调整显示屏幕偏移和刷新频率[zt]
查看>>
There are no accidents.
查看>>
图片与文本的对齐方式
查看>>
ABAP 仓库理货单导出
查看>>
C#获取客户端浏览器信息
查看>>
剑指Offer——删除链表中重复的结点
查看>>
大数相乘练习
查看>>
CentOS 7开机启动脚本
查看>>
超像素分割, 并获取每一个分区
查看>>
shell提示符显示git当前分支
查看>>
iTextSharp生成pdf文档案例
查看>>
设置IIS7/IIS7.5的FTP支持断点续传
查看>>
JPA规范及其它持久层框架
查看>>
CentOS 6 安装Syslog-ng
查看>>
hdu Rikka with string (dfs)
查看>>
我的第一条博客
查看>>
http://qiye.qianzhan.com/ 企业查询宝
查看>>
unity3d-解密加密数据
查看>>