HTTP请求走私漏洞简单分析

文章目录

  • HTTP请求走私漏洞的产生
  • HTTP请求走私漏洞的分类
  • HTTP请求走私攻击的危害
  • 确认HTTP请求走私漏洞
    • 通过时间延迟技术确认CL漏洞
    • 通过时间延迟技术寻找TE.CL漏洞
  • 使用差异响应内容确认漏洞
    • 通过差异响应确认CL.TE漏洞
    • 通过差异响应确认TE.CL漏洞
  • 请求走私漏洞的利用
    • 通过请求漏洞绕过URL访问的限制
    • 通过请求走私漏洞绕过客户端认证
    • 触发反射型号XSS
    • 网页缓存中毒
  • Apache mod_proxy配置请求走私攻击


HTTP请求走私漏洞的产生

在HTTP/1.1中,HTTP请求走私漏洞出现,是因为HTTP规范提供了两种不同的方法指定请求位置的结束即我们说的Content-Length 和Transfer-Encoding标头,分别表示正文内容的长度和是否分块,当同时使用这两种方法的时候,如果前端和后端服务器处理表头的时候出现了歧义,则会出现处理情况的不同,从而导致了请求走私漏洞,比如说:

file

图中由于前端服务器不支持Transfer-Encoding分块,因此正文的所有数据由于Content-Length被传入到了后端服务器中,而后端服务器因为支持Transfer-Encoding,遇到0的时候,就停止了接收,后面请求的admin就被认为是一次新的请求,两个服务器之间的歧义导致了HTTP请求走私漏洞。

HTTP请求走私漏洞的分类

  1. CL.TE:前端服务器使用 Content-Length 标头和后端服务器使用 Transfer-Encoding 页眉
  2. TE.CL:前端服务器使用 Transfer-Encoding 标头和后端服务器使用 Content-Length 页眉
  3. TE.TE:前端和后端服务器都支持 Transfer-Encoding 标头,但两个服务器处理Transfer-Encoding产生歧义

HTTP请求走私攻击的危害

由于当今的Web应用程序之间大都采用HTTP服务器链的形式,有时为了负载均衡等各种原因,都会设置多个代理或均衡器,最终这些服务器请求都转发到了一个或多个后端服务器中,假若这些类型的架构在服务器处理HTTP请求时发生了歧义,会产生巨大的危害。

  1. 会话劫持: 攻击者可以使用HTTP请求走私攻击来劫持用户的会话,获取用户的敏感信息,例如登录凭据、会话标识符等。攻击者可以利用这些信息冒充用户,执行未经授权的操作。
  2. 身份伪装: 攻击者能够通过HTTP请求走私攻击伪装成合法的用户,绕过一些安全机制和防护措施。这可能导致攻击者获得未授权的访问权限,例如访问受限资源或执行特权操作。
  3. 敏感信息泄露: 攻击者可以利用HTTP请求走私漏洞,通过注入恶意请求将敏感信息泄漏给第三方。这些信息可能包括用户的个人身份信息、金融数据、业务逻辑、系统配置等。
  4. 业务破坏: 攻击者可以使用HTTP请求走私攻击来破坏正常的业务流程。例如,他们可以篡改或删除HTTP请求头、操纵响应内容、劫持会话等,导致应用程序无法正常工作,影响用户体验和业务流程。
  5. 安全漏洞利用: HTTP请求走私攻击可能与其他安全漏洞相结合,从而导致更严重的安全问题。攻击者可能会利用该漏洞执行其他攻击,如跨站脚本攻击 (XSS)、跨站请求伪造 (CSRF)、服务器端请求伪造 (SSRF) ,等。

确认HTTP请求走私漏洞

通过时间延迟技术确认CL漏洞

由于前端服务器使用的是Content-Length标头,而后端服务器使用的是Transfer-Encoding,因此前端服务器仅会转发一部分,后端服务器处理了第一个区块,因为还没结束符,所以会等待下一个区块的到达,可以有明显的时间延迟。

POST / HTTP/1.1 
Host: aiwin.com
Transfer-Encoding: chunked 
Content-Length: 3

1 
X

如以上数据包为例,前端使用Content-length,只会发送3个长度的数据,发送到了1,而后端使用的是chunked,会一直等待下一区块的到来,或者等待结束符0的到来。

