[转载20131024]Nginx服务器漏洞的利用和修复方法

本文主要分为两大部分,第一部分介绍了Nginx的一些常见安全漏洞的形成原因、利用方法,并给出了相应的解决办法;第二部分介绍了Nginx安全加固时需要关注的主要内容。
  Nginx(发音同engine x)是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,由俄罗斯的程序设计师Igor Sysoev所开发,可以稳定地运行在Linux、Windows等操作系统上,其特点是占用内存少,并发能力强。
  同其他软件一样,Nginx也出现过一些安全漏洞,利用这些漏洞可以对Web服务器进行渗透攻击。
  下面我们通过实例来介绍几个关于Nginx的安全漏洞,以及相应的漏洞利用方法。

   Nginx漏洞分析实例
  Nginx文件类型错误解析漏洞
  在2010年的时候,国内安全组织80Sec发现了一个Nginx文件类型解析漏洞,但实际上这个并非Nginx本身的漏洞,而是由于配置导致的安全问题。下面我们详细分析一下这个漏洞。
  漏洞分析:Nginx默认是以CGI的方式支持PHP解析的,普遍的做法是在Nginx配置文件中通过正则匹配设置SCRIPT_FILENAME。配置文件中会有类似如下内容。
  location对请求进行选择的时候会使用URI环境变量进行选择,其中传递到后端Fastcgi的关键变量SCRIPT_FILENAME是由Nginx生成的$fastcgi_script_name来决定的。而通过分析可以看到$fastcgi_script_name是直接由URI环境变量控制的,这里就是产生问题的点。当访问http://192.168.1.103/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文件来解析了。
  漏洞危害:利用该漏洞,攻击者可以将任意文件类型作为PHP文件解析,攻击者通常利用该漏洞来获取到一个WebShell。
  漏洞利用:假设某一服务器存在该漏洞,攻击者可以通过上传一张包含PHP后门代码的图片来获取WebShell,这是一种常见的攻击方式,如所示。
  

  
  解决方案:这里介绍两种解决方案:
一、修改php.ini文件,将cgi.fix_pathinfo的值设置为0;

