nginx漏洞大全
字数 1352 2025-08-14 12:04:09

Nginx漏洞大全教学文档

一、Nginx文件名逻辑漏洞 (CVE-2013-4547)

影响版本

  • Nginx 0.8.41 ~ 1.4.3
  • Nginx 1.5.0 ~ 1.5.7

漏洞原理

该漏洞源于Nginx错误地解析请求URI,导致错误获取用户请求的文件名,可能造成权限绕过和代码执行。

漏洞复现步骤

  1. 搭建Nginx 1.4.2环境并配置上传页面
  2. 上传一个名为"1.jpg"的木马文件
  3. 抓包修改,在文件名后添加空格 → "1.jpg "
  4. 访问上传文件地址
  5. 构造特殊URL:http://target/uploadfiles/1.jpg aaaphp
  6. 抓包修改二进制值:
    • 将61 61 61(对应"aaa")改为20 00 2e(对应空格、空字节和点号)

二、用户配置不当导致的解析漏洞

影响范围

  • 与Nginx和PHP版本无关
  • 由PHP配置cgi.fix_pathinfo默认开启导致

漏洞原理

当Nginx看到以.php结尾的文件就会交给PHP处理,类似于IIS7.5的解析漏洞。

漏洞复现

  1. 上传正常图片马(绕过检测)
  2. 访问时在URL后添加/.php,如:upload/test.jpg/.php

三、%00截断解析漏洞

影响版本

  • Nginx 0.5.x, 0.6.x
  • Nginx 0.7.x ≤ 0.7.65
  • Nginx 0.8.x ≤ 0.8.37

漏洞原理

PHP-FastCGI在处理URL中的%00空字节时与FastCGI处理不一致,导致可以在其他文件中插入PHP代码。

利用方式

访问URL格式:目标文件%00.php

四、Nginx越界读取缓存漏洞 (CVE-2017-7529)

影响版本

  • Nginx 0.5.6 - 1.13.2

漏洞详情

当Nginx作为反向代理服务器且开启缓存时,攻击者可构造恶意range请求头,读取服务器缓存文件的头部信息,导致敏感信息泄露。

环境搭建

使用自动化脚本搭建漏洞环境进行测试。

五、CRLF注入漏洞

漏洞原理

CRLF是"回车+换行"(\r\n)的简称。HTTP Header与Body用两个CRLF分隔,攻击者可控制HTTP头中的字符注入恶意换行。

攻击方式

  1. 注入会话Cookie:
    http://target/%0a%0d%0a%0dSet-cookie:JSPSESSID=xxx
    
  2. 注入HTML/XSS:
    http://target/?url=%0a%0d%0a%0d
    

测试payload

使用%0a%0d%0a%0d测试CRLF注入。

六、目录穿越漏洞

漏洞成因

Nginx配置别名(Alias)时忘记添加斜杠/导致。

错误配置示例

location /files {
    alias /home/;
}

利用方式

访问:http://target/files../可穿越到根目录

防护建议

  1. 及时升级Nginx到最新版本
  2. 关闭PHP的cgi.fix_pathinfo选项
  3. 对用户上传文件进行严格验证和限制
  4. 合理配置Nginx的alias和root指令,确保结尾有/
  5. 限制Nginx缓存敏感信息
  6. 对用户输入进行严格过滤,防止CRLF注入
  7. 使用安全配置检查工具定期检查Nginx配置

漏洞修复版本

对于各漏洞,应升级到以下版本或更高:

  • CVE-2013-4547:升级到Nginx 1.4.4或1.5.8+
  • CVE-2017-7529:升级到Nginx 1.13.3+
  • %00截断漏洞:升级到Nginx 0.7.66+或0.8.38+
Nginx漏洞大全教学文档 一、Nginx文件名逻辑漏洞 (CVE-2013-4547) 影响版本 Nginx 0.8.41 ~ 1.4.3 Nginx 1.5.0 ~ 1.5.7 漏洞原理 该漏洞源于Nginx错误地解析请求URI,导致错误获取用户请求的文件名,可能造成权限绕过和代码执行。 漏洞复现步骤 搭建Nginx 1.4.2环境并配置上传页面 上传一个名为"1.jpg"的木马文件 抓包修改,在文件名后添加空格 → "1.jpg " 访问上传文件地址 构造特殊URL: http://target/uploadfiles/1.jpg aaaphp 抓包修改二进制值: 将61 61 61(对应"aaa")改为20 00 2e(对应空格、空字节和点号) 二、用户配置不当导致的解析漏洞 影响范围 与Nginx和PHP版本无关 由PHP配置 cgi.fix_pathinfo 默认开启导致 漏洞原理 当Nginx看到以 .php 结尾的文件就会交给PHP处理,类似于IIS7.5的解析漏洞。 漏洞复现 上传正常图片马(绕过检测) 访问时在URL后添加 /.php ,如: upload/test.jpg/.php 三、%00截断解析漏洞 影响版本 Nginx 0.5.x, 0.6.x Nginx 0.7.x ≤ 0.7.65 Nginx 0.8.x ≤ 0.8.37 漏洞原理 PHP-FastCGI在处理URL中的%00空字节时与FastCGI处理不一致,导致可以在其他文件中插入PHP代码。 利用方式 访问URL格式: 目标文件%00.php 四、Nginx越界读取缓存漏洞 (CVE-2017-7529) 影响版本 Nginx 0.5.6 - 1.13.2 漏洞详情 当Nginx作为反向代理服务器且开启缓存时,攻击者可构造恶意range请求头,读取服务器缓存文件的头部信息,导致敏感信息泄露。 环境搭建 使用自动化脚本搭建漏洞环境进行测试。 五、CRLF注入漏洞 漏洞原理 CRLF是"回车+换行"( \r\n )的简称。HTTP Header与Body用两个CRLF分隔,攻击者可控制HTTP头中的字符注入恶意换行。 攻击方式 注入会话Cookie: 注入HTML/XSS: 测试payload 使用 %0a%0d%0a%0d 测试CRLF注入。 六、目录穿越漏洞 漏洞成因 Nginx配置别名(Alias)时忘记添加斜杠 / 导致。 错误配置示例 利用方式 访问: http://target/files../ 可穿越到根目录 防护建议 及时升级Nginx到最新版本 关闭PHP的 cgi.fix_pathinfo 选项 对用户上传文件进行严格验证和限制 合理配置Nginx的alias和root指令,确保结尾有 / 限制Nginx缓存敏感信息 对用户输入进行严格过滤,防止CRLF注入 使用安全配置检查工具定期检查Nginx配置 漏洞修复版本 对于各漏洞,应升级到以下版本或更高: CVE-2013-4547:升级到Nginx 1.4.4或1.5.8+ CVE-2017-7529:升级到Nginx 1.13.3+ %00截断漏洞:升级到Nginx 0.7.66+或0.8.38+