日期:2014-05-17  浏览次数:20637 次

nginx漏洞上传图片可入侵100万服务器 nginx+php的注意了
国内顶级安全团队80sec于5.20日下午6点发布了一个关于nginx的漏洞通告,由于该漏洞的存在,使用nginx+php组建的网站只要允 许上传图片就可能被黑客入侵,直到5.21日凌晨,nginx尚未发布补丁修复该漏洞。

  根据Netcraft的统计,直到2010年4月,全球一共有1300万台服务器运行着nginx程序;非常保守的估计,其中至少有600万台服务 器运行着nginx并启用了php支持;继续保守的估计,其中有1/6,也就是100万台服务器允许用户上传图片

由于nginx有漏洞,这100万台服务器可能通过上传图片的方法被黑客轻易的植入木马。植入木马的过程也非常简单,就是把木马改 成图片上传就是了,由于危害非常大,就不说细节了。有兴趣的请访问 http://www.80sec.com/nginx-securit.html

  说了那么多,我想大家对80sec这个顶级安全团队比较好奇吧,素包子简单介绍一下。

  80sec团队由一群年轻、充满活力、充满体力、充满激情、富有创造力的未婚dota男组成,他们均在各大互联网公司从事信息安全工作,他们的口号 是know it then hack it,素包子非常认同这个观点:“我们只要非常熟悉一个事物,就有可能客观的发现它的不足之处,同时我们也能的发现该事物的优点”。

  80sec的意思是“80端口的安全”,也就是“web安全”;同时由于该团队成员都是80后的年轻人,我们也可以理解为“80后安全”;另外由于 sec的发音是se ke,我们还可以理解为“80后色客”、“80后摄客”或“80后S客”,我们对80sec的理解仅受限于想象力。

  下面介绍一下他们的丰功伟绩,他们曾发现IIS、IE、FireFox、Maxthon、世界之窗、PHPWind、DeDeCMS、QQ mail、QuarkMail、EXTMail等软件的漏洞,可见硕果累累。

  既然介绍了80sec,就不得不介绍另外一个非常专注WEB安全的顶级安全团队80vul,该团队同样也是由80后的男童鞋组成(90后表示压力很 大:p),他们也发现了大量WEB APP的安全漏洞,例如IE、Gmail、wordpress、PHPWind、DISCUZ、MYBB等。

  看到这里,想必大家心里都有那么点遗憾,那就是为何没有80后女黑客(我不歧视伪娘,但我必须说明不是伪娘),我也有相同的遗憾。

  最后发一个小道消息,据说黑客已经在行动了;安全人员、系统管理人员、行动起来吧,赶紧修复该漏洞;最好不要有侥幸心理,否则下一个被黑客入侵的可 能就是你的网站。根据80sec安全公告的描述,临时修复方法如下,可3选其一。

  1、设置php.ini的cgi.fix_pathinfo为0,重启php。最方便,但修改设置的影响需要自己评估。

  2、给nginx的vhost配置添加如下内容,重启nginx。vhost较少的情况下也很方便。

  if ( $fastcgi_script_name ~ \..*\/.*php ) {

  return 403;

  }

  3、禁止上传目录解释PHP程序。不需要动webserver,如果vhost和服务器较多,短期内难度急剧上升;建议在vhost和服务器较少的 情况下采用。

作者:Hily 原始链接:http://hily.me/blog/2010/05/nginx-php-configure-security-problem/
版权声明:可以转载,转载时务必以超链接形式标明文章原始出处和作者信息及版权声明



漏洞危险等级:毁灭性。
这个漏洞严格上说并不是 Nginx 和 PHP 本身的漏洞造成的,而是由配置造成的。在我之前写的许多配置中,都普遍存在这个漏洞。

简易检测方法:
打开 Nginx + PHP 服务器上的任意一张图片,如:

如果在图片链接后加一串 /xxx.php (xxx为任意字符)后,如:

图片还能访问的话,说明你的配置存在漏洞。

漏洞分析:
下面通过分析一个很常见的 Nginx 配置来解释下漏洞的成因:
server {
     listen       80;
     server_name  test.local;

     access_log  /work/www/logs/test.access.log  main;
     error_log  /work/www/logs/test.error.log;

     location / {
         root   /work/www/test;
         index  index.html index.htm index.php;
     }

     location ~ \.php$ {
         root           /work/www/test;
         fastcgi_index  index.php;
         fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
         include        fastcgi_params;
         fastcgi_pass   unix:/tmp/php-fpm.sock;
     }
}

我们在 /work/www/test/ 目录下新建一个文件 test.png,内容如下:
那么访问  时,输出为文本内容:
但是当在后面加上 /xxx.php 时,即 http://test.local/test.png/xxx.php,可怕的事情发生了:
Array
(
     [HOSTNAME] =>
     [PATH] => /usr/local/bin:/usr/bin:/bin
     [TMP] => /tmp
     [TMPDIR] => /tmp
     [TEMP] => /tmp
     [OSTYPE] =>
     [MACHTYPE] =>
     [MALLOC_CHECK_] => 2
     [USER] => www
     [HOME] => /home/www