TryHackMe - HTTP Request Smuggling

学完、打完后的复习

HTTP 1

这部分比较简单,直接略过

HTTP2请求走私

首先要了解HTTP2的结构,与HTTP1之间的一些差异

在这里插入图片描述

HTTP2中不再使用CRLF来作为字段的边界限定,而是在二进制中直接通过长度、名字、值长度、值,来确认边界

而这里教导的主要场景是在前端代理使用HTTP2,而后端使用HTTP 1.1

虽然HTTP2并不会处理Content-Length和Transfer-Encoding,但在上述场景下,前端代理将把http2转为http1.1然后转发给后端处理。

所以一旦我们为http2请求添加CL或TE,并在post form添加http 1.1的请求头,即常规http1的请求走私打法,前端代理将http2转http1.1交给后端后,我们的走私请求将会逃出来

在这里插入图片描述

在这里插入图片描述

CRLF

除了CL和TE,还有另一种方法在上述场景中实现请求走私,就是CRLF,通过在http2请求头中的请求头里面注入CRLF并构造走私请求payload,那么在前端代理转发给后端时依然能够实现http请求走私

在这里插入图片描述

在某些代理实现中,每个用户将获得自己的后端连接,以将他们的请求与其他用户分开。每当发生这种情况时,攻击者将无法影响其他用户的请求。乍一看,如果局限于我们自己的连接,我们似乎做不了多少事情,但我们仍然可以通过前端代理走私请求并取得一些结果。由于我们只能将请求走私到我们的连接,因此这种情况通常称为请求隧道。

在这里插入图片描述

泄露内部标头

这一点也非常简单,前提是存在回显点,后面的靶机中有这个例子

在这里插入图片描述

绕过前端代理限制

同上,前端代理做了访问控制,但后端没有,我们就可以通过请求走私来绕过前端代理,将走私请求送到后端,此时我们再次发起http请求 接住走私请求以获得走私的响应

WebSocket 走私

第一种就是简单的欺骗前端代理

Sec-WebSocket-Version: 777
Connection: Upgrade
Upgrade: websocket

将Sec-WebSocket-Version字段设为目标不支持的版本,此时,前端代理不验证后端是否升级websocket成功(code 101)和失败(code 426),所以只有前端代理与我们使用websocket进行通信,而前端代理到后端依然使用http进行通信

我们就可以在websocket中携带恶意http请求头以实现走私

在这里插入图片描述

请注意,某些代理甚至不需要存在 WebSocket 端点即可使该技术发挥作用。我们所需要做的就是欺骗代理,让其相信我们正在建立与 WebSocket 的连接,即使事实并非如此。看看如果您尝试发送以下有效负载会发生什么(请确保在 Burp 中的有效负载后添加两个换行符)

绕过安全代理

那么,如果前端代理会验证后端是否升级成功(code 101),在这里,thm教导我们可以寻找SSRF来帮助我们做到这一点。

通过ssrf访问我们托管的http服务器,当我们触发ssrf时,目标访问我们的恶意http服务器,我们就可以控制我们的http服务器返回 code 101,表示升级成功,此时前端代理就会认为升级成功,后续攻击者到前端代理都将使用websocket通信,而事实上后端仍然使用http

HTTP 浏览器异步

keep-alive: 允许对多个 HTTP 请求和响应重复使用单个 TCP 连接

在这里插入图片描述

http 管道: 如果后端服务器启用了 HTTP 管道,它将允许同时发送两个请求和相应的响应,而无需等待每个响应。区分两个请求和一个大请求的唯一方法是使用 Content-Length 标头

在这里插入图片描述

HTTP 浏览器异步利用链接 XSS,也比较简单,略过

El Bandito

这里是打完靶机后的复盘,只有细节部分

nmap

在这里插入图片描述

我们在8080中有一个SSRF

在这里插入图片描述

8080存在websocket走私,前端代理会验证websocket是否升级成功

在这里插入图片描述

结合前面的ssrf,我们就可以完全照搬前面thm教导的技巧来绕过前端代理的验证

最后payload如下图,我们可以得到一组凭据以及靶机的第一个flag:

在这里插入图片描述

最后回到80端口,存在http2请求走私,通过CL或者是http2请求头CRLF注入来实现走私,结合/send_message端点可以发送消息,借此通过走私来获取受害者标头,通过/getMessages来获取回显信息。

在这里插入图片描述

最后一个flag则在标头中

在这里插入图片描述

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

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

相关文章

Leetcode算法训练日记 | day21