通过时间延迟技术寻找TE.CL漏洞

由于前端服务器使用Transfer-Encoding表头,仅转发请求的一部分,后端服务器使用的是Content-Length表头,在等待着剩余内容的到达,也可以观察到时间延迟

POST / HTTP/1.1 
Host: aiwin.com
Transfer-Encoding: chunked 
Content-Length: 6

0

X

如上数据包,前端服务器使用的是chunked,会转发到0之前的正文,但是后端服务器使用的是Content-Length,长度为6,而转发到0,长度仅为3,所以会等待后面3个长度的正文到来,会导致时间延迟

使用差异响应内容确认漏洞

通过走私漏洞,能够干扰正确请求的响应包,通过正常请求的响应来确认漏洞。

通过差异响应确认CL.TE漏洞

如下数据包,由于前端服务器使用的是Content-Length,所以全部数据都被发送到了后端服务器中,而后端服务器使用的是Transfer-Encoding,数据接收到0后就停止了,下面GET的请求被认为是新一次的请求处理,返回了404 Not Found。

file

通过差异响应确认TE.CL漏洞

如下HTTP请求包,由于前端服务器使用的是TE,所以全部数据毫无问题的发送到了后端服务器,而后端服务器使用的是CL,只接收到了5e的数据,下面的POST数据被认为是新一次的请求被后端服务器处理,返回了404。

file

请求走私漏洞的利用

通过请求漏洞绕过URL访问的限制

如下数据包,访问/admin页面,是被403掉的

file

因为这里存在请求走私漏洞,CL-TE漏洞,所以前端将全部的数据传入到了后端,而后端使用的是TE,接收到0后停止,下一次请求/admin被认为是新一次的请求,而此次请求的Host为本地,因此可以绕过403

file

通过请求走私漏洞绕过客户端认证

一般在https中,作为TLS握手的一部分,服务器需要提供证书向客户端进行身份认证,证书包含通用名称,该名称需要与注册的主机名相匹配,客户端可以使用它验证是否与合法服务器进行通信。

GET /admin HTTP/1.1
Host: aiwin.com
X-SSL-CLIENT-CN: aiwin

一般这些CN标头对用户是隐藏的,如果能够发送正确的CN头和值,可能能偶绕过访问控制,在前端中,如果这些头已经存在,前端服务器会覆盖它们,因此不太可利用,而走私的请求可以绕过前端,原封不动的发送给后端,绕过验证。

POST /example HTTP/1.1
Host: vulnerable-website.com
Content-Type: x-www-form-urlencoded
Content-Length: 64
Transfer-Encoding: chunked

0

GET /admin HTTP/1.1
X-SSL-CLIENT-CN: administrator
Foo: x

触发反射型号XSS

查看页面,发现User-agent被插入到了页面中,并且验证一下能够通过修改User-Agent触发反射型XSS。
file
一般反射型XSS对用户并没有危害,只能在自身访问的网站中触发或者通过与用户交互触发,加入联合请求走私漏洞,则可以导致其它用户访问任意界面都触发反射型XSS,无需与用户进行交互,便可以轻松造成一定的影响,原理就是当前端页面中某一处请求头利用能够触发反射型XSS,又存在CL-TE种类的请求走私漏洞时,能够利用这种形式。

file

此处因为前端不支持chunked,接收的是Content-length,因此整块数据毫无问题的传入到了后端服务器,而后端服务器接收的是TE,接收到是0后停止接收,下面还未接收,被认为是独立的请求,被缓存到了服务器中,当有用户进行请求,就会触发XSS。
file

网页缓存中毒

网页缓存是指为了减少服务器的负载,服务器会将一些文件如CSS\JS等缓存起来,以便在下次访问的时候进行读取,不需要再次请求服务器,可是当某一用户发送一些恶意的请求服务器,服务器就会返回恶意的服务器到缓存服务器,因此缓存的这周机制,其它用户访问这个界面的时候就会加载这个恶意的缓存,存在被投毒的可能。

因为服务器存在CL-TE请求走私漏洞,因此可以通过攻击服务器,使得CL-TE请求走私将下一个请求指定攻击服务器的POST路径。

file

file

