CRLF注入与检测

一、CRLF介绍

CRLF是CR和LF两个字符的拼接,它们 分别代表”回车+换行”(\r\n)。十六进制编码分别为0x0d和0x0a,URL编码为%0D和%0A。CR和LF组合在一起即CRLF命令,它表示键盘上的"Enter"键,许多应用程序和网络协议使用这些命令作为分隔符。
  • CR:回车,移动到当前行的开始
  • LF:换行,光标垂直移动到下一行
  
HTTP报文结构:
从上图可以看到:HTTP报文由三部分组成:状态行、首部、主体。
可以看到状态行和首部行中的每行都是以回车符(\r,%0d,CR)和换行符(\n,%0a,LF)结束。
这是 因为HTTP规范中行应该使用CRLF结束。另外,首部和主体由两个CRLF分隔

二、CRLF原理分析

CRLF是 “ 回车+换行 ”(\r\n)的简称。 在HTTP协议中,HTTP Header与HTTP Body是用两个CRLF分隔的,浏览器根据这两个CRLF来取出HTTP内容并显示出来 。所以,一旦能够控制HTTP消息头中的字符,注入一些恶意的换行,这样我们就能注入一些会话Cookie或者HTML代码。
CRLF漏洞可以造成Cookie会话固定漏洞和反射型XSS(可过waf)的危害。

三、CRLF漏洞挖掘

CRLF注入漏洞的本质和XSS有点相似,攻击者将恶意数据发送给易受攻击的Web应用程序, Web应用程序将恶意数据输出在HTTP响应头中。(XSS一般输出在主体中), 所以CRLF注入漏洞的挖掘和XSS差不多。 通过修改HTTP参数或URL,注入恶意的CRLF,查看构造的恶意数据是否在响应头中输出 漏洞注入点主要在重定向或者跳转的地方。
  
挖掘此类漏洞,观察我们的输入和输出位置,对于CRLF则是观察返回的各种类型的协议头,所以挖掘分三步:
  1. 观察输出是否在返回头中,查看输入,可能是在URL值和参数、cookie头中。在过往的挖掘过程中,最常见的两种情况是使用输入参数Set-Cookie和302跳转location处
  2. 提交 %0d%0a 字符,验证服务器是否响应%0d%0a,若过滤可以通过双重编码绕过。
  3. 漏洞利用,使杀伤最大化,将漏洞转化为HTML注入,XSS,缓存等。
  
CRLF漏洞一般通过如下3个条件可以达成这种攻击(当然要没过滤%0d%0a):
  1. Set-Cookie中的内容用户可以控制
  2. 302跳转的Location地址用户可以控制
  3. 其他自定义Header用户可以控制

四、CRLF实例

4.1、实例1(会话固定漏洞)

一般网站会在HTTP头中用  Location: http://baidu.com  这种方式来进行302跳转,所以我们能控制的内容就是Location:后面的XX某个网站,对这个地址进行污染。
假设服务端(PHP)的处理方式:
代码意思是说当条件满足时,将请求包中url参数拼接到Loction字符串中,并设置成响应头发送给客户端。
此时服务器端接收到的url参数值是我们修改后的: http://baidu.com/xxx%0a%0dSet-Cookie:test=123
在url参数值拼接到Location字符串中,设置成响应头后,响应头就会看到:Set-Cookie:test=123
一个正常的302跳转包是这样的:
但是如果我们输入的是: http://www.sina.com.cn%0aSet-cookie:JSPSESSID%3Dwooyun
注入了一个换行,此时的返回包就会变成下面这样:
这时我们就给访问者设置了一个SESSION,造成一个 “会话固定漏洞 ”。

4.2、实例2(XSS漏洞)

