渗透测试之地基服务篇:服务攻防之中间件Nginx(总)
字数 2451 2025-08-13 21:33:29

Nginx中间件安全攻防详解

一、Nginx简介

1. 什么是Nginx

Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。由俄罗斯程序员Igor Sysoev开发,第一个公开版本0.1.0发布于2004年10月4日。

特点:

  • 轻量级Web服务器/反向代理服务器/电子邮件代理服务器
  • 占有内存少,并发能力强
  • 中国大陆使用nginx的知名网站:百度、京东、新浪、网易、腾讯、淘宝

2. Nginx主要功能

  1. 静态HTTP服务:高效处理静态文件(HTML、图片等)
  2. 反向代理服务器
    • 客户端请求Nginx,Nginx请求应用服务器,返回结果给客户端
    • 保护原始服务器资源
  3. 负载均衡
    • 将用户请求分配给多台服务器处理
    • 支持自带3种负载均衡策略,还有2种常用第三方策略
  4. 虚拟主机
    • 多个网站部署在同一台服务器上
    • 不同域名解析到同一IP但访问不同网站内容
  5. 正向代理
    • 位于客户端和原始服务器之间
    • 提供访问Internet途径,隐藏客户端自身

3. Nginx vs Apache对比

相同点

  • 都是HTTP服务器软件
  • 模块化结构设计
  • 支持PHP、Perl、Python等语言接口
  • 支持正向/反向代理、虚拟主机、URL重写、压缩传输、SSL加密

不同点

  • Apache处理速度慢,占用内存多;Nginx高效低耗
  • Apache模块支持动静态编译;Nginx模块静态编译
  • Nginx对Fcgi支持更好
  • Nginx支持epoll模型,Apache不支持
  • Nginx安装包仅几百KB

Nginx优势

  • 静态文件处理效率高
  • 支持更多并发连接(可达5万)
  • 内存占用极低(1万非活动连接仅占2.5MB)
  • 高稳定性,支持热部署
  • 抗DoS攻击能力强

二、Nginx环境安装

1. 安装方式

  1. 使用集成环境如phpStudy一键安装
  2. 手动安装参考:

2. 配置文件路径

Windows环境:C:\phpStudy\nginx\conf\nginx.conf

三、Nginx安全漏洞与攻防

1. 文件解析漏洞

漏洞描述
对于任意文件名,在后面添加/xxx.php(xxx为任意字符)后,可将文件作为php解析。

漏洞配置

server {
    location ~ \.php$ {
        root /work/www/test;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
        fastcgi_pass unix:/tmp/php-fpm.sock;
    }
}

漏洞原理

  1. 访问/1.jpg/xxx.php时,Nginx看到.php结尾,将路径传递给PHP
  2. PHP寻找xxx.php不存在
  3. cgi.fix_pathinfo默认开启,PHP继续检查路径中存在的文件
  4. 找到.jpg文件并以PHP形式执行

复现步骤

  1. 上传包含PHP代码的图片(如1.jpg)
  2. 访问http://target/1.jpg/xxx.php

修复方案

  1. 设置php.inicgi.fix_pathinfo=0
  2. 禁止上传目录执行脚本权限
  3. 站库分离
  4. 高版本PHP设置security.limit_extensions = .php

2. 目录遍历漏洞

漏洞描述
错误配置导致可遍历服务器目录结构。

漏洞配置
nginx.conf中添加autoindex on

复现步骤

  1. 修改配置添加autoindex on
  2. 访问目录URL即可看到目录列表

修复方案
autoindex on改为autoindex off

3. 空字节任意代码执行漏洞

影响版本

  • Nginx 0.5.*
  • Nginx 0.6.*
  • Nginx 0.7 <= 0.7.65
  • Nginx 0.8 <= 0.8.37

漏洞描述
Nginx遇到%00空字节时与后端FastCGI处理不一致,可通过xxx.jpg%00.php执行图片中的PHP代码。

复现步骤

  1. 创建包含PHP代码的1.jpg文件
  2. 访问1.jpg%00.php
  3. 或通过抓包修改请求为info.jpg..php,在Hex中将.改为00