一、二叉搜索树的最小绝对差 1.题目 Leetcode:第 530 题 给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。 差值是一个正数,其数值等于两值之差的绝对值。 示例 1: 输入:root [4,2,…

不到6毛钱的I2C总线实时时钟日历芯片LK8563

前言 8563实时时钟芯片,国内外均有多家生产,今推荐一个性价比极高的RTC芯片,LK8563,一片不到6毛钱. 特点 基于32.768kHz晶体的秒,分,小时,星期,天,月和年的计时 带有世…

Redis系列之基于Linux单机安装

Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的 API。最近学习需要用到Redis,所以就去Linux服务器上部署一个,做下记录,方便…

web安全学习笔记【22】——文件上传(1)

WEB攻防-PHP应用&文件上传&函数缺陷&条件竞争&二次渲染&黑白名单&JS绕过 演示案例: PHP-原生态-文件上传-前后端验证PHP-原生态-文件上传-类型文件头验证PHP-原生态-文件上传-后缀黑白名单验证PHP-原生态-文件上传-解析配置&二次渲染…

JUC 线程及创建线程

最近想再系统地复习一遍并发,随便再把以前整理的笔记整理为博客。 概念 了解线程前先要了解一下进程,进程是程序的一次执行过程,是系统运行的基本单位,其可以拥有资源,一个进程在执行期间会执行一系列的命令。 什么…

华为OD机试真题-模拟数据序列化传输 -2024年OD统一考试(C卷)

题目描述: 模拟一套简化的 序列化只 传输方式,请实现下面的数据编码与解码过程 1、编码前数据格式为 [位置,类型,值],多个数据的时候用逗号分隔,位置仅支持数字,不考虑重复等场景;类型仅支持:Integer/String/Compose(Compose的数据类型表示该存储的数据也需要编码) 2.编码…

【攻防世界】Confusion1

php的标志是大象,Python的标志是蛇 。Python 的 Flask 框架( Flask 使用 Jinja2 作为模板引擎 ) 点进register.php 输入{{3*4}} 输入 {{config}} 也有回显,ssti 判断是否存在ssti注入: 1. {{8*8}} 2. {{config}} 过滤了关键字&#xff0…

二、显示图片、提取边缘特征并保存(C# + OpenCV)

实现功能: 1,打开照片,并显示 2,对选择的照片进行Canny边缘检测 3,保存边缘检测之后的结果 一、布局 打开在视图下打开工具箱 选择一个PictureBox,仨Button 对Button改个名字 仨Button,分别…

Python从0到100(十二):函数的定义及模块

前言: 零基础学Python:Python从0到100最新最全教程。 想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Pyth…

AI大模型探索之路-应用篇2:Langchain框架ModelIO模块—数据交互的秘密武器

目录 前言 一、概述​​​​​​​ 二、Model 三、Prompt 五、Output Parsers 总结 前言 随着人工智能技术的不断进步,大模型的应用场景越来越广泛。LangChain框架作为一个创新的解决方案,专为处理大型语言模型的输入输出而设计。其中,…

设计模式(22):解释器模式

解释器 是一种不常用的设计模式用于描述如何构成一个简单的语言解释器,主要用于使用面向对象语言开发的解释器和解释器设计当我们需要开发一种新的语言时,可以考虑使用解释器模式尽量不要使用解释器模式,后期维护会有很大麻烦。在项目中&…

【Redis】持久化

文章目录 一、RDB1.1、RDB的自动备份与手动备份1.1.1、自动备份1.1.2、手动备份 1.2、RDB优点1.3、RDB缺点1.4、RDB快照1.5、RDB优化配置项 二、AOF2.1、AOF工作流程2.2、AOF写回策略2.3、MP-AOF实现2.4、AOF优缺点2.5、AOF重写机制 三、RDBAOF混合持久化3.1、数据恢复顺序和加…

阿里云OSS使用流程

准备工作 无论怎么样,你需要准备一个阿里云账号,点击:注册阿里云 输入相关信息,然后注册成功以后,点击 然后注册成功了,实名一下阿里云账号。打开实名入口,选择个人实名或者企业实名。 如果你…

windows wireshark抓包rtmp推流出现TCP Retransmission

解决办法:tcp.port1935 && !(tcp.analysis.retransmission)

签名失败当前系统没有安装苹果根证书

发生背景 第一次我没有iOS证书(.p12)和描述文件(.mobileprovision)。按照这个文档https://ask.dcloud.net.cn/article/152拿到后,安心打包出问题。 错误信息 [Info] begin getCertCName... [Info] begin codesignFramwork to ipa... [Error] DCUniBase.framework…

设计模式系列:单例模式

作者持续关注WPS二次开发专题系列,持续为大家带来更多有价值的WPS开发技术细节,如果能够帮助到您,请帮忙来个一键三连,更多问题请联系我(WPS二次开发QQ群:250325397),摸鱼吹牛嗨起来&#xff01…

RabbitMQ如何保证消息的幂等性???

在RabbitMQ中,保证消费者的幂等性主要依赖于业务设计和实现,而非RabbitMQ本身提供的一种直接功能。 在基于Spring Boot整合RabbitMQ的场景下,要保证消费者的幂等性,通常需要结合业务逻辑设计以及额外的技术手段来实现。以下是一个…

嵌入式学习51-单片机4

知识零碎: nop空指令 CRC校验 为了保证51单片与温度传感18b20 之间的高电平 采用一个上拉电阻改变电平的高低 温度寄存器原理

react17+antd4 动态渲染导航菜单中的icon

在路由信息对照表中的icon可以有两种形式:一种是组件形式,一种是字符串形式的。 在antd4的Menu.Item和SubMenu中的icon属性的格式为: 1.组件形式 这种方法在渲染时很方便,与antd中的Menu.Item中的icon属性的形式是一致的&#…

51单片机+TN901非接触式红外测温设计论文与源码PCB等资料

1、摘要 温度测量技术应用十分广泛,而且在现代设备故障检测领域中也是一项非常重要的技术。但在某些应用领域中,要求测量温度用的传感器不能与被测物体相接触,这就需要一种非接触的测温方式来满足上述测温需求。本论文正是应上述实际需求而设…