通过注入两个CRLF就能造成一个无视浏览器Filter的反射型XSS
比如一个网站接收url参数 http://test.sina.com.cn/?url=xxx, xxx放在Location后面作为一个跳转。如果我们输入的是
http://test.sina.com.cn/?url=%0d%0a%0d%0a < img src=1 οnerrοr=alert(/xss/)>
我们的返回包就会变成这样:
之前说了 浏览器会根据第一个CRLF把HTTP包分成header和body,然后将body显示出来 。于是我们这里这个标签就会显示出来,造成一个XSS。
   
为什么说是无视浏览器filter的,这里涉及到另一个问题。
浏览器的Filter是浏览器应对一些反射型XSS做的保护策略,当url中含有XSS相关特征的时候就会过滤掉不显示在页面中,所以不能触发XSS。
怎么才能关掉Filter?一般来说用户这边是不行的,只有数据包中http头含有 X-XSS-Protection:0 ,浏览器才不会开启Filter。
所以遇到XSS过滤的情况我们就 可以在httpheader中注入X-XSS-Protection:0,可绕过浏览器的过滤规则实现XSS弹窗显示。

4.3、实例3(nginx配置错误之CRLF漏洞)

使用vulhub的环境,进入 vulhub/nginx/insecure-configuration 目录,执行docker-compose up -d启动环境
错误的配置文件示例(原本的目的是为了让http的请求跳转到https上):
1、$uri
2、$document_uri  前两个变量是表示的是解码以后的请求路径,不带参数
3、$request_uri     表示的是完整的URI(没有解码)
当使用前两个变量的时候就会自动解码,那么思路就是将payload编码,然后让他自动解码 。
Payload: ` http://your-ip:8080/%0d%0aSet-Cookie:%20a=1 `,可注入Set-Cookie头。
可以看到payload中利用urlcode编码了来实现了换行,然后就成功了。
解决方法也很简单,就不要解码,可以使用第三个变量 $request_uri

五、防御

要避免http响应截断,需要注意以下几点:
  • 对用户的数据进行合法性校验,对特殊的字符进行编码,如<、>、’、"、CR、LF、等,限制用户输入CR和LF,或者对CR和LF正确编码后再输出,以防止注入自定义HTTP头。
  • 创建安全字符白名单,只接收白名单中的字符出现在HTTP响应头文件中。
  • 在将数据传送到http响应头之前,删除所有的换行符。

六、CRLF Payload

探测漏洞:
%0d%0aheader:header
%0aheader:header
%0dheader:header
%23%0dheader:header
%3f%0dheader:header
/%250aheader:header
/%250aheader:header
/%%0a0aheader:header
/%3f%0dheader:header
/%23%0dheader:header
/%25%30aheader:header
/%25%30%61header:header
/%u000aheader:header
开放重定向:
/www.google.com/%2f%2e%2e%0d%0aheader:header
CRLF-XSS:
%0d%0aContent-Length:35%0d%0aX-XSS-Protection:0%0d%0a%0d%0a23%0d%0a<svg%20οnlοad=alert(document.domain)>%0d%0a0%0d%0a/%2e%2e
XSS绕过:
%2Fxxx:1%2F%0aX-XSS-Protection:0%0aContent-Type:text/html%0aContent-Length:39%0a%0a%3cscript%3ealert(document.cookie)%3c/
Location:
%0d%0aContent-Type:%20text%2fhtml%0d%0aHTTP%2f1.1%20200%20OK%0d%0aContent-Type:%20text%2fhtml%0d%0a%0d%0a%3Cscript%3Ealert(‘XSS’);%3C%2fscript%3E

七、CRLFuzz工具检测

从 Release v1.4.1 · dwisiswant0/crlfuzz (github.com)下载工具:
具体使用方法请参考 GitHub - dwisiswant0/crlfuzz: A fast tool to scan CRLF vulnerability written in Go
 
使用crlfuzz工具检测4.3章节中的nginx配置错误之CRLF漏洞:
前方带​​​​​​​ 表明这条payload探测到了CRLF漏洞。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何避免LLM的“幻觉”(Hallucination)

