Nginx 配置错误导致漏洞

news2025/1/29 14:14:22

文章目录

  • Nginx 配置错误导致漏洞
    • 1. 环境启动
    • 2. CRLF注入漏洞
      • 2.1 漏洞描述
      • 2.2 漏洞原理
      • 2.3 漏洞利用
      • 2.4 修复建议
    • 3. 目录穿越漏洞
      • 3.1 漏洞描述
      • 3.2 漏洞原理
      • 3.3 漏洞利用
      • 3.4 修复建议
    • 4. add_header被覆盖
      • 4.1 漏洞描述
      • 4.2 漏洞原理
      • 4.3 漏洞利用
      • 4.4 修复建议

Nginx 配置错误导致漏洞

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

1. 环境启动

image-20230909105734130

运行成功后,Nginx将会监听8080/8081/8082三个端口,分别对应三种漏洞。

2. CRLF注入漏洞

2.1 漏洞描述

说明内容
漏洞编号
漏洞名称Nginx 配置错误导致CRLF注入漏洞
漏洞评级高危
影响范围
漏洞描述CRLF是”回车+换行”(\r\n)的简称,其十六进制编码分别为0x0d和0x0a(URL编码则是%0d,%0a)
在HTTP协议中,HTTP header是用一个CRLF分隔的,HTTP Body是用两个CRLF分隔的,浏览器就是根据这两个CRLF来取出HTTP内容并显示出来。一旦我们能够控制HTTP消息头中的字符,注入一些恶意的换行,这样我们就能注入一些会话Cookie或者HTML代码。
修复方案输入验证和过滤
输出编码和过滤
HTTP 响应头部处理
更新和升级软件

2.2 漏洞原理

nginx的错误配置如下,该配置的用意是让http请求跳转到https请求。其中$uri就是我们的访问的地址,该变量是可控的。其中https://$host$uri会出现在http响应报文中,这样就可以通过改变$uri来控制http的响应报文。

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

2.3 漏洞利用

正常访问http://192.168.188.185:8080的时候,nginx重定向后,会出现在http响应头中出现Location字段,如下图所示:

image-20230909110431404

当访问http://192.168.188.185:8080/%0d%0awuhu时,响应头如下图所示。 %0d%0a\r\n,也就是换行符,所以在url中加入一个换行符即可将恶意数据写入http响应头。

image-20230909110634556

添加两个换行符可以将数据写入响应体,例如访问 /%0d%0a%0d%0a<script>alert(wuhu)</script>,通过这种注入可实现xss攻击

image-20230909111451941

2.4 修复建议

  1. 输入验证和过滤: 对于用户提供的输入,包括表单提交、URL 参数和 Cookie 值等,进行适当的输入验证和过滤。确保输入不包含任何回车符或换行符,或者对其进行转义或剥离。这样可以防止攻击者在输入中注入 CRLF 字符。
  2. 输出编码和过滤: 在生成 HTTP 响应时,确保对输出进行适当的编码和过滤。避免直接将用户提供的内容插入到响应头部中,以防止 CRLF 注入。建议使用合适的编码函数或库来处理输出,确保其中不包含任何特殊字符。
  3. 更新和升级软件: 确保您的 Web 服务器软件(如 Nginx)以及相关的组件和库已经升级到最新版本。软件更新通常包括修复安全漏洞的补丁,有助于防止 CRLF 注入漏洞的利用。
  4. HTTP 响应头部处理: 在配置服务器时,务必谨慎处理 HTTP 响应头部。确保所有响应头部都是由服务器生成,并且不受用户输入的影响。避免将用户提供的内容作为响应头部的一部分。

3. 目录穿越漏洞

3.1 漏洞描述

当攻击者能够控制 Nginx 服务器的一个参数(例如 HTTP 请求中的某个参数),并且使用该参数从服务器获取一个文件时,如果未对该参数进行适当的过滤或校验,则攻击者可以通过构造指向其他路径的符号链接或特殊字符序列,来访问服务器上不应被访问的文件或目录。

3.2 漏洞原理

Nginx在配置别名(Alias)的时候,如果忘记加/,将造成一个目录穿越漏洞。在下面配置中/files在匹配字符串的时候可以匹配到 /files..,而 /files..转化成别名时就会变成 /home/..,这样就可以访问到home目录的上一级目录。

