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

nginx,文件名,逻辑,漏洞,cve,vulhub · 浏览次数 : 264

小编点评

**漏洞简介:** Nginx 文件名逻辑漏洞(CVE-2013-4547)允许攻击者通过上传带空格的文件名的文件,绕过安全限制并访问服务器内部代码。 **漏洞影响:** 攻击者可以使用此漏洞上传恶意文件,例如 PHP 代码,从而执行恶意代码。这可能导致服务器崩溃或其他安全风险。 **漏洞成因:** 该漏洞是由 Nginx 文件名解析逻辑中的错误造成的。当读取文件名时,Nginx遇到「\\0」字符时停止读取内容。当我们上传文件时,文件名可能包含「\\0」字符,导致Nginx停止读取内容并无法解析文件。 **漏洞修复:** 升级到 Nginx 0.8.41 或更高版本,该版本修复了该漏洞。 **漏洞复现步骤:** 1. 攻击者上传一个包含空格的文件名。 2. 在文件名的后添加空格。 3. 在浏览器中访问文件。 4. 观察服务器的错误日志,应该看到攻击者的恶意代码执行。 **漏洞修复建议:** 1. 使用最新的 Nginx 版本。 2. 重命名上传文件以避免包含空格的名称。 3. 使用安全文件上传方式,例如使用 POST 方法提交表单。 4. 避免将恶意代码直接嵌入文件中。

正文

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

漏洞简介

在Nginx 0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7版本中存在错误解析用户请求的url信息,从而导致文件代码执行,权限绕过等问题。

适用环境

Nginx 0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7版本

漏洞成因

漏洞成因大概为Nginx本身并不能解析PHP代码,只能通过加载PHP模块来进行解析代码。通过正则表达式来匹配以.php结尾的请求路径交给PHP模块去解析,但是Nginx在加载文件名时遇到‘\0’便会停止读取‘\0’后面的内容,于是通过以上思路,我们在进行文件上传的时候,文件名应该设置为1.gif,在进行访问时,访问文件应为1.gif'\0'.php,通过正则表达式匹配.php后缀将请求路径交给PHP模块,PHP模块在读取文件名时遇到\0便不会读取后面的.php,从而解析文件为1.gif,但是在实际过程中,Nginx在读取文件名碰到'\0'便会出现报错并停止执行,当我们在'\0'前面加入空格后,Nginx便会跳过报错处理,这样便可以成功利用'\0'进行截断,因此我们的请求路径应该为1.gif[0x20][0x00].php,Nginx在读取文件名为1.gif[0x20],因此我们在上传文件时应该上传文件名1.gif[0x20]
具体解释可查看参考文章

  • '\0'为字符串结束标志,十六进制表示为0x00
  • 空格字符,十六进制表示为0x20

环境搭建

环境路径

/vulhub/nginx/CVE-2013-4547

启动命令

docker-compose up -d

查看环境配置

docker-compose up -d

访问界面
在这里插入图片描述

漏洞复现

构建上传文件内容

<?php phpinfo();?>

对上传文件进行抓包,在文件名后面添加空格
在这里插入图片描述
成功上传
在这里插入图片描述
抓取访问1.gif.php文件的数据包,发送至repeater模块
在这里插入图片描述
在访问路径gif后通过十六进制视角右键点击添加字节添加空格和'\0'的十六进制数
在这里插入图片描述
发送数据包查看回显内容,1.gif[0x20]中的代码已被执行,将phpinfo()代码换成后门代码即可连接后门。
在这里插入图片描述

漏洞总结

利用该漏洞需要满足

  1. Nginx版本满足0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7版本
  2. 文件上传点
  3. 可以上传带空格文件名的文件
  4. 服务器没有做文件重命名

修复建议

  1. 升级最新版Nginx
  2. 过滤空格
  3. 文件重命名
  4. 取消文件目录执行权限
  5. 云存储

参考文献

