本文主要分为两大部分,第一部分介绍了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。配置文件中会有类似如下内容,如图1所示。

图1

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这个选项了,如图2所示。

图2

如果开启了这个选项,那么就会触发在PHP中的如下逻辑,如图3所示。

图3

到这里,PHP会认为SCRIPT_FILENAME是phpinfo.jpg,而1.php是PATH_INFO,所以就会将phpinfo.jpg作为PHP文件来解析了。

漏洞危害:利用该漏洞,攻击者可以将任意文件类型作为PHP文件解析,攻击者通常利用该漏洞来获取到一个WebShell。

漏洞利用:假设某一服务器存在该漏洞,攻击者可以通过上传一张包含PHP后门代码的图片来获取WebShell,这是一种常见的攻击方式,如图4所示。

图4

解决方案:这里介绍两种解决方案:一、修改php.ini文件,将cgi.fix_pathinfo的值设置为0;二、在Nginx配置文件中添加以下代码:

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

return 403;

}

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

图5

Nginx配置错误而导致目录遍历漏洞

在Nginx的配置文件中如果开启了autoindex选项,并采用类似下面的配置时会造成目录遍历漏洞,如图6所示。

图6

当访问http://192.168.1.103/test/这个URL时,正常情况应该遍历html/test/这个目录,但是如果访问http://192.168.1.103/test../这个URL时,则会遍历上一级目录(html/)了。

下面我们通过一个实例来演示下这个漏洞,先来看下正常访问时返回的页面,如图7所示。

图7

现在我们再来看下漏洞被触发后返回的页面,如图8所示。

图8

通过图8所示的返回结果,我们可以看到利用该漏洞我们成功遍历到了其上一级目录。

下面提供两种方法来解决这个问题,从中选择一种即可,具体配置如下图9所示。

图9

现在我们再来验证下当采用上面的代码加固Nginx以后,服务器是否还存在漏洞。

图10

从图10的返回结果可以看到漏洞没有被触发,而是返回了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这个文件中默认的内容,类似图11所示。

图11

这时当我们访问Nginx服务器时,Server字段会返回真实的Banner信息,如图12所示。

图12

现在我们来自定义nginx.h中关于Banner信息的内容,可参考图13。

图13

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

图14

2. Nginx日志安全

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

3. Nginx权限设置

Nginx权限设置分为Nginx运行权限设置和网站目录权限设置两部分。

Nginx运行权限是指Nginx以什么权限运行,以管理员权限运行是一个非常糟糕的决定。这样的后果是攻击者一旦攻击成功,将直接获取到一个高权限的 WebShell。因此,我们需要设置Nginx以一个低权限的身份运行,可通过修改“Nginx.conf”这个配置文件来实现。

网站目录权限设置则要遵循以下原则:

a) 如果目录有写入权限,一定不要分配执行权限

b) 如果目录有执行权限,一定不要分配写入权限

c) 网站上传目录和数据库目录一般需要分配“写入”权限,但一定不要分配执行权限

d) 其他目录一般只分配“读取”权限即可

转载请注明:铁匠博客 Linux windows 代码审计 网络安全 » Nginx漏洞利用与安全加固

