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标头,分别表示正文内容的长度和是否分块,当同时使用这两种方法的时候,如果前端和后端服务器处理表头的时候出现了歧义,则会出现处理情况的不同,从而导致了请求走私漏洞,比如说:

图中由于前端服务器不支持Transfer-Encoding分块,因此正文的所有数据由于Content-Length被传入到了后端服务器中,而后端服务器因为支持Transfer-Encoding,遇到0的时候,就停止了接收,后面请求的admin就被认为是一次新的请求,两个服务器之间的歧义导致了HTTP请求走私漏洞。
HTTP请求走私漏洞的分类
- CL.TE:前端服务器使用
Content-Length标头和后端服务器使用Transfer-Encoding页眉 - TE.CL:前端服务器使用
Transfer-Encoding标头和后端服务器使用Content-Length页眉 - TE.TE:前端和后端服务器都支持
Transfer-Encoding标头,但两个服务器处理Transfer-Encoding产生歧义
HTTP请求走私攻击的危害
由于当今的Web应用程序之间大都采用HTTP服务器链的形式,有时为了负载均衡等各种原因,都会设置多个代理或均衡器,最终这些服务器请求都转发到了一个或多个后端服务器中,假若这些类型的架构在服务器处理HTTP请求时发生了歧义,会产生巨大的危害。
- 会话劫持: 攻击者可以使用HTTP请求走私攻击来劫持用户的会话,获取用户的敏感信息,例如登录凭据、会话标识符等。攻击者可以利用这些信息冒充用户,执行未经授权的操作。
- 身份伪装: 攻击者能够通过HTTP请求走私攻击伪装成合法的用户,绕过一些安全机制和防护措施。这可能导致攻击者获得未授权的访问权限,例如访问受限资源或执行特权操作。
- 敏感信息泄露: 攻击者可以利用HTTP请求走私漏洞,通过注入恶意请求将敏感信息泄漏给第三方。这些信息可能包括用户的个人身份信息、金融数据、业务逻辑、系统配置等。
- 业务破坏: 攻击者可以使用HTTP请求走私攻击来破坏正常的业务流程。例如,他们可以篡改或删除HTTP请求头、操纵响应内容、劫持会话等,导致应用程序无法正常工作,影响用户体验和业务流程。
- 安全漏洞利用: HTTP请求走私攻击可能与其他安全漏洞相结合,从而导致更严重的安全问题。攻击者可能会利用该漏洞执行其他攻击,如跨站脚本攻击 (XSS)、跨站请求伪造 (CSRF)、服务器端请求伪造 (SSRF) ,等。
确认HTTP请求走私漏洞
通过时间延迟技术确认CL漏洞
由于前端服务器使用的是Content-Length标头,而后端服务器使用的是Transfer-Encoding,因此前端服务器仅会转发一部分,后端服务器处理了第一个区块,因为还没结束符,所以会等待下一个区块的到达,可以有明显的时间延迟。
POST / HTTP/1.1
Host: aiwin.com
Transfer-Encoding: chunked
Content-Length: 31
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: 60X
如上数据包,前端服务器使用的是chunked,会转发到0之前的正文,但是后端服务器使用的是Content-Length,长度为6,而转发到0,长度仅为3,所以会等待后面3个长度的正文到来,会导致时间延迟
使用差异响应内容确认漏洞
通过走私漏洞,能够干扰正确请求的响应包,通过正常请求的响应来确认漏洞。
通过差异响应确认CL.TE漏洞
如下数据包,由于前端服务器使用的是Content-Length,所以全部数据都被发送到了后端服务器中,而后端服务器使用的是Transfer-Encoding,数据接收到0后就停止了,下面GET的请求被认为是新一次的请求处理,返回了404 Not Found。

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

请求走私漏洞的利用
通过请求漏洞绕过URL访问的限制
如下数据包,访问/admin页面,是被403掉的

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

通过请求走私漏洞绕过客户端认证
一般在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: chunked0GET /admin HTTP/1.1
X-SSL-CLIENT-CN: administrator
Foo: x
触发反射型号XSS
查看页面,发现User-agent被插入到了页面中,并且验证一下能够通过修改User-Agent触发反射型XSS。

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

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

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


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

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

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请求目标的后端服务器。