访问JS文件,可以看到重定向来了构造的恶意XSS语句中,JS文件恶意重定向到了XSS被缓存到了服务器中。

file

再次访问靶场页面,因为缓存机制,服务器每次进入主页面都会请求这个JS文件,又因为这个JS已经被投毒,会从缓存服务器中请求这个被重定向的恶意JS文件,触发了XSS。

file

Apache mod_proxy配置请求走私攻击

在apache HTTP Server版本2.4.0-2.4.55中某些mod_proxy配置能够造成HTTP请求走私攻击,启用 mod_proxy 以及特定配置的 RewriteRule 或 ProxyPassMatch 模块时,当规则与用户提供的URL的某些部分匹配时,会因为变量替换从而造成代理请求目标错误。

例如如下配置

RewriteEngine on
RewriteRule "^/nssctf/(.*)" "http://example.com:8080/index.php?id=$1"; [P]
ProxyPassReverse "/nssctf/" "http://example.com:8080/"

这里的id被设置成了$1,当我们访问的url匹配到正则的时,就会进行RewriteRule规则替换,准备新的请求发送给mod_proxy模块,让apache生成一个request请求目标的后端服务器。

file

这里的url字符会被解码,能够进行CRLF注入,id=0以及GET /flag.txt会直接拼接到了请求报文中发送给了后端服务器,造成了请求走私。

具体分析查看:Apache请求走私漏洞

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

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

相关文章

ARTS 挑战打卡的第1天 --- Linux驱动与设备的匹配规则(Tips)

前言 (1)因为在Linux驱动开发中,驱动可以和设备c文件文件进行匹配,也可以和设备树dts文件进行匹配。为了弄明白驱动与他们的匹配规则,我查阅了一些资料同时阅读了源码,最终打算使用图片的方式形象具体的写成…

FFmpeg5.0源码阅读——av_interleaved_write_frame

摘要:本文主要详细描述FFmpeg中封装时写packet到媒体文件的函数av_interleaved_write_frame的实现。   关键字:av_interleaved_write_frame   读者须知:读者需要熟悉ffmpeg的基本使用。 1 基本调用流程 av_interleaved_write_frame的基本…

matlab使用教程(6)—线性方程组的求解

进行科学计算时,最重要的一个问题是对联立线性方程组求解。在矩阵表示法中,常见问题采用以下形式:给定两个矩阵 A 和 b,是否存在一个唯一矩阵 x 使 Ax b 或 xA b? 考虑一维示例具有指导意义。例如,方程 …

Redis - 缓存的双写一致性

概念: 当修改了数据库的数据也要同时更新缓存的数据,缓存和数据库的数据要保持一致 那为什么会有不一致的情况呢? 如果不追求一致性,正常有两种做法 先修改数据库 后删除旧的缓存先删除旧的缓存 再修改数据库 我们以先删除旧的…

【玩转pandas系列】数据清洗(文末送书福利)

文章目录 一、重复值检测二、元素替换1️⃣ 元素替换replace2️⃣ 数据映射map 三、修改索引1️⃣ 修改索引名rename2️⃣ 设置索引和重置索引 四、数据处理1️⃣ apply与applymap2️⃣ transform 五、异常值处理六、抽样聚合函数1️⃣ 抽样2️⃣ 数学函数 七、分组聚合&#x…

数字世界未来十年面貌如何?

随着科技的不断发展和创新,数字世界将在未来十年迎来一系列革命性的变化和进步。以下是数字世界未来十年面貌的一些预测: 人工智能全面普及:人工智能将逐渐渗透到我们生活的方方面面。从智能家居到智能交通,从个性化医疗到智能零售…

用python编写一个小程序,如何用python编写软件

大家好,给大家分享一下用python编写一个小程序,很多人还不知道这一点。下面详细解释一下。现在让我们来看看! 1、python可以写手机应用程序吗? 我想有人曲解意思了,人家说用python开发渣蔽一个手机app,不是…

零基础C#编写上位机如何入门?

学习C#基础语法和.NET框架,掌握基本编程概念和语法,例如数据类型、类、对象、继承、多态、异常处理等。学习WinForm窗体应用程序开发技术,掌握窗体应用程序的设计和开发,例如控件的使用、事件驱动编程、窗体的布局与设计等。学习数…