二、在Nginx配置文件中添加以下代码:
  if ( $fastcgi_script_name ~ \..*\/.*php ) {
  return 403;
  }
  这行代码的意思是当匹配到类似test.jpg/a.php的URL时,将返回403错误代码。
  Nginx配置错误而导致目录遍历漏洞
  在Nginx的配置文件中如果开启了autoindex选项,并采用类似下面的配置时会造成目录遍历漏洞,。
  当访问http://192.168.1.103/test/这个URL时,正常情况应该遍历html/test/这个目录,但是如果访问http://192.168.1.103/test../这个URL时,则会遍历上一级目录(html/)了。
  下面我们通过一个实例来演示下这个漏洞,先来看下正常访问时返回的页面。
  现在我们再来看下漏洞被触发后返回的页面,如所示。
  

  
  通过所示的返回结果,我们可以看到利用该漏洞我们成功遍历到了其上一级目录。
  下面提供两种方法来解决这个问题,从中选择一种即可。
  现在我们再来验证下当采用上面的代码加固Nginx以后,服务器是否还存在漏洞。
  返回结果可以看到漏洞没有被触发,而是返回了404页面,说明漏洞被修复。

    Nginx安全加固
  针对Nginx的安全加固,主要从以下两个方面考虑:一、Nginx Web Server程序本身是否安全,如是否存在安全漏洞;二、Nginx Web Server是否提供了可使用的安全功能,这部分主要是检查Nginx的配置是否得当,是否存在由于配置失误导致的安全问题。

    Nginx版本的选择与安装注意事项
  在选择Nginx版本时,需要关注是否存在安全漏洞和版本的稳定性。一般选择最新的稳定版本,这样可以在稳定性和安全之间取得一个平衡。在升级Nginx版本前建议先在测试环境中测试通过后再正式升级,以避免由于兼容性带来其他不可预知的问题。
  关于Nginx的安全漏洞可以关注Nginx官方发布的安全公告(http://nginx.org/en/security_advisories.html)或到其他一些漏洞发布平台上查找。
  在安装Nginx时建议使用自定义安装路径,如果采用默认安装路径,很容易被攻击者和一些自动化攻击工具猜测到,为其进行下一步的攻击提供便利。

    Nginx安全配置
  1. 修改/隐藏Nginx Banner信息
  攻击者在对目标服务器进行渗透攻击前,通常会有一个目标信息收集阶段,这个阶段的任务就是通过各种手段获取到目标服务器的信息,如获取目标服务器的系统版本、Web、数据库的类型及相关信息,这个阶段获取到的信息将直接关系到攻击者下一步采取的攻击手段。因此,修改/隐藏Nginx的相关信息将在一定程度上可以增大攻击者的攻击难度,也可以骗过一些自动化攻击工具。
  在Linux平台下以源码方式安装Nginx时,可以通过修改“src/core/nginx.h”中的信息来达到隐藏或自定义Banner信息的目的。
  我们先来看下nginx.h这个文件中默认的内容,类似所示。
  

  
  这时当我们访问Nginx服务器时,Server字段会返回真实的Banner信息。
  现在我们来自定义nginx.h中关于Banner信息的内容。
  

  
  修改完成后,重新编译Nginx,然后安装即可。安装完成后,我们再来访问下该Nginx服务器,发现这时Server返回的内容为自定义的Banner信息了,如所示。

  2. Nginx日志安全
  不论在那种服务器上,日志都是一个非常重要的部分,我们需要对它严加保护。在Nginx上也是如此。Nginx的日志默认存放在安装目录的logs目录下,首先要修改日志的默认保存路径,然后设置只允许管理员有日志存放目录的完全控制权限。

  3. Nginx权限设置
  Nginx权限设置分为Nginx运行权限设置和网站目录权限设置两部分。
  Nginx运行权限是指Nginx以什么权限运行,以管理员权限运行是一个非常糟糕的决定。这样的后果是攻击者一旦攻击成功,将直接获取到一个高权限的WebShell。因此,我们需要设置Nginx以一个低权限的身份运行,可通过修改“Nginx.conf”这个配置文件来实现。
  网站目录权限设置则要遵循以下原则:
  a) 如果目录有写入权限,一定不要分配执行权限
  b) 如果目录有执行权限,一定不要分配写入权限
  c) 网站上传目录和数据库目录一般需要分配“写入”权限,但一定不要分配执行权限
  d) 其他目录一般只分配“读取”权限即可

时间: 2024-08-01 00:55:10

[转载20131024]Nginx服务器漏洞的利用和修复方法的相关文章

【转】Nginx服务器的反向代理proxy_pass配置方法讲解

[转]Nginx服务器的反向代理proxy_pass配置方法讲解 转自:http://www.jb51.net/article/78746.htm 就普通的反向代理来讲Nginx的配置还是比较简单的,如: location ~ /* { proxy_pass http://127.0.0.1:8008; } 或者可以 location / { proxy_pass http://127.0.0.1:8008; } Apache2的反向代理的配置是: ProxyPass /ysz/ http://

Linux下安装PHP并在nginx服务器中进行配置的详细方法

先介绍一下使用的环境:centos 7.4, PHP 7.0 , nginx 1.12 Linux系统版本可以通过命令:lsb_release -a 查看. 现在开始步入正题了! 1.  首先查看一下nginx是否已经安装成功. Linux命令:find /|grep nginx.conf  如果安装完成,会显示出你的nginx配置文件所在的目录,我这里的目录是在  /etc/nginx目录下. 不会安装的小伙伴请自行百度,有时间的时候我也会写篇博客专门介绍nginx的安装及其配置等问题,在这里

nginx服务器绑定域名和设置根目录的方法

nginx服务器绑定域名以及设置根目录非常方便,首先进入nginx安装目录,然后执行 vim conf/nginx.conf 打开nginx的配置文件,找到 server { ..... ..... } 这个代码段,这段代码就是用来配置对应站点的,首先我们应该在域名控制面板将域名解析到我们服务器的IP地址,然后绑定才可以生效 首先在我们的代码段中找到server_name这一项然后把后面的域名改成我们要绑定的域名即可 root这一项就是指定的根目录,设置成我们指定的目录即可 如果我们想绑定多个域