[1]Nginx 文件名逻辑漏洞(CVE-2013-4547)
[2]Nginx 文件名逻辑漏洞(CVE-2013-4547)漏洞复现
[3]Nginx服务漏洞详解

以上内容仅作学习,如有瑕疵或错误,欢迎指正,感谢阅读。

与Nginx 文件名逻辑漏洞(CVE-2013-4547)(Vulhub)相似的内容:

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

# Nginx 文件名逻辑漏洞(CVE-2013-4547)(Vulhub) ## 漏洞简介 在Nginx 0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7版本中存在错误解析用户请求的url信息,从而导致文件代码执行,权限绕过等问题。 ## 适用环境 Nginx 0.8.41 ~ 1.4

一次nginx文件打开数的问题排查处理

现象:nginx域名配置合并之后,发现consul-template无法完成nginx重载,然后发现需要重启nginx,才能让配置生效。 注意:下次哪个服务有报错,就看重启时所有日志输出,各种情况日志输出。不要忽略细节。很多时候其实已经看到了问题,却没有深入查看问题。 查看进程最大打开文件个数 #c

BI系统打包Docker镜像及部署的技术难度和实现

BI系统打包Docker镜像及部署的技术难度和实现 随着容器化技术盛行,Docker在前端领域也有着越来越广泛的应用;传统的前端部署方式需要我们将项目打包生成一系列的静态文件,然后上传到服务器,配置nginx文件;如果我们使用容器化部署,将部署操作都命令化,集中成一个脚本就可以完成原来复杂的部署过程

[转帖]将nginx.conf文件的内容拆分成多个

nginx的如果有多个server模块都配置在同一个nginx.conf文件会显得比较臃肿,后续维护起来也会比较困难,所以可以将内容写入到多个配置文件中然后在nginx.conf文件中通过include命令引入。 1.nginx.conf配置文件内容 user nginx; worker_proce

[转帖]Nginx 禁止直接访问目录或文件的操作方法

https://www.jb51.net/article/266355.htm 前言 Nginx 默认是不允许列出整个目录的。 如需此功能,打开 nginx.conf 文件或你要启用目录浏览虚拟主机的配置文件,在 location server 或 http 段中加入 1 autoindex on;

Nginx 系列 | (转)Nginx 上传文件:client_max_body_size 、client_body_buffer_size

原文:http://php-note.com/article/detail/488 client_max_body_size client_max_body_size 默认 1M,表示 客户端请求服务器最大允许大小,在“Content-Length”请求头中指定。如果请求的正文数据大于client_

[转帖]Nginx之ngx_http_realip_module

https://www.jianshu.com/p/80a779b3bf20 问题描述 今日在线上查询nginx日志文件的用户真实IP时,发现remote_addr和XFF地址一模一样,这点让我很是不理解,正常来讲remote_addr应该获取到的是上一个节点转发的IP地址,我们却是获得了用户的真实

Nginx log 日志文件较大,按日期生成 实现日志的切割

Nginx日志不处理的话,会一直追加,文件会变得很大,所以理想做法是按天对 Nginx日志进行分割 ![image](https://img2023.cnblogs.com/blog/80824/202302/80824-20230206130157552-1210811098.png) ![ima

[转帖]Centos7 nginx访问日志文件割接

一、yum安装nginx 二、各文件路径( /etc/nginx/nginx.conf) 1、访问日志路径:access_log /var/log/nginx/access.log main; 2、pid路径:pid /run/nginx.pid 三、脚本 1、创建脚本 [root@localhos

Nginx与Tomcat作为前端服务器的性能比较

Nginx与Tomcat作为前端服务器的性能比较 摘要 最近总遇到使用tomcat还是使用nginx进行前端文件访问的争论 想着出差周末在酒店, 可以自己进行一下简单的测试. 希望能够对未来的工作进行一些指导. 测试脚本 30KB 文件测试 ab -c 1000 -n 50000 -k http:/