nginx $uri导致的CRLF注入漏洞

news2024/11/18 17:20:35

 路径:nginx/insecure-configuration

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

8080:CRLF注入漏洞

8081: 目录穿越漏洞

8082: add_header被覆盖

$uri导致的CRLF注入漏洞

Nginx会将$uri进行解码,导致传入%0d%0a即可引入换行符,造成CRLF注入漏洞。

错误的配置文件示例(原本的目的是为了让http的请求跳转到https上):

下面两种情景十分常见:

1.用户访问http://example.com/aabbcc,自动跳转到https://example.com/aabbcc

将会301跳转到https;随着现在https的普及,很多站点都强制使用https访问,这样的跳转非常常见。

2.用户访问http://example.com/aabbcc,自动跳转到http://www.example.com/aabbcc

该场景主要是为了统一用户访问的域名,更加有益于SEO优化。

在跳转的过程中,我们需要保证用户访问的页面不变,所以需要从Nginx获取用户请求的文件路径。查看Nginx文档,可以发现有三个表示uri的变量:

  1. $uri

  2. $document_uri

  3. $request_uri

解释一下,1和2表示的是解码以后的请求路径,不带参数;3表示的是完整的URI(没有解码)。那么,如果运维配置了下列的代码:

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

因为$uri是解码以后的请求路径,所以可能就会包含换行符,也就造成了一个CRLF注入漏洞

这个CRLF注入漏洞可以导致会话固定漏洞、设置Cookie引发的CSRF漏洞或者XSS漏洞。其中,我们通过注入两个\r\n即可控制HTTP体进行XSS,但因为浏览器认为这是一个300跳转,所以并不会显示我们注入的内容。

这个情况下,我们可以利用一些技巧:比如使用CSP头来iframe的地址,这样浏览器就不会跳转,进而执行我们插入的HTML:

7f13f178fa394e0197e13cb41d677c99.png

如何修复这个CRLF漏洞?正确的做法应该是如下:

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

另外,由$uri导致的CRLF注入漏洞不仅可能出现在上述两个场景中,理论上,只要是可以设置HTTP头的场景都会出现这个问题。

由于我的8080端口访问报错,出现此页面不能正确地重定向,导致无法进行复现,但我们要掌握原理,了解该漏洞的问题之处以及防御。

 

 

 

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

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

相关文章

GDP-L-岩藻糖二钠盐,GDP-fucose ,6-Deoxy-β-L-galactopyranosylguanosine 5′-diphosphate

产品名称:GDP-L-岩藻糖二钠盐,GDP-B-L-岩藻糖(钠盐) 英文名称:GDP-fucose ,6-Deoxy-β-L-galactopyranosylguanosine 5′-diphosphate Chemical Name GDP-L-岩藻糖 GDP-L-fucose disodium salt CAS Number 15839-70-0 Mol. For…

了解低压差稳压IC(LDO)及其在电池驱动设备中的意义

了解低压差稳压IC(LDO)及其在电池供电设备中的重要性 如今,电子设备的尺寸比以往任何时候都要小。这使我们能够在智能手表,健身追踪器和其他可穿戴设备等紧凑型便携式设备中加入功能,它还帮助我们部署远程物联网设备进…

Batch Normalization——李宏毅机器学习笔记

Batch Normalization 详细可见paper《Batch Normalization: Accelerating Deep Network Training by Reducing Internet Covariate Shift》,2015 Feature Scaling(特征缩放)/Feature Normalization (引言) Make dif…

Python入门项目,从不会编程到完成这个小游戏,也就两天时间

前言 还在啃书本学python吗? 为什么不试试用有趣的小游戏来学编程?自己开发的游戏,既能活学活用python,又能找回学习的自信。 (文末送读者福利) 下面我带大家开发一个Python小游戏,这是我在…

ORACLE连接不上 Linux网络 端口 问题判断

最近遇到一个问题,配置一个oracle数据源怎么都连接不上,ping Ip可以连接通,且毫秒数都很小。telnet 也能连接 但是很快就自动断开。 别人也能连接oracle的数据库,我这边服务器不行,就很奇怪。各种方法都来试试。 SEL…

GD32F30x系列Systick系统滴答定时器 (Qt模拟项目 可套函数模板)

GD32F30x系列Systick系统滴答定时器【0】Qt 项目效果展示【1】SysTick 简介【2】SysTick 寄存器【3】代码配置和初始化说明【3.1】core_cm4.h头文件【3.2】systick.h【3.3】mainwindow.h【3.4】systick.cpp【3.5】mainwindow.cpp [主流程]本次Systick系统滴答定时器&#xff0c…

