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

漏洞复现步骤

  1. 在网站根目录下创建i.gif文件,内容为<?php phpinfo(); ?>
  2. 尝试访问192.168.139.129:100/i.gif.2.php,初始无法解析
  3. 修改/etc/php5/fpm/pool.d/www.conf文件:
    • security.limit_extensions = .php中的.php删除
  4. 再次访问,成功解析PHP代码

防护措施

  1. 修改php.ini文件:

    cgi.fix_pathinfo = 0
    

    (这样在解析类似1.php/1.jpg的路径时,若1.jpg不存在会返回404)

  2. 修改/etc/php5/fpm/pool.d/www.conf

    security.limit_extensions = .php
    

    (严格限制可解析的扩展名)

三、目录遍历漏洞

漏洞简介及成因

Nginx的目录遍历属于配置问题,错误配置可导致:

  • 目录遍历
  • 源码泄露

漏洞复现步骤

  1. 初始访问test目录无法打开
  2. 修改/etc/nginx/sites-available/default文件:
    location /test {
        autoindex on;
    }
    
  3. 再次访问,可列出目录内容

防护措施

autoindex on改为:

autoindex off;

四、CRLF注入漏洞

漏洞简介及成因

CRLF是"回车+换行"(\r\n)的简称。HTTP Header与Body用两个CRLF分隔。通过控制HTTP消息头中的字符,注入恶意换行可导致:

  • 会话cookie注入
  • HTML代码注入

漏洞复现

  1. 访问页面并抓包
  2. 在请求中添加:
    /%0d%0a%0d%0a
    
    (%0d%0a是CRLF的URL编码)

防护措施

修改Nginx配置文件/etc/nginx/conf.d/error1.conf,使用不解码的URL跳转。

五、目录穿越漏洞

漏洞介绍及成因

当Nginx作为反向代理时,若静态文件存储在/home/下,而访问URL需要输入files,且配置中/files没有用/闭合,可导致穿越至上层目录。

漏洞复现

  1. 正常访问:
    http://192.168.139.128:8081/files/
    
  2. 目录穿越访问:
    http://192.168.139.128:8081/files../
    
    可访问上层目录内容

防护措施

修改Nginx配置文件/etc/nginx/conf.d/error2.conf,确保/files使用/闭合:

location /files/ {
    ...
}

六、总结防护建议

  1. 文件解析防护

    • 严格限制PHP解析扩展名
    • 设置cgi.fix_pathinfo = 0
  2. 目录遍历防护

    • 禁用不必要的autoindex功能
    • 限制敏感目录访问
  3. CRLF注入防护

    • 使用不解码的URL跳转
    • 过滤特殊字符
  4. 目录穿越防护

    • 确保location路径使用/闭合
    • 限制访问目录范围
  5. 其他建议

    • 定期更新Nginx版本
    • 最小化权限原则
    • 审计配置文件安全性
    • 启用适当的访问日志记录

通过以上措施,可有效防范常见的Nginx中间件安全漏洞,保障Web服务的安全稳定运行。

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 文件: (这样在解析类似 1.php/1.jpg 的路径时,若 1.jpg 不存在会返回404) 修改 /etc/php5/fpm/pool.d/www.conf : (严格限制可解析的扩展名) 三、目录遍历漏洞 漏洞简介及成因 Nginx的目录遍历属于配置问题,错误配置可导致: 目录遍历 源码泄露 漏洞复现步骤 初始访问 test 目录无法打开 修改 /etc/nginx/sites-available/default 文件: 再次访问,可列出目录内容 防护措施 将 autoindex on 改为: 四、CRLF注入漏洞 漏洞简介及成因 CRLF是"回车+换行"( \r\n )的简称。HTTP Header与Body用两个CRLF分隔。通过控制HTTP消息头中的字符,注入恶意换行可导致: 会话cookie注入 HTML代码注入 漏洞复现 访问页面并抓包 在请求中添加: (%0d%0a是CRLF的URL编码) 防护措施 修改Nginx配置文件 /etc/nginx/conf.d/error1.conf ,使用不解码的URL跳转。 五、目录穿越漏洞 漏洞介绍及成因 当Nginx作为反向代理时,若静态文件存储在 /home/ 下,而访问URL需要输入 files ,且配置中 /files 没有用 / 闭合,可导致穿越至上层目录。 漏洞复现 正常访问: 目录穿越访问: 可访问上层目录内容 防护措施 修改Nginx配置文件 /etc/nginx/conf.d/error2.conf ,确保 /files 使用 / 闭合: 六、总结防护建议 文件解析防护 : 严格限制PHP解析扩展名 设置 cgi.fix_pathinfo = 0 目录遍历防护 : 禁用不必要的 autoindex 功能 限制敏感目录访问 CRLF注入防护 : 使用不解码的URL跳转 过滤特殊字符 目录穿越防护 : 确保location路径使用 / 闭合 限制访问目录范围 其他建议 : 定期更新Nginx版本 最小化权限原则 审计配置文件安全性 启用适当的访问日志记录 通过以上措施,可有效防范常见的Nginx中间件安全漏洞,保障Web服务的安全稳定运行。