生成式大语言模型&#xff08;LLM&#xff09;可以针对各种用户的 prompt 生成高度流畅的回复。然而&#xff0c;大模型倾向于产生幻觉或做出非事实陈述&#xff0c;这可能会损害用户的信任。 大语言模型的长而详细的输出看起来很有说服力&#xff0c;但是这些输出很有可能是虚…

postman设置下载文件大小限制

问题 本地写了一个下载文件的接口&#xff0c;调用postman测试的时候&#xff0c;小文件可以&#xff0c;但时大文件就会报错&#xff0c;postman提示&#xff1a; 解决方案 点击postman的设置按钮&#xff0c;点击【Settings】&#xff0c;在打开的弹窗中选择【General】Tab…

【Spark精讲】记一个SparkSQL引擎层面的优化:SortMergeJoinExec

SparkSQL的Join执行流程 如下图所示&#xff0c;在分析不同类型的Join具体执行之前&#xff0c;先介绍Join执行的基本框架&#xff0c;框架中的一些概念和定义是在不同的SQL场景中使用的。 在Spark SQL中Join的实现都基于一个基本的流程&#xff0c;根据角色的不同&#xff0…

解析大语言模型LLM的幻觉问题:消除错觉、提高认知

文章目录 前言一、幻觉介绍二、幻觉产生的原因三、幻觉的现象四、幻觉的分类五、幻觉解决方案六、幻觉待解决问题后记 前言 在人类的感知和认知过程中&#xff0c;幻觉一直是一个被广泛讨论和研究的问题。幻觉指的是一种虚假的感知或认知经验&#xff0c;使我们看到、听到或感…

如何选择适合你的跨境电商源码?10大要点全解析

跨境电商源码是开展跨境电商业务的关键工具&#xff0c;它直接关系到电商网站的功能性和性能表现。如何选择适合自己的跨境电商源码成为了许多网商关注的焦点。本文将从多个维度全面解析如何选择适合你的跨境电商源码&#xff0c;为你的跨境电商之路提供有力支持。 关键点一&a…

大数据应用安全策略包括什么

大数据应用安全策略是为了保障大数据应用中的数据安全而采取的一系列措施&#xff0c;其重要性不容小觑。以下是大数据应用安全策略所包含的主要内容&#xff1a; 一、数据加密与安全存储 数据加密&#xff1a;对于敏感数据&#xff0c;应采用加密技术进行保护&#xff0c;包括…

【代数学作业4-汇总版】范数与迹

【代数学作业4】范数与迹 写在最前面1. 极小多项式1. 对 α \alpha α 的极小多项式2. 对 α 1 \alpha 1 α1 的极小多项式3. 对 α 2 α 1 \alpha^2 \alpha 1 α2α1 的极小多项式 2. 范数 N N N3. 数域 K K K 的范数 N K N_K NK​4. 迹 T T T5. 数域 K K K 的迹…

基于电商场景的高并发RocketMQ实战-促销活动推送至用户完整流程、Spring结合RocketMQ的生产者消费者使用

&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308; 欢迎关注公众号&#xff08;通过文章导读关注&#xff09;&#xff0c;发送【资料】可领取 深入理解 Redis 系列文章结合电商场景讲解 Redis 使用场景、中间件系列…

Redis - 挖矿病毒 db0 库 backup 反复出现解决方案

问题描述 腾讯云的服务器&#xff0c;使用 Docker 部署了 Redis 之后&#xff0c;发现 DB0 中总是出现 4 条 key&#xff0c;分别是 backup01backup02backup03backup04 而自己每次存入 db0 中的数据过一会就会被无缘无故删除掉。 原因分析 挖矿病毒 解决方案 在启动的时候…

解决电脑访问共享文件问题:“无法访问。你可能没有权限使用网络资源。请与这台服务器的......”