location /files {
    alias /home/;
}

/files改成 /files/即可修改该漏洞。

3.3 漏洞利用

访问http://192.168.188.185:8081/files../

image-20230909114610988

3.4 修复建议

  • 审查和更新 Nginx 配置:仔细审查 Nginx 的配置文件,特别关注代理和重定向规则,确保没有任何配置错误。确保将请求 URL 和路径正确传递给后端服务器,避免可能导致目录穿越的配置错误。
  • 输入验证和过滤:对收到的所有用户输入进行严格的验证和过滤,特别是涉及到文件路径、URL 参数等与文件系统相关的输入。验证用户输入是否符合预期的格式和范围,排除任何可能的恶意输入。
  • 规范化路径:在处理用户输入之前,对路径进行规范化处理,以确保路径格式的一致性,并移除任何冗余或不必要的字符。使用可靠的路径规范化函数或库,避免路径解析中的任何安全漏洞。
  • 限制访问权限:确保服务器上的文件和目录设置了正确的访问权限。对于敏感文件和目录,只授予必要的最小权限,并限制对它们的访问。这样即使目录穿越成功,攻击者也无法获取敏感信息。

4. add_header被覆盖

4.1 漏洞描述

在 Nginx 配置中,add_header 指令用于添加响应头信息。该指令的作用是在响应中添加自定义的 HTTP 头部,以便向客户端传递特定的信息。然而,如果在配置中存在错误或竞争条件,攻击者可能会利用这种情况来覆盖或篡改 add_header 指令的内容。

4.2 漏洞原理

Nginx的配置文件分为Server、Location、If等一些配置块,并且存在包含关系,和编程语言比较类似。如果在外层配置的一些选项,是可以被继承到内层的。

但这里的继承也有一些特性,比如add_header,子块中配置后将会覆盖父块中的add_header添加的所有HTTP头,造成一些安全隐患。

如下列代码,整站(父块中)添加了CSP头:

add_header Content-Security-Policy "default-src 'self'";
add_header X-Frame-Options DENY;

location = /test1 {
    rewrite ^(.*)$ /xss.html break;
}

location = /test2 {
    add_header X-Content-Type-Options nosniff;
    rewrite ^(.*)$ /xss.html break;
}

补充:

  • CSP(Content Security Policy)头是一种 HTTP 响应头部,用于指定浏览器加载和执行网页内容时的安全策略。它提供了一种机制,让网站管理员能够控制网页中可执行的内容来源以及允许的操作。

  • CSP 头通过定义一系列的策略指令来限制浏览器执行的特定操作,包括脚本执行、CSS 样式应用、字体加载、图片显示等。这些策略指令可以防止跨站点脚本攻击(XSS)、点击劫持、数据泄露等安全威胁。

  • default-src:指定默认情况下允许加载内容的来源。

4.3 漏洞利用

image-20230909115920732

test1

image-20230909120017210

/test2的location中又添加了X-Content-Type-Options头,导致父块中的add_header全部失效,/test2将Content-Security-Policy(内容安全策略)头覆盖。

image-20230909120253429

此时,test2的csp就完全失效了,成功触发XSS:

http://192.168.188.185:8082/test2#<img src=1 onerror=alert(wuhu)>

在IE浏览器中测试

image-20230909121103420

test1也可以

image-20230909121028430

但是在火狐浏览器,Edge浏览器,谷歌浏览器中都无法触发XSS。

image-20230909120823321

4.4 修复建议

  • 检查配置文件:仔细检查 Nginx 的配置文件,特别是涉及到 add_header 指令的部分。确保没有重复的 add_header 指令或者其他指令导致 add_header 被覆盖。

  • 使用 always 参数:在 add_header 指令中使用 always 参数,例如 add_header X-Frame-Options "SAMEORIGIN" always;。这样可以确保在所有情况下都会发送相应的头部,包括错误页面和重定向。

  • 使用不同的名字:将 add_header 指令的名称更改为独特的名称,以避免与其他指令冲突。例如,将其命名为 my_add_header。

  • 块顺序:确保 Nginx 配置文件中加载模块的顺序正确。有些模块可能会修改或覆盖其他模块设置的头部值。将具有更高优先级的模块指令放在较低优先级模块指令之前,以确保正确的设置。

  • 使用 location 块:将 add_header 指令放置在适当的 location 块中。根据需要,选择合适的 location 来添加头部,以确保正确地应用到特定的请求或响应。

  • 配置测试:在修改配置文件后,重新加载 Nginx 服务,并进行测试以确保修复生效。可以通过发送请求并检查响应头部来验证 add_header 是否正确设置。

  • 使用 location 块:将 add_header 指令放置在适当的 location 块中。根据需要,选择合适的 location 来添加头部,以确保正确地应用到特定的请求或响应。

  • 配置测试:在修改配置文件后,重新加载 Nginx 服务,并进行测试以确保修复生效。可以通过发送请求并检查响应头部来验证 add_header 是否正确设置。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/995801.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