Nginx漏洞利用与安全加固的更多相关文章

  1. Apache漏洞利用与安全加固实例分析

    Apache 作为Web应用的载体,一旦出现安全问题,那么运行在其上的Web应用的安全也无法得到保障,所以,研究Apache的漏洞与安全性非常有意义.本文将结合实例来谈谈针对Apache的漏洞利用和安 ...

  2. [转]Apache漏洞利用与安全加固实例分析

    1.2 Apache文件解析特性 Apache对于文件名的解析是从后往前解析的,直到遇见一个它认识的文件类型为止.因此,如果web目录下存在以类似webshell.php.test这样格式命名的文件, ...

  3. Tomcat漏洞利用与安全加固实例分析

    Tomcat中间件经常遇到的漏洞: 1.Tomcat默认存在一个管理后台,默认的管理地址是http://IP或域名:端口号/manager/html 2.Axis2默认口令安全漏洞,默认的管理地址是h ...

  4. phpcms2008网站漏洞如何修复 远程代码写入缓存漏洞利用

    SINE安全公司在对phpcms2008网站代码进行安全检测与审计的时候发现该phpcms存在远程代码写入缓存文件的一个SQL注入漏洞,该phpcms漏洞危害较大,可以导致网站被黑,以及服务器遭受黑客 ...

  5. 网站安全检测 漏洞检测 对thinkphp通杀漏洞利用与修复建议

    thinkphp在国内来说,很多站长以及平台都在使用这套开源的系统来建站,为什么会这么深受大家的喜欢,第一开源,便捷,高效,生成静态化html,第二框架性的易于开发php架构,很多第三方的插件以及第三 ...

  6. Struts-S2-045漏洞利用

    最近也是在看Struts2的漏洞,这里与大家共同探讨一下,本次我复现的是s2-045这个编号的漏洞 漏洞介绍 Apache Struts 2被曝存在远程命令执行漏洞,漏洞编号S2-045,CVE编号C ...

  7. Linux环境下常见漏洞利用技术(培训ppt+实例+exp)

    记得以前在drops写过一篇文章叫 linux常见漏洞利用技术实践 ,现在还可以找得到(https://woo.49.gs/static/drops/binary-6521.html), 不过当时开始 ...

  8. apt28组织新的flash漏洞利用包dealerschoice分析

    17号paloalto发布了文章dealerschoice-sofacys-flash-player-exploit-platform,文中提到apt28正在编写adobe flash player的 ...

  9. Linux堆溢出漏洞利用之unlink

    Linux堆溢出漏洞利用之unlink 作者:走位@阿里聚安全 0 前言 之前我们深入了解了glibc malloc的运行机制(文章链接请看文末▼),下面就让我们开始真正的堆溢出漏洞利用学习吧.说实话 ...

随机推荐

  1. mysql面试常见题目3

    三十六大 冯唐 春水初生, 春林初盛, 春风十里,不如你. 秋风落叶, 秋雨绵绵, 愁心上秋,只为你. 某个员工信息表结构和数据如下: id name dept salary edlevel hire ...

  2. Django - day00 第一个页面

    Django - day00 0.写在最前面 第一次接触Django,是在大三的做数据库课程设计的时候,当时好像还是1.8的版本,现转眼就到了2.0的版本. 当时由于没太多的课,仅花了不到一周的时间就 ...

  3. Maya Api笔记 - How polygons are handled internally

    为加深记忆和理解Maya的Polygon,尝试利用空闲时间翻译Maya Api文档相关章节. How polygons are handled internally - 多边形是如何在内部处理的

  4. 【token接口】-jmeter

    token 接口 3步骤 1.登录接口 2.提取登录接口的token 3.http 信息管理头   把提取的cookie传入  就可以了

  5. 理解Python中的__builtin__和__builtins__

    以Python 2.7为例,__builtin__模块和__builtins__模块的作用在很多情况下是相同的. 但是,在Python 3+中,__builtin__模块被命名为builtins. 所 ...

  6. Thunder团队第一周 - Scrum会议2

    Scrum会议2 小组名称:Thunder 项目名称:待定 Scrum Master:李传康 工作照片: 参会成员: 王航:http://www.cnblogs.com/wangh013/ 李传康(M ...

  7. 让我们一起来做最漂亮的Android界面吧!

    让我们一起来做最漂亮的Android界面吧! AndroidiOS产品设计 摘要:如何为Android设备量身定制以打造出最为完美的应用?这是让诸多开发者很是头疼的问题.不同于iOS,Android设 ...

  8. %pylab ipython 中文

    格式:%pylab [--no-import-all] [gui] 该命令会在ipython或notebook环境中自动加载numpy和matplotlib库,跟以下语句功能一致 import num ...

  9. udp->ip & tcp->ip 发送数据包的目的地址的源地址是什么时候确定的?

    udp->ip & tcp->ip udp到ip层是:ip_send_skb tcp到ip层是: ip_queue_xmit 拿tcp为例,在使用[ip_queue_xmit, i ...

  10. TCP/IP协议与OSI协议

    OSI协议是一个理想化的协议,它把网络传输过程分为七层模型,以达到形象化的理解的效果,在实际应用中没有被使用.TCP/IP协议可以看作是它的简化版,是目前应用最广泛的网络协议,许多协议都是以它为基础而 ...