Ubuntu 18.04安装fast-dds

提纲 1、概述 2、foonathan_memory_vendor 3、fast-cdr 4、fast-dds 5、编译HelloWorldExample 6、安装fast-dds-gen,使用IDL文件构建代码 1、概述 fastdds是干什么,就不重复说了。 操作系统是Ubuntu18.04 本次采用源码编译安装,需要使用到…

用二元泊松模型预测2022世界杯8强

用二元泊松模型预测2022世界杯8强 网上有很多文章用双泊松(Double Poisson)模型来预测世界杯比赛结果。但是双泊松模型有一个严重的缺陷,那就是它假设比赛中两队的比分是条件独立的。而我们都知道,在对抗性比赛中,两…

(十二)笔记MQ学习之优劣介绍

((十二)笔记MQ学习之优劣介绍一、MQ的优势1.应用解耦2.异步提速3.削峰填谷二、MQ的劣势1.系统可用性降低2.系统复杂度提高3.一致性问题三、MQ的使用条件四、常见的MQ产品一、MQ的优势 1.应用解耦 使用MQ使得应用解耦,提升容错性…

[附源码]Python计算机毕业设计Django勤工助学管理系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

Linux之基于Centos系统安装Redis、MySQL、Nginx

一. Redis的安装 1. 准备 (1). 宿主机:centos 8.0 (2). Redis源码:【压缩包: redis-5.0.0.tar.gz】 需要自行编译。 (PS:这个压缩包可以直接Centos系统中在线下载 或者去Redis官网先下载,然后copy到Centos系统中) …

Java入门教程(4)——JDK环境变量的配置

1 1.path是一个常见的环境变量,它告诉系统除了在当前目录下寻找此程序外,还可以到path指定的目录下寻找。 2.JAVA_HOME (1) 为以后其他软件寻找JDK做准备 classpath不需配置 3.JDK1.5以上版本,JRE会自动搜索当前路径下的类文件及相关jar…

在浏览器中输入url回车后发生了什么

1.dns进行解析:将url地址(www.bilibili.com)解析成ip地址(110.43.34.184),ip地址就是想要访问的服务器的地址 dns就是数据库,这个数据库中记录着url地址和ip地址的对应关系 2.正式发送数据之前…

react 初体验

react笔记 创建一个项目 npm install -g create-react-app // 全局安装脚手架 create-react-app react-01 // 新建一个项目 npm start快捷定义组件 安装组件后,快捷命令 rcc :类式组件 rfc:函数式组件 axios开启代理 在package.json中新…

为什么我推荐你一定要学Python?

很多初学者都听说python很火,可是为啥要学Python,下面谈谈我的感悟 python语言是我目前为止用的最爽的语言,因为它真的很优美.虽然c,c,java也非常的强大和伟大,但是每一种语言伟大的背后都是有一定的时代背景。 说起Python这门编…

VINS学习02——VINS系列代码所有依赖库安装(保姆级)

0.简介 在学习视觉SLAM过程中,先后用了VINS_mono,VINS_Fusion,Omni_swarm,因为是第一次做视觉相关定位,所以大部分库都是第一次装,中间还从虚拟机换到双系统,意识到记录的重要行性,所以在此记录安装相关依赖库的教程。…

python 练习题

for 循环 和 while 循环 判断101-200之间有多少个素数,并输出所有素数。 (什么是素数(质数): 除了1和它本身,不能被其他的数整除) 方法1: count 0 # 设定素数的初始个数为0 for num in range…

MySql使用MyCat分库分表(四)分片规则

视频学习地址:17-尚硅谷-垂直分库_哔哩哔哩_bilibili 笔记参考地址:MySQL 分库分表 | xustudyxus Blog (frxcat.fun) 分片规则 范围分片 介绍 根据指定的字段及其配置的范围与数据节点的对应情况, 来决定该数据属于哪一个分片。 配置 …

Angular 应用开发里使用 ForRoot 解决 Lazy Loaded Module 里单例行为丢失的问题

笔者在 Angular 实际项目开发中曾经遇到这样一个需求: 我们想创建一个共享模块,它将包含一个配置来设置布尔值(作为标志)以启用或禁用其他模块的某些功能。 其他模块可以在 Angular 应用程序的引导期间加载,也可以是延…

JVM基本常识

目录 内存区域划分 类加载 何时触发类加载? 双亲委派模型 GC GC回收那部分内存? 怎么回收? 怎么找垃圾(判定某个对象是否是垃圾) 具体怎么回收? 我的GitHub:Powerveil GitHub 我的Gitee:Powercs12…