我的编程空间,编程开发者的网络收藏夹
学习永远不晚

【Nginx】nginx目录遍历漏洞

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

【Nginx】nginx目录遍历漏洞

前言

除了X-Forwarded-For伪造客户端IP漏洞,发现还要修改关于目录遍历的漏洞,这里简单记录一下。

1、介绍

Nginx 目录遍历(Nginx Directory Traversal)是一种安全漏洞,通常会影响 Nginx 服务器上的 Web 应用程序。该漏洞允许攻击者通过利用应用程序代码中的错误配置或代码漏洞,来访问系统中未经授权的文件和目录。

简单来说,当 Nginx 服务器上的 Web 应用程序允许用户通过 URL 访问目录和文件,同时将 URL 中的目录和文件名称注入到服务器端的响应中时,就可能存在目录遍历漏洞。攻击者可以通过注入特殊的字符序列来绕过应用程序的访问控制,以访问敏感文件或目录。

2、问题分析介绍

网上有很多描述的示例,可以看Nginx漏洞修复之目录穿越(目录遍历)漏洞复现及修复
注意: 该漏洞主要出现在alias访问静态资源文件的时候。

例如,Nginx配置如下:

location /static {    alias /static/images/;}

一个 web 应用程序允许用户通过 URL 访问静态文件,如下:

http://www.example.com/static/images/picture.jpg

如果攻击者能够使用目录遍历漏洞来访问应用程序中未授权的目录和文件,那么他们可能通过以下 URL 访问静态文件:

http://www.example.com/static../../../../etc/passwd

上述 URL 的作用是向上遍历至根目录,然后访问 /etc/passwd 文件,从而访问到包含用户凭据等敏感信息的文件。

注意:
/static../表示/static/images/..,因为/static被alias替换成了/static/images/

3、解决

根据上面问题说明,我们可以直观的明白问题,主要原因是攻击者可以通过加入..得到/static../,使得实际请求地址变为/static/images/..然后进行非法访问。

修改也很简单,只需要在location的URI末尾加上/就可以,如下:

location /static/ {    alias /static/images/;}

查了些资料,感觉都挺有道理的解释,如下:

3.1 解释:为什么加入/可以解决✨

原本问题出现在/static后面没有结束限制,前面只要匹配上就会被alias替换成相应的URI,然后后面接入的..就会形成新的路径被攻击。

现在加上/来解决,是因为/表示必须是目录,因此在该location中,只会响应/static/及其子目录的请求,而无法获取到网站目录之外的文件

此外,加上/后,URI需要/static/才能被alias替换,无法在里面加入..形成/static../来访问。

3.2 解释2:什么是目录,什么是文件

/结尾表示资源是一个目录,而不是文件。当在Nginx配置location时,如果使用了以斜杠结尾的URI,则Nginx会将其视为目录而不是文件,从而决定以何种方式呈现给客户端。

在Unix/Linux操作系统中,一个文件可以是文本文件、二进制文件、图片、音频等各种类型,而一个目录则是用来存放文件及其他目录的。类似于Windows操作系统中的文件夹,一个目录可以包含多个文件或其他目录,即使目录为空,也会占用一定的磁盘空间,显示为一个文件夹的图标。

在Nginx中,一个URI可以表示一个文件,也可以表示一个目录。如果一个URI以斜杠结尾,Nginx会认为它是一个目录而不是文件。此时就可以通过访问该URI下的Index文件来展示目录的内容了。例如,如果浏览器访问http://example.com/files/,则Nginx会自动在该URI下查找名为index.htmlindex.htmindex.php等文件,并将其展示出来。

4、补充

关于Nginx配置中对于location末尾的“/“的处理

来源地址:https://blog.csdn.net/weixin_42516475/article/details/131109530

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

【Nginx】nginx目录遍历漏洞

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

python 遍历目录

python使用os模块判断文件基础知识#导入os模块import os#判断路径是否存在(True, False)os.path.exists('/tmp/test')#判断目标是否是文件(True, False)os.path.isfi
2023-01-31

Nginx漏洞整改实现限制IP访问&隐藏nginx版本信息

本文介绍了通过修改nginx配置文件,限制IP访问和隐藏nginx版本信息的两种方法。限制IP访问可以通过添加allow和deny指令或使用GeoIP模块实现。隐藏nginx版本信息可以通过添加server_tokensoff指令或使用ngx_http_headers_module或ngx_headers_more模块实现。本文提供了详细的代码示例和注意事项,帮助您实施这些安全措施。
Nginx漏洞整改实现限制IP访问&隐藏nginx版本信息
2024-04-02

WinRAR目录穿越漏洞

该漏洞是由于WinRAR 所使用的一个陈旧的动态链接库UNACEV2.dll所造成的,该动态链接库在2006 年被编译,没有任何的基础保护机制(ASLR,DEP 等)。该动态链接库的作用是处理ACE 格式文件。而在解压处理过程中存在一处目
2023-06-04

shell如何遍历目录处理特定目录

这篇文章主要为大家展示了“shell如何遍历目录处理特定目录”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“shell如何遍历目录处理特定目录”这篇文章吧。需求:删除文件,目录结构为:ip/年份/
2023-06-09

nginx如何开启列目录

这篇文章给大家分享的是有关nginx如何开启列目录的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。nginx开启列目录当你想让nginx作为文件下载服务器存在时,需要开启nginx列目录server { l
2023-06-17

nginx访问认证+目目录浏览

在实际工作中,企业中有些网站,要求使用账号和密码才能访问,如网站后台、phpMyAdmin 、Wiki 平台 等模块ngx_http_auth_basic_module 允许使用“HTTP基本认证”协议验证用户名和密码来限制对资源的访问模块
2023-01-31

python中怎么遍历目录树

这篇“python中怎么遍历目录树”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“python中怎么遍历目录树”文章吧。遍历方
2023-06-30

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录