这里的url字符会被解码,能够进行CRLF注入,id=0以及GET /flag.txt会直接拼接到了请求报文中发送给了后端服务器,造成了请求走私。
具体分析查看:Apache请求走私漏洞
相关文章:
HTTP请求走私漏洞简单分析
文章目录 HTTP请求走私漏洞的产生HTTP请求走私漏洞的分类HTTP请求走私攻击的危害确认HTTP请求走私漏洞通过时间延迟技术确认CL漏洞通过时间延迟技术寻找TE.CL漏洞 使用差异响应内容确认漏洞通过差异响应确认CL.TE漏洞通过差异响应确认TE.CL漏洞 请求走私漏洞的利用通过请求漏洞…...
BI-SQL丨两表差异比较
BOSS:哎,白茶,我们最近新上了一个系统,后续有一些数据要进行源切换,这个能整么? 白茶:没问题,可以整! BOSS:哦,对了,差点忘记告诉你了…...
ZooKeeper 选举的过半机制防止脑裂
结论: Zookeeper采用过半选举机制,防止了脑裂。 原因: 如果有5台节点,leader联系不上了,其他4个节点由于超过半数,所以又选出了一个leader,当失联的leader恢复网络时,发现集群中已…...
【图论】树上差分(边差分)
一.简介 其实点差分和边差分区别不大。 点差分中,d数组存储的是树上的节点 边差分中,d数组存储的是当前节点到父节点的那条边的差分值。 指定注意的是:边差分中因为根连的父节点是虚点,所以遍历结果时应当忽略! 二…...
RT1052的定时器
文章目录 1 通用定时器1.1 定时器框图1.2 实现周期性中断 2 相关寄存器3 定时器配置3.1 时钟使能3.2 初始化GPT1定时器3.2.1 base3.2.2 initConfig3.2.2.1 clockSorce3.2.2.2 divider3.2.2.3 enablexxxxx 3.3 设置 GPT1 比较值3.3.1 base3.3.2 channel3.3.3 value 3.4 设置 GPT…...
opencv python 训练自己的分类器
源码下载 一、分类器制作 1.样本准备 收集好你所需的正样本,和负样本,分别保存在不同文件夹 在pycharm新建项目,项目结构如下:has_mask文件夹放置正样本,no_mask文件夹放置负样本 安装opencv,把opencv包…...
详解Mybatis之分页插件【PageHelper】
编译软件:IntelliJ IDEA 2019.2.4 x64 操作系统:win10 x64 位 家庭版 Maven版本:apache-maven-3.6.3 Mybatis版本:3.5.6 文章目录 一. 什么是分页?二. 为什么使用分页?三. 如何设计一个Page类(分…...
【基于矢量射线的衍射积分 (VRBDI)】基于矢量射线的衍射积分 (VRBDI) 和仿真工具(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
基于jackson对bean的序列号和反序列化
通过观察控制台输出的SQL发现页面传递过来的员工id的值和数据库中的id值不一致,这是怎么回事呢? 分页查询时服务端响应给页面的数据中id的值为19位数字,类型为long 页面中js处理long型数字只能精确到前16位,所以最终通过ajax请求提交给服务…...
排队理论简介
排队理论简介 1. 理论背景2. 研究的数学方法3. 拒绝型排队系统与等候型排队系统4. 拒绝型排队系统 本文参考文献为Вентцель Е. С.的《Исследование операций》。 1. 理论背景 排队理论又称大众服务理论,顾名思义指的是在有限的服务条…...
极速查找(3)-算法分析
篇前小言 本篇文章是对查找(2)的续讲二叉排序树 二叉排序树(Binary Search Tree,BST),又称为二叉查找树,是一种特殊的二叉树。性质: 左子树的节点值小于根节点的值,右…...
http 常见的响应状态码 ?
100——客户必须继续发出请求101——客户要求服务器根据请求转换HTTP协议版本200——交易成功201——提示知道新文件的URL202——接受和处理、但处理未完成203——返回信息不确定或不完整204——请求收到,但返回信息为空205——服务器完成了请求,用户代理…...
机器学习笔记之优化算法(四)线搜索方法(步长角度;非精确搜索)
机器学习笔记之优化算法——线搜索方法[步长角度,非精确搜索] 引言回顾:精确搜索步长及其弊端非精确搜索近似求解最优步长的条件反例论述 引言 上一节介绍了从精确搜索的步长角度观察了线搜索方法,本节将从非精确搜索的步长角度重新观察线搜…...
Redis 哨兵 (sentinel)
是什么 官网理论:https://redis.io/docs/management/sentinel/ 吹哨人巡查监控后台 master 主机是否故障,如果故障了根据投票数自动将某一个从库转换为新主库,继续对外服务。 作用:无人值守运维 哨兵的作用: 1…...
统计2021年10月每个退货率不大于0.5的商品各项指标
统计2021年10月每个退货率不大于0.5的商品各项指标_牛客题霸_牛客网s mysql(ifnull): select product_id, format(ifnull(sum(if_click)/nullif(count(*),0),0),3) as ctr, format(ifnull(sum(if_cart)/nullif(sum(if_click),0),0),3) as c…...
【小波尺度谱】从分段离散小波变换计算小波尺度谱研究(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
UE5、CesiumForUnreal加载无高度地形
文章目录 1.实现目标2.实现过程3.参考资料1.实现目标 在UE5中,CesiumForUnreal插件默认的地形都是带高度的,这里加载没有高度的地形,即大地高程为0,GIF动图如下: 2.实现过程 参考官方的教程,下载无高度的DEM,再切片加载到UE中。 (1)下载无高度地形DEM0。 在官方帖子…...
关于Spring中的@Configuration中的proxyBeanMethods属性
Configuration的proxyBeanMethods属性 在Configuration注解中,有两个属性: value配置Bean名称proxyBeanMethos,默认是true 这个proxyBeanMethods的默认属性是true。 直接说:当Configuration注解的proxyBeanMeathods属性是true…...
dp1,ACM暑期培训
D - 摆花 P1077 [NOIP2012 普及组] 摆花 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) Description 小明的花店新开张,为了吸引顾客,他想在花店的门口摆上一排花,共 m 盆。通过调查顾客的喜好,小明列出了顾客最喜欢的 n 种花&…...
大厂程序员的水平比非大厂高很多嘛?
最近一个月,筛选了一百多份简历,前前后后面试了二三十人,基本上都是有大厂经历的人。同时,也录用了几个有大厂经历的。但整体而言,打破了对大厂出来的都是优质人才的幻觉。看到的实际情况与想象中的落差还是比较大的。…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...
Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...
云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...
使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...
1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...
SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...
mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...