修复方案
升级Nginx到更高版本(测试1.11.5已修复)

4. CRLF注入漏洞

漏洞描述
Nginx会将$uri进行解码,传入%0a%0d可引入换行符,造成CRLF注入。

漏洞配置

location / {
    return 302 https://$host$uri;
}

漏洞危害

  1. 会话固定攻击
  2. 设置恶意Cookie
  3. HTTP响应头注入
  4. 与XSS结合攻击

复现示例

http://127.0.0.1/%0ASet-cookie:JSPSESSID%3D36
http://127.0.0.1/%0D%0A%0D%0A%3Cimg%20src=1%20onerror=alert(/xss/)%3E

修复方案

  1. 过滤%0a%0d等特殊字符
  2. 正确配置跳转规则

5. 文件名逻辑漏洞(CVE-2013-4547)

影响版本

  • Nginx 0.8.41 ~ 1.4.3
  • Nginx 1.5.0 ~ 1.5.7

漏洞描述
错误解析请求URI,导致可绕过限制执行非PHP文件中的代码。

复现步骤

  1. 上传包含空格的文件名(如1.jpg )
  2. 访问/uploadfiles/2.jpg..php
  3. 在Hex中将2e改为20 00

漏洞原理
Nginx匹配.php$将请求发送给fastcgi,但错误解析文件名,将1.jpg[0x20]当作SCRIPT_FILENAME发送给fastcgi。

修复方案

  1. 去除配置中的$符号
  2. 升级Nginx版本

四、安全加固建议

  1. 及时更新:保持Nginx版本最新
  2. 配置安全
    • 关闭不必要的目录列表功能
    • 限制上传目录执行权限
    • 正确设置PATH_INFO相关参数
  3. 权限控制
    • 实现最小权限原则
    • 站库分离
  4. 输入过滤
    • 过滤特殊字符(%00, %0a, %0d等)
    • 验证文件上传内容
  5. 日志监控
    • 开启详细日志记录
    • 监控异常访问模式

五、总结

Nginx作为高性能Web服务器,在互联网中广泛应用,但其配置不当会导致多种安全风险。安全人员应:

  1. 深入理解Nginx工作原理
  2. 掌握常见漏洞原理及利用方式
  3. 实施有效的安全配置和防护措施
  4. 定期进行安全审计和漏洞扫描

通过合理配置和安全开发实践,可以充分发挥Nginx的高性能优势,同时有效防范安全威胁。

