Nginx常见漏洞利用与安全加固方法

yvette2023-11-16文章来源:SecHub网络安全社区


Nginx常见漏洞利用与安全加固方法

漏洞一:Nginx低版本-文件类型错误解析漏洞

漏洞分析

Nginx+PHP的服务器中,如果PHP的配置里cgi.fix_pathinfo=1那么就会产生一个漏洞。

当访问:http://192.168.1.101/phpinfo.jpg/1.php

经过解析会将phpinfo.jpg作为PHP文件来解析(虽然上传了一个jpg图片,但是nginx会把该图片当作php来解析)

漏洞危害

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

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

解决方案

在Nginx配置文件中添加以下代码:

if ( $fastcgi_script_name ~ \..*\/.*php ) {
	return 403;
}

这行代码的意思是当匹配到类似phpinfo.jpg/1.php的URL时,将返回403错误代码。

漏洞二:Nginx目录穿越(目录遍历)漏洞

注意: 该漏洞主要出现在alias访问静态资源文件的时候。

# 例如,Nginx配置如下:

location /static {
  alias /static/images/;
}

漏洞分析

  • 一个 web 应用程序允许用户通过 URL 访问静态文件,如下:http://sec.com/static/images/picture.jpg

  • 攻击者使用目录遍历漏洞来访问应用程序中未授权的目录和文件,他们可通过以下 URL 访问静态文件:

http://www.example.com/static**../../../..**/etc/passwd

  • 注意:…/ 的作用是返回上一级

上述 URL 的作用是向上遍历至根目录,然后访问 /etc/passwd 文件,从而访问到包含用户凭据等敏感信息的文件。

  • 注意:alias别名

/static…/表示/static/images/…,因为/static被alias替换成了/static/images/。

解决方案

主要原因是攻击者可以通过加入…得到/static…/,使得实际请求地址变为/static/images/…然后进行非法访问。

修改也很简单,只需要在location的URI末尾加上/就可以,如下:

location /static**/** {

  alias /static/images/;

}

分析:加上/后,URI需要/static/才能被alias替换,无法在里面加入…形成/static…/来访问。

漏洞三:Nginx版本信息泄露漏洞

攻击者在对目标服务器进行渗透攻击前,第一步就是信息收集阶段,通过各种手段获取到目标的信息,如获取目标服务器的系统版本、Web服务、中间件、数据库的类型及相关信息,这些信息将直接关系到攻击者下一步采取的攻击手段。

漏洞分析

在请求的响应信息中显示Nginx版本信息

漏洞影响

攻击者可能使用泄露的版本信息来确定该版本服务器有哪些安全漏洞,据此展开进一步的攻击。

解决方案

server_tokens是nginx在ngx_http_core_module中提供的一个功能,可以用来隐藏nginx版本号信息。

给nginx新增一个安全相关的配置文件security.conf,文件内新增server_tokens off;,再reload一下nginx服务即可。

[root@elk ~]# cat /etc/nginx/conf.d/security.conf

server_tokens off; ##隐藏nginx版本信息