矩阵论—线性子空间、生成子空间、核空间、零度、子空间的交与和、直和

线性子空间定义 如果&#xff0c;V1称为平凡子空间&#xff0c;否则称为非平凡子空间。 生成子空间 核空间、零度 解&#xff1a; rank(A)2; n(A)N-rank(A)3-21&#xff0c;这里N表示的是未知量的个数。 n(A)也可以理解为基础解系的个数&#xff0c;即基础解系中有几个向量…

基于TensorFlow 2.3.0 的手势识别系统设计

一、开发环境 Windows 10PyCharm 2021.3.2Python 3.7TensorFlow 2.3.0 二、制作数据集&#xff0c;作者使用了10个类别的手势数集据 三、开始训练模型&#xff0c;作者使用自己开发的软件进行训练模型&#xff0c;方便快捷。软件介绍及下载地址&#xff1a; 手把手教你使用T…

基于SpringBoot+微信小程序的智慧医疗线上预约问诊小程序

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 近年来&#xff0c;随…

【Python】Python实现五子棋游戏(带可视化界面)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

信息安全技术 办公设备安全测试方法

声明 本文是学习GB-T 38558-2020 信息安全技术 办公设备安全测试方法. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 办公设备安全测试方法范围 本标准规定了办公设备安全技术要求和安全管理功能要求的测试方法。 本标准适用于测试机构、办公设备厂…

云备份服务端——服务器业务处理模块以及网络通信模块

我们这里由于网络通信模块借助httplib库来完成&#xff0c;因此两个模块合并到一起完成&#xff0c;不熟悉httplib库的老铁可以再看看我之前的文章 云备份——第三方库使用介绍&#xff08;下&#xff09;_爱吃鱼的修猫的博客-CSDN博客 一&#xff0c;业务处理模块设计 我们这里…

UMA 2 - Unity Multipurpose Avatar☀️七.UMA API介绍 : 基本API与保存加载配置

文章目录 🟥 UMA Data DNA参数引用位置🟥 UMA API介绍🟥 UMA Data DNA参数引用位置 我们想通过代码去控制如图所示参数,达到捏脸的目的.下面就是可以控制的代码: _dna["headSize"].Set(1); _avatar.BuildCharacter();我们观察发现操控代码类似Material去设置…

【MySQL】一文详解MySQL,从基础概念到调优

作者简介 前言 博主之前写过一个MySQL的系列&#xff0c;从基础概念、SQL到底层原理、优化&#xff0c;专栏地址&#xff1a; https://blog.csdn.net/joker_zjn/category_12305262.html?spm1001.2014.3001.5482 本文会是这个系列的清单&#xff0c;拉通来聊一聊Mysql从基础概…

MT3905替代方案 (NDP23511KC)完全替代MT3905

NDP23511KC效率高&#xff0c; 单片同步降压DC/DC 变频器采用恒频&#xff0c; 平均电流模式控制架构。 能够提供高达5.0A的峰值负载 具有优良的线路和负载调节。的 设备从输入电压工作 范围为4.6V至30V&#xff0c;并提供一个 输出电压从3.3V到25V可调。 NDP23511KC特…

2023数学建模国赛A题定日镜场的优化设计- 全新思路及代码

背景资料关键信息和要点如下&#xff1a; 定日镜&#xff1a;塔式太阳能光热发电站的基本组件&#xff0c;由纵向转轴和水平转轴组成&#xff0c;用于反射太阳光。 定日镜场&#xff1a;由大量的定日镜组成的阵列。 集热器&#xff1a;位于吸收塔顶端&#xff0c;用于收集太…