《向量数据库指南》——Milvus Cloud 2.3 和 2.4 版本的重要变化

Milvus Cloud2.3 和 2.4 版本的重要变化。 首先是 Milvus Cloud2.3 将支持 Json 数据类型,在此基础上亦会支持 Schemaless。此前,用户在使用 Milvus Cloud的过程中会先定一个静态 Schema,此时,如果在实际业务层面如果多了几个 feature 或者 Metadata,就意味着数据需要重新…

什么是架构 架构图

如何成为一名架构师,架构师成长之路_golang架构师成长之路_个人渣记录仅为自己搜索用的博客-CSDN博客 如何画架构图_个人渣记录仅为自己搜索用的博客-CSDN博客 如何画好一张架构图?(内含知识图谱) - 知乎 什么是架构?要表达的到…

代码随想录算法训练营第二十八天 | Leetcode随机抽题检测

Leetcode随机抽题检测--使用题库:Leetcode热题100 1 两数之和未看解答自己编写的青春版重点题解的代码日后再次复习重新写 49 字母异位词分组未看解答自己编写的青春版重点题解的代码日后再次复习重新写 128 最长连续序列未看解答自己编写的青春版重点关于 left 和 …

黑客技术(网络安全)学习笔记

一、网络安全基础知识 1.计算机基础知识 了解了计算机的硬件、软件、操作系统和网络结构等基础知识,可以帮助您更好地理解网络安全的概念和技术。 2.网络基础知识 了解了网络的结构、协议、服务和安全问题,可以帮助您更好地解决网络安全的原理和技术…

Qt 2. QSerialPortInfo显示串口信息

在ex2.pro 添加&#xff1a; QT serialport//main.cpp #include "ex2.h" #include <QtSerialPort/QtSerialPort> #include <QApplication>int main(int argc, char *argv[]) {QApplication a(argc, argv);Ex2 w;w.show();QList<QSerialPortInfo>…

出海拍|疯了!ChatGPT 大规模封号,有钱还不赚?

时代洪流裹挟命运流转&#xff0c;世事变迁暗藏跨境沉浮。 几个月前&#xff0c;OpenAI的创始人之一马斯克曾在社交媒体平台上称赞ChatGPT &#xff1a;“Its a new world. Goodbye homework!”而他所说的ChatGPT 引领着许多AI工具&#xff0c;随后便开始如雨后春笋般出现在我…

刷题学算法

刷题学算法 数据结构 一、数组 1. 数组创建&#xff1a; // 方式1&#xff1a;先创建&#xff0c;再逐个存储元素 String[] cityArray1 new String[5]; cityArray1[0] "北京"; cityArray1[1] "上海"; cityArray1[2] "广州"; cityArray1[3…

【RabbitMQ(day4)】SpringBoot整合RabbitMQ与MQ应用场景说明

一、SpringBoot 中使用 RabbitMQ 导入对应的依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency>配置配置文件 spring:application:name: rabbitmq-springbo…

linux备份与还原系统(类似window上ghost备份还原)

一、摘要 在linux上进行了几年的开发工作 &#xff08;qt ros&#xff09; 突然发现&#xff0c;现在有公司硬件、笔记本台式机一台占一个系统&#xff0c;导致硬件太浪费&#xff0c;又不能用虚拟机&#xff08;有时候要链接硬件必须物理机&#xff09;怎么办&#xff1f; 二…

【C++】开源:Boost库常用组件配置使用

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍Boost库常用组件配置使用。 无专精则不能成&#xff0c;无涉猎则不能通。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c…

CSS font-family 等宽字体

CSS font-family 等宽字体 font-family: "Lucida Console", Consolas, "Courier New", Courier, monospace; font-family: Courier New, Courier, Lucida Console, Consolas, monospace; font-family: Courier, Lucida Console, Consolas, Courier New,…

多赛道出海案例,亚马逊云科技为企业提供全新解决方案实现高速增长

数字化浪潮之下&#xff0c;中国企业的全球化步伐明显提速。从“借帆出海”到“生而全球化”&#xff0c;中国企业实现了从低端制造出口&#xff0c;向技术创新和品牌先导的升级。为助力中国企业业务高效出海&#xff0c;亚马逊云科技于2023年6月9日在深圳大中华喜来登酒店举办…
最新文章