文章目录 1. 问题2. 解决方法 1. 问题 2. 解决方法 Win R 键入 gpedit.msc在弹出的窗口,展开左侧目录树至安全选项,如图。( 计算机配置-Windows设置:安全设置-本地策略-安全选项)

linux系统下sql脚本的执行与导出

terminal中执行 执行 mysql -u [username] -p -D [databasename] < [XXX.sql] 导出 mysql -u [username] -p [datbasename] > [XXX.sql] 导出的数据库名自定义。 mysql -u [username] -p [databasename] [tablename] > [xxx.sql] 导出表名自定义 mysql shell 执行 …

NGUI基础-图集制作(保姆级教程)

目录 图集是什么 如何打开图集制作工具 制作步骤 图集的三个关键配置 相关参数介绍 Atlas Material Texture Padding Tim Alpha PMA shader Unity Packer TrueColor Auto-upgrade Force Square Pre-processor 图集是什么 Unity图集&#xff08;Sprite Atlas&…

java SSM拖拉机售后管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM拖拉机售后管理系统是一套完善的web设计系统&#xff08;系统采用SSM框架进行设计开发&#xff0c;springspringMVCmybatis&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源 代码和数据库&#xff0c;系统主要…

团结引擎试用(一)

昨天看到有群友说团结引擎开放下载了&#xff0c;今天下载试用一下 一、团结引擎官网https://unity.cn/tuanjie/tuanjieyinqing 1、要先下载团结hub 2、安装团结hub 3、安装团结引擎1.0.0 二、新建一个工程 1、支持列表中确实有微信小游戏和鸿蒙&#xff0c;但没看到车载和嵌…

maven、springboot项目编译打包本地jar、第三方jar包

0. 引言 一般我们在maven项目中都是通过引入pom坐标的形式来引入第三方jar包&#xff0c;但某些场景下&#xff0c;第三方是直接提供的jar包文件&#xff0c;这就需要我们从本地引入第三方包并进行打包。所以我们今天来看下如何进行本地引入第三方包操作 1. 步骤 1、在项目下…

Jenkins部署项目

一.安装jenkins 1.1进入jenkins官网下载jenkins war包&#xff0c;上传到服务器/usr/local目录。 1.2执行启动jenkins命令&#xff0c;&#xff08;注意jenkins版本需要的jdk版本&#xff09; /usr/local/java11/bin/java -Djava.awt.headlesstrue -jar /usr/local/jenkins.wa…

Navicat、Microsoft SQL Server Management Studio设置ID自增

一、Navicat中mysql数据库设置Id自增 &#xff08;1&#xff09;第一步 &#xff08;2&#xff09;第二步 二、Microsoft SQL Server Management Studio中Sqlservice数据库Id自增 &#xff08;1&#xff09;第一步 &#xff08;2&#xff09;第二步 &#xff08;3&#xff09…

ICP算法在三维点云拼接中的全面解析

原创 | 文 BFT机器人 引言 随着数字化技术的飞速发展&#xff0c;三维点云拼接技术在众多领域中发挥着关键作用&#xff0c;特别是在逆向工程、计算机视觉、模式识别、医学影像等领域。在点云拼接的众多算法中&#xff0c;ICP&#xff08;Iterative Closest Point&#xff09;算…

解决jenkins的Exec command命令不生效,或者执行停不下来的问题

Jenkins构建完后将war包通过 Publish Over SSH 的插件发布到服务器上&#xff0c;在服务器上执行脚本时&#xff0c;脚本中的 nohup 命令无法执行&#xff0c;并不生效&#xff0c;我配置的Exec command命令是后台启动一个war包&#xff0c;并输出日志文件。 nohup java -jar /…

【react-taro-canvas】用canvas手写一个数字、字母混合的行为验证码

用canvas手写一个数字、字母混合的行为验证码 实现效果源码 实现效果 源码 import Taro from "tarojs/taro"; import { View, Canvas, Input, Button } from "tarojs/components"; import { useState, useEffect } from "react"; // 画随机线函…