Nginx 解析漏洞

文章目录

  • [Nginx 解析漏洞](#Nginx 解析漏洞)
    • [1. 空字节漏洞](#1. 空字节漏洞)
      • [1.1 漏洞描述](#1.1 漏洞描述)
      • [1.2 漏洞复现](#1.2 漏洞复现)
      • [1.3 修复方案](#1.3 修复方案)
    • [2. Nginx 解析漏洞复现](#2. Nginx 解析漏洞复现)
      • [2.1 漏洞描述](#2.1 漏洞描述)
      • [2.2 漏洞复现](#2.2 漏洞复现)
      • [2.3 获取GetShell](#2.3 获取GetShell)
      • [2.4 修复方案](#2.4 修复方案)
    • [3. Nginx 文件名逻辑漏洞](#3. Nginx 文件名逻辑漏洞)
      • [3.1 漏洞描述](#3.1 漏洞描述)
      • [3.2 漏洞原理](#3.2 漏洞原理)
      • [3.3 漏洞复现](#3.3 漏洞复现)
        • [3.3.1 环境启动](#3.3.1 环境启动)
        • [3.3.2 漏洞验证](#3.3.2 漏洞验证)
      • [3.4 漏洞利用](#3.4 漏洞利用)
      • [3.5 修复方案](#3.5 修复方案)

Nginx 解析漏洞

1. 空字节漏洞

1.1 漏洞描述

说明 内容
漏洞编号
漏洞名称 Nginx解析漏洞
漏洞评级 高危
影响范围 0.5.,0.6., 0.7 <= 0.7.65, 0.8 <= 0.8.37
漏洞描述 当使用PHP-FastCGI执行PHP时,遇到url里面存在%00空字节时与FastCGI的处理不一致,导致可在非PHP文件中嵌入PHP代码,通过访问url+%00.PHP来执行其中的PHP代码
修复方案 升级组件

1.2 漏洞复现

启动环境

访问页面

看到如下页面及启动成功

在nginx_0.7.65目录下的html目录中有一个info.png

从后缀名来看这个是一个图片,但是如果从文件内容的角度来看是一个phpinfo。

这个图片是无法直接进行访问的。

使用bp抓取数据包,然后在文件后缀名末尾添加%00.php

该文件即可执行。

解析 :此处这个漏洞属于00截断漏洞 ,文件系统在处理寻找文件的时候会有偏差,PHP语言的底层是通过C语言来实现的,C语言字符串结束是00。PHP解释引擎在访问这个文件的时候,遇到了00,认为该文件在%00处就结束了,所以读取的是png文件,但是是以php方式执行的

1.3 修复方案

为了修复此漏洞,可以考虑以下方案:

  • 更新 NGINX 版本: 确保您的 NGINX 版本已升级到最新版本。NGINX 团队通常会修复安全漏洞,并发布相关的更新补丁。及时更新可帮助解决已知的漏洞。
  • 安装安全模块: NGINX 支持许多第三方安全模块,例如 ModSecurity 或 NAXSI。这些模块可以帮助检测和阻止恶意请求,包括空字节注入攻击。
  • 过滤输入: 对于用户提供的输入,进行适当的输入验证和过滤。对于文件路径、文件名等参数,应该对空字节进行处理或过滤,以防止攻击者利用空字节绕过文件类型检查。

2. Nginx 解析漏洞复现

链接地址:Vulhub - 用于漏洞环境的 Docker-Compose 文件

2.1 漏洞描述

说明 内容
漏洞编号
漏洞名称 Nginx解析漏洞
漏洞评级 高危
影响范围 Nginx 1.x 最新版,PHP 7.x最新版
漏洞描述 该漏洞与Nginx、php版本无关,属于用户配置不当造成的解析漏洞。
修复方案 升级组件

2.2 漏洞复现

环境启动

访问页面

上传一个php文件,页面显示我们只能上传图像文件。

修改文件后缀名,Content-Type类型为image/png,最后在文件内容的头部添加GIF89a。

上传成功,并且显示出了文件的上传路径。

页面访问上传路径,但是文件并没有执行。

增加后缀,被解析成PHP文件:/.php

漏洞原因:开启了cgi.fix_pathinfo选项后,本身是一个png文件,但是加上/.php后会把整个文件当中php文件来执行。

2.3 获取GetShell

还可以上传一个一句话木马

使用bp抓取数据包并进行修改

然后使用蚁剑进行连接即可。

2.4 修复方案

  • 将php.ini文件中的cgi.fix_pathinfo的值设为0

3. Nginx 文件名逻辑漏洞

链接地址:Vulhub - Docker-Compose file for vulnerability environment

3.1 漏洞描述

说明 内容
漏洞编号 CVE-2013-4547
漏洞名称 Nginx 文件名逻辑漏洞
漏洞评级 高危
影响范围 Nginx 0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7
漏洞描述 该漏洞存在于Nginx于PHP的配置上,如果配置不当,容易使得Nginx实现对%00等特殊字符解析出现问题,造成Nginx将特殊构造的URL交给PHP来进行处理,而Nginx则因为特殊字符的问题,无法接收含有特殊字符的URL或者是造成了在%00位置处的截断,从而造成了客户上传的文件被当作PHP代码来解析。
修复方案 升级组件

3.2 漏洞原理

主要原因是错误地解析了请求的URI,错误地获取到用户请求的文件名,导致出现权限绕过、代码执行的连带影响。

比如,Nginx匹配到.php结尾的请求,就发送给fastcgi进行解析,常见的写法如下:

nginx 复制代码
location ~ \.php$ {
    include        fastcgi_params;

    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  /var/www/html$fastcgi_script_name;
    fastcgi_param  DOCUMENT_ROOT /var/www/html;
}

正常情况下(关闭pathinfo的情况下),只有.php后缀的文件才会被发送给fastcgi解析。而存在Nginx 文件名逻辑漏洞的情况下,我们请求1.gif[0x20][0x00].php,这个URI可以匹配上正则\.php$,可以进入这个Location块;但进入后,Nginx却错误地认为请求的文件是1.gif[0x20],就设置其为SCRIPT_FILENAME的值发送给fastcgi。

fastcgi根据SCRIPT_FILENAME的值进行解析,最后造成了解析漏洞。

3.3 漏洞复现

3.3.1 环境启动

环境启动后,访问http://your-ip:8080/即可看到一个上传页面。

上传一个php文件,页面显示我们上传的文件类型不支持。这个环境是黑名单验证,我们无法上传php后缀的文件。

3.3.2 漏洞验证

开启Burpsuit抓取数据包,截获文件上传的数据包后,修改文件后缀名为gif格式,然后在文件后缀名的后面添加一个空格,这样,文件上传后也会出现一个空格。

访问http://your-ip:8080/uploadfiles/wuhu.gif[0x20][0x00].php,在bp中将文件修改为uploadfiles/wuhu.gif[0x20][0x00].php。这里的[0x20]为空格,[0x00]为\0起到了截断的作用。

即可发现PHP已被解析:

3.4 漏洞利用

上传木马文件

在文件的后缀名后面添加一个空格

访问上传文件 shell.jpg[0x20][0x00].php时,将文件修改为 shell.jpg[0x20][0x00].php,[0x20]为空格,[0x00]为\0(起到截断作用)

命令执行成功

3.5 修复方案

  • 更新 Nginx 版本: 确保 Nginx 版本已升级到最新版本。Nginx 团队通常会修复安全漏洞,并发布相关的更新补丁。及时更新可帮助解决已知的漏洞。该问题已经在 Nginx 1.5.7 和 1.4.4 版本中修复。

补丁链接地址

相关推荐
叶落阁主13 小时前
Tailscale 完全指南:从入门到私有 DERP 部署
运维·安全·远程工作
十二74020 小时前
前端缓存踩坑实录:从版本号管理到自动化构建
前端·javascript·nginx
可观测性用观测云2 天前
云原生网关 Ingress-Nginx 链路追踪实战:OpenTelemetry 采集与观测云集成方案
nginx·kubernetes
用户962377954483 天前
DVWA 靶场实验报告 (High Level)
安全
数据智能老司机3 天前
用于进攻性网络安全的智能体 AI——在 n8n 中构建你的第一个 AI 工作流
人工智能·安全·agent
数据智能老司机3 天前
用于进攻性网络安全的智能体 AI——智能体 AI 入门
人工智能·安全·agent
用户962377954483 天前
DVWA 靶场实验报告 (Medium Level)
安全
red1giant_star3 天前
S2-067 漏洞复现:Struts2 S2-067 文件上传路径穿越漏洞
安全
用户962377954483 天前
DVWA Weak Session IDs High 的 Cookie dvwaSession 为什么刷新不出来?
安全
闲云一鹤4 天前
nginx 快速入门教程 - 写给前端的你
前端·nginx·前端工程化