nginx 0day漏洞 上传图片可入侵百万台服务器

国内顶级安全团队80sec于5.20日下午6点发布了一个关于nginx的漏洞通告,由于该漏洞的存在,使用nginx+php组建的网站只要允许上传图片就可能被黑客入侵,直到5.21日凌晨,nginx尚未发布修复该漏洞的补丁:已经有一些网站被黑了,管理员速修复! 根据Netcraft的统计,直到2010年4月,全球一共有1300万台服务器运行着nginx程序:非常保守的估计,其中至少有600万台服务器运行着nginx并启用了php支持:继续保守的估计,其中有1/6,也就是100万台服务器允许用户上传

利用Python在堡垒机模式下批量管理后端nginx服务器

在集群环境中,有时候需要批量修改nginx配置,或批量添加vhost主机.手动一个个添加,效率太慢,借助Fabric写了一个批量分发的脚本,会提高不少效率. 思路: (1.在一台nginx修改配置或添加vhost主机,并测试; (2.测试成功后,将配制文件推送至堡垒机(跳板机); (3.在堡垒机上将配置文件分发至其他nginx服务器 [如果原有文件存在,则先备份] ; 只是在堡垒机环境下一个简单的推送文件脚本,比较简陋,代码如下: # -*- coding:utf-8 -*- #! /usr/b

利用SQL注入漏洞登录后台的实现方法

利用SQL注入漏洞登录后台的实现方法 作者: 字体:[增加 减小] 类型:转载 时间:2012-01-12我要评论 工作需要,得好好补习下关于WEB安全方面的相关知识,故撰此文,权当总结,别无它意.读这篇文章,我假设读者有过写SQL语句的经历,或者能看得懂SQL语句 早在02年,国外关于SQL注入漏洞的技术文章已经很多,而国内在05年左右才开始的.  如今,谈SQL注入漏洞是否已是明日黄花,国内大大小小的网站都已经补上漏洞.但,百密必有一疏,入侵是偶然的,但安全绝对不是必然的.  前些天,网上传

nginx解析漏洞

国内顶级安全团队80sec于5.20日下午6点发布了一个关于nginx的漏洞通告,由于该漏洞的存在,使用nginx+php组建的网站只要允 许上传图片就可能被黑客入侵,直到5.21日凌晨,nginx尚未发布补丁修复该漏洞. 根据Netcraft的统计,直到2010年4月,全球一共有1300万台服务器运行着nginx程序;非常保守的估计,其中至少有600万台服务 器运行着nginx并启用了php支持;继续保守的估计,其中有1/6,也就是100万台服务器允许用户上传图片 由于nginx有漏洞,这10

【转载】网络安全---Strurts2漏洞介绍

Apache Struts2 作为世界上最流行的 Java Web 服务器框架之一,3 月 7 日带来了本年度第一个高危漏洞--CVE编号 CVE-2017-5638 .其原因是由于 Apache Struts2 的 Jakarta Multipart parser 插件存在远程代码执行漏洞,攻击者可以在使用该插件上传文件时,修改 HTTP 请求头中的 Content-Type 值来触发该漏洞,导致远程执行代码. 哪些网站已中招 Struts 作为一个"世界级"开源架构,它的一个高危漏

Jenkins-CVE-2016-0792漏洞利用及修复建议

漏洞概述: 国外网站 Contrast Security 于2016年2月24日在公开了Jenkins近日修复的一个可通过低权限用户调用 API 服务致使的命令执行漏洞详情.通过低权限用户构造一个恶意的 XML 文档发送至服务端接口,使服务端解析时调用 API 执行外部命令. 利用方法: 1. 登陆低权限用户test 权限为:Overall的read权限+Job的create权限 将下面xml数据包post到创建项目页面,项目名称任意命名,这里暂取qt-sec ,完整链接如下: http://1