Web中间件漏洞之Nginx篇
字数 1349 2025-08-10 22:07:53
Nginx中间件漏洞分析与防护指南
一、Nginx简介
Nginx是一款轻量级的Web服务器、反向代理服务器及电子邮件(IMAP/POP3)代理服务器,采用BSD-like协议发行。其主要特点包括:
- 内存占用少
- 并发能力强
- 性能优异,在同类型网页服务器中表现突出
二、文件解析漏洞
漏洞介绍及成因
Nginx存在对任意文件名添加.php后缀的解析漏洞。例如:
- 原文件名:
test.jpg - 攻击方式:
test.jpg/x.php
漏洞复现步骤
- 在网站根目录下创建
i.gif文件,内容为<?php phpinfo(); ?> - 尝试访问
192.168.139.129:100/i.gif.2.php,初始无法解析 - 修改
/etc/php5/fpm/pool.d/www.conf文件:- 将
security.limit_extensions = .php中的.php删除
- 将
- 再次访问,成功解析PHP代码
防护措施
-
修改
php.ini文件:cgi.fix_pathinfo = 0(这样在解析类似
1.php/1.jpg的路径时,若1.jpg不存在会返回404) -
修改
/etc/php5/fpm/pool.d/www.conf:security.limit_extensions = .php(严格限制可解析的扩展名)
三、目录遍历漏洞
漏洞简介及成因
Nginx的目录遍历属于配置问题,错误配置可导致:
- 目录遍历
- 源码泄露
漏洞复现步骤
- 初始访问
test目录无法打开 - 修改
/etc/nginx/sites-available/default文件:location /test { autoindex on; } - 再次访问,可列出目录内容
防护措施
将autoindex on改为:
autoindex off;
四、CRLF注入漏洞
漏洞简介及成因
CRLF是"回车+换行"(\r\n)的简称。HTTP Header与Body用两个CRLF分隔。通过控制HTTP消息头中的字符,注入恶意换行可导致:
- 会话cookie注入
- HTML代码注入
漏洞复现
- 访问页面并抓包
- 在请求中添加:
(%0d%0a是CRLF的URL编码)/%0d%0a%0d%0a
防护措施
修改Nginx配置文件/etc/nginx/conf.d/error1.conf,使用不解码的URL跳转。
五、目录穿越漏洞
漏洞介绍及成因
当Nginx作为反向代理时,若静态文件存储在/home/下,而访问URL需要输入files,且配置中/files没有用/闭合,可导致穿越至上层目录。
漏洞复现
- 正常访问:
http://192.168.139.128:8081/files/ - 目录穿越访问:
可访问上层目录内容http://192.168.139.128:8081/files../
防护措施
修改Nginx配置文件/etc/nginx/conf.d/error2.conf,确保/files使用/闭合:
location /files/ {
...
}
六、总结防护建议
-
文件解析防护:
- 严格限制PHP解析扩展名
- 设置
cgi.fix_pathinfo = 0
-
目录遍历防护:
- 禁用不必要的
autoindex功能 - 限制敏感目录访问
- 禁用不必要的
-
CRLF注入防护:
- 使用不解码的URL跳转
- 过滤特殊字符
-
目录穿越防护:
- 确保location路径使用
/闭合 - 限制访问目录范围
- 确保location路径使用
-
其他建议:
- 定期更新Nginx版本
- 最小化权限原则
- 审计配置文件安全性
- 启用适当的访问日志记录
通过以上措施,可有效防范常见的Nginx中间件安全漏洞,保障Web服务的安全稳定运行。