UG\NX CAM二次开发 设置几何体自动毛坯 UF_CAM_set_auto_blank

文章作者:代工 来源网站:NX CAM二次开发专栏 简介: UG\NX CAM二次开发 设置几何体自动毛坯 UF_CAM_set_auto_blank 效果: 代码: void MyClass::do_it(){ //获取加工环境tagtag_t setup_tag=NULL_TAG;UF_SETUP_ask_setup(&setup_tag);//返回当前工序导航器…

python3网络爬虫--2323爬取B站视频弹幕 解so文件(附源码)

文章目录 一&#xff0e;前言二&#xff0e;配置Protobuf 环境&生成编译文件1&#xff0e;配置Protobuf 环境2&#xff0e;生成编译文件 三&#xff0e;解析弹幕四&#xff0e;自动解析弹幕五&#xff0e;总结六&#xff0e;参考 本篇博文记录一下爬取B站弹幕的主要思路以及…

NFS文件共享系统(K8S)

概述 部署NFS文件共享服务&#xff0c;为Kubernetes提供NFS共享做准备 步骤 安装软件 yum -y install nfs-utils 配置NFS(exports) 编辑 /etc/exports 文件。每一行代表一个共享目录&#xff0c;描述目录如何共享 编写规则&#xff1a; # <共享目录> [客户端1 选项…

Spring修炼之路--基础知识

一、核心概念 1.1软件模块化 软件模块化是一种软件开发的设计模式&#xff0c;它将一个大型的软件系统划分成多个独立的模块&#xff0c;每个模块都有自己的功能和接口&#xff0c;并且能够与其他模块独立地工作1. 软件模块化设计可以使软件不至于随着逐渐变大而变得不可控&am…

​ICCV 2023 | 图像分割全新思路:仅用文本描述实现图像分割!

论文链接&#xff1a; https://arxiv.org/pdf/2308.14575.pdf 代码链接&#xff1a; https://github.com/fawnliu/TRIS 基本概念&#xff1a;Referring Image Segmentation&#xff08;RIS&#xff09;是一种图像分割技术&#xff0c;旨在根据自然语言表达来标记图像或视频中表…

教师节 | 拓世AI这样用,教案不再费神,辅助教师教学全流程

随着科技的不断进步&#xff0c;人工智能和大数据技术所带来的新的信息技术革命在每个细分领域生根发芽&#xff0c;教育领域也不例外。这个新时代的教育充满了挑战和机遇&#xff0c;科技的发展正引领着教育走向一个全新的境界。 教育是社会进步的重要引擎&#xff0c;教师是…

Ubuntu23.10将推出全磁盘加密功能,提高系统安全性

Canonical 宣布其即将推出的 Ubuntu 23.10&#xff08;Mantic Minotaur&#xff09;将引入基于 TPM 的全磁盘加密的初步支持。这个特性将利用系统可信平台模块&#xff08;TPM&#xff09;&#xff0c;在系统级别上进行全磁盘加密&#xff0c;从而提高系统的安全性。 但需要注…

【zip密码】7z分卷压缩如何加密?

想要压缩的文件过大&#xff0c;想要在压缩过程中将文件拆分为几个压缩包并且同时为所有压缩包设置加密应该如何设置&#xff1f; 想要分卷压缩文件并加密一起操作就可以完成了&#xff0c;设置方法如下&#xff1a; 打开7-zip&#xff0c;选中需要压缩的文件&#xff0c;选择…

大数据技术之Hadoop:提交MapReduce任务到YARN执行(八)

目录 一、前言 二、示例程序 2.1 提交wordcount示例程序 2.2 提交求圆周率示例程序 三、写在最后 一、前言 我们前面提到了MapReduce&#xff0c;也说了现在几乎没有人再写MapReduce代码了&#xff0c;因为它已经过时了。然而不写代码不意味着它没用&#xff0c;当下很火…

两性养生网站源码 生活类减肥网站源码 健康网模板源码 支持QQ登录和百度主动推送

本套模板非常适合生活类&#xff0c;两性类&#xff0c;减肥类等等类型的网站&#xff0c;这类型网站比较好做流量&#xff0c;因为客户群体众多&#xff0c; 可以自行改内容为其他类型网站模板总体非常简洁漂亮&#xff0c;配色合理&#xff0c;视觉舒服&#xff0c;并且配合…