Nginx中间件安全攻防详解 一、Nginx简介 1. 什么是Nginx Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。由俄罗斯程序员Igor Sysoev开发,第一个公开版本0.1.0发布于2004年10月4日。 特点: 轻量级Web服务器/反向代理服务器/电子邮件代理服务器 占有内存少,并发能力强 中国大陆使用nginx的知名网站:百度、京东、新浪、网易、腾讯、淘宝 2. Nginx主要功能 静态HTTP服务 :高效处理静态文件(HTML、图片等) 反向代理服务器 : 客户端请求Nginx,Nginx请求应用服务器,返回结果给客户端 保护原始服务器资源 负载均衡 : 将用户请求分配给多台服务器处理 支持自带3种负载均衡策略,还有2种常用第三方策略 虚拟主机 : 多个网站部署在同一台服务器上 不同域名解析到同一IP但访问不同网站内容 正向代理 : 位于客户端和原始服务器之间 提供访问Internet途径,隐藏客户端自身 3. Nginx vs Apache对比 相同点 : 都是HTTP服务器软件 模块化结构设计 支持PHP、Perl、Python等语言接口 支持正向/反向代理、虚拟主机、URL重写、压缩传输、SSL加密 不同点 : Apache处理速度慢,占用内存多;Nginx高效低耗 Apache模块支持动静态编译;Nginx模块静态编译 Nginx对Fcgi支持更好 Nginx支持epoll模型,Apache不支持 Nginx安装包仅几百KB Nginx优势 : 静态文件处理效率高 支持更多并发连接(可达5万) 内存占用极低(1万非活动连接仅占2.5MB) 高稳定性,支持热部署 抗DoS攻击能力强 二、Nginx环境安装 1. 安装方式 使用集成环境如phpStudy一键安装 手动安装参考: 知乎安装教程 菜鸟教程 2. 配置文件路径 Windows环境: C:\phpStudy\nginx\conf\nginx.conf 三、Nginx安全漏洞与攻防 1. 文件解析漏洞 漏洞描述 : 对于任意文件名,在后面添加 /xxx.php (xxx为任意字符)后,可将文件作为php解析。 漏洞配置 : 漏洞原理 : 访问 /1.jpg/xxx.php 时,Nginx看到 .php 结尾,将路径传递给PHP PHP寻找 xxx.php 不存在 cgi.fix_pathinfo 默认开启,PHP继续检查路径中存在的文件 找到 .jpg 文件并以PHP形式执行 复现步骤 : 上传包含PHP代码的图片(如 1.jpg ) 访问 http://target/1.jpg/xxx.php 修复方案 : 设置 php.ini 中 cgi.fix_pathinfo=0 禁止上传目录执行脚本权限 站库分离 高版本PHP设置 security.limit_extensions = .php 2. 目录遍历漏洞 漏洞描述 : 错误配置导致可遍历服务器目录结构。 漏洞配置 : 在 nginx.conf 中添加 autoindex on 复现步骤 : 修改配置添加 autoindex on 访问目录URL即可看到目录列表 修复方案 : 将 autoindex on 改为 autoindex off 3. 空字节任意代码执行漏洞 影响版本 : Nginx 0.5.* Nginx 0.6.* Nginx 0.7 <= 0.7.65 Nginx 0.8 <= 0.8.37 漏洞描述 : Nginx遇到 %00 空字节时与后端FastCGI处理不一致,可通过 xxx.jpg%00.php 执行图片中的PHP代码。 复现步骤 : 创建包含PHP代码的 1.jpg 文件 访问 1.jpg%00.php 或通过抓包修改请求为 info.jpg..php ,在Hex中将 . 改为 00 修复方案 : 升级Nginx到更高版本(测试1.11.5已修复) 4. CRLF注入漏洞 漏洞描述 : Nginx会将 $uri 进行解码,传入 %0a%0d 可引入换行符,造成CRLF注入。 漏洞配置 : 漏洞危害 : 会话固定攻击 设置恶意Cookie HTTP响应头注入 与XSS结合攻击 复现示例 : 修复方案 : 过滤 %0a%0d 等特殊字符 正确配置跳转规则 5. 文件名逻辑漏洞(CVE-2013-4547) 影响版本 : Nginx 0.8.41 ~ 1.4.3 Nginx 1.5.0 ~ 1.5.7 漏洞描述 : 错误解析请求URI,导致可绕过限制执行非PHP文件中的代码。 复现步骤 : 上传包含空格的文件名(如 1.jpg ) 访问 /uploadfiles/2.jpg..php 在Hex中将 2e 改为 20 00 漏洞原理 : Nginx匹配 .php$ 将请求发送给fastcgi,但错误解析文件名,将 1.jpg[0x20] 当作SCRIPT_ FILENAME发送给fastcgi。 修复方案 : 去除配置中的 $ 符号 升级Nginx版本 四、安全加固建议 及时更新 :保持Nginx版本最新 配置安全 : 关闭不必要的目录列表功能 限制上传目录执行权限 正确设置PATH_ INFO相关参数 权限控制 : 实现最小权限原则 站库分离 输入过滤 : 过滤特殊字符(%00, %0a, %0d等) 验证文件上传内容 日志监控 : 开启详细日志记录 监控异常访问模式 五、总结 Nginx作为高性能Web服务器,在互联网中广泛应用,但其配置不当会导致多种安全风险。安全人员应: 深入理解Nginx工作原理 掌握常见漏洞原理及利用方式 实施有效的安全配置和防护措施 定期进行安全审计和漏洞扫描 通过合理配置和安全开发实践,可以充分发挥Nginx的高性能优势,同时有效防范安全威胁。