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则在标头中

在这里插入图片描述

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

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

相关文章

数据仓库的概念和作用?如何搭建数据仓库?

随着企业规模的扩大和数据量的爆炸性增长,有效管理和分析海量数据成为企业数字化转型的关键。而在互联网的普及过程中,信息技术已深入渗透各行业,逐渐融入企业的日常运营。然而,企业在信息化建设中面临了一系列困境和挑战&#xf…

https的配置和使用(以腾讯云为例)

1、注册域名 2、获取证书 3、下载证书 下载下来的证书所有格式 4、在服务器上下载nginx并配置 nginx的配置文件 如下 server {listen 80;listen 443 ssl;server_name delegate.letspiu.net.cn;ssl on; #开启ssl#指定证书位置ssl_certificate /etc/ss…

JRT判断数据是否存在优化

有一种业务情况类似下图,质控能做的项目是仪器关联的项目。这时候维护质控物时候开通项目时候要求加载仪器项目里面的项目(没有开通的子业务数据的部分)。对右边已经开通的部分要求加载仪器项目里面的项目(有开通业务子数据的部分…

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

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

SQL注入sqli_libs靶场第一题

第一题 联合查询 1)思路: 有回显值 1.判断有无注入点 2.猜解列名数量 3.判断回显点 4.利用注入点进行信息收集 爆用户权限,爆库,爆版本号 爆表,爆列,爆账号密码 2)解题过程&#xff1…

GitHub 仓库 (repository) Pulse - Contributors - Network

GitHub 仓库 [repository] Pulse - Contributors - Network 1. Pulse2. Contributors3. NetworkReferences 1. Pulse 显示该仓库最近的活动信息。该仓库中的软件是无人问津,还是在火热地开发之中,从这里可以一目了然。 2. Contributors 显示对该仓库进…

easyExcel - 动态复杂表头的编写

目录 前言一、情景介绍二、问题分析三、代码实现方式一:head 设置方式二:模板导出方式三:自定义工具类 前言 Java-easyExcel入门教程:https://blog.csdn.net/xhmico/article/details/134714025 之前有介绍过如何使用 easyExcel&…

Jmeter02-2:参数化组件其他方式

0、Jmeter组件:参数化概述 0.1 是什么? 参数化是动态的获取并设置数据 0.2 为什么? 比如执行批量操作时,批量插入或批量删除,之前数据都是手写的,每执行完都要修改一次,效率太低 而参数化就是…

Python代码识别minist手写数字【附pdf】

一、概述 对于人类而言,要识别图片中的数字是一件很容易的事情,但是,如何让机器学会理解图片上的数字,这似乎并不容易。那么,能否找出一个函数(模型),通过输入相关的信息&#xff0…

网络基础三——IP协议补充和Mac帧协议

全球网络及网段划分的理解 ​ 根据国家组织地区人口综合评估进行IP地址范围的划分; ​ 假设前8位用来区分不同的国家,国际路由器负责全球数据传输,子网掩码为IP/8;次6位区分不同的省份,国内路由器负责全国数据的传输…

jvm调优案例分析-window通过jstack查找死锁的进程

我们经常会遇到java程序遇死锁的问题,也会经常遇到。 案例 以下是案例代码: package com.dzend.mall.order;public class JstackLockDemo {public static final int initData 666;public static User user new User();public int compute(){int a1;i…

Window安装PostgresSQL

PostgreSQL 安装参考:Windows下安装PostgreSQL_window 安装postgresql-CSDN博客 安装好后打开pgAdmin4 配置Navicat连接PostgresSQL 找到安装目录文件 pg_hba.conf 修改配置增加: 修改前: # TYPE DATABASE USER ADDRES…

登录压力测试

目录 一、准备测试数据 1.1数据库存储过程添加数据 1.2导出为csv作为测试数据(账号、密码) 二、使用fiddler抓包查看接口 2.1.抓到相关接口信息 2.2添加线程组和http请求 2.3将前面接口需要的参数去json格式化 ​2.4填写相关信息 ​ 2.5添加http…

vue canvas绘制信令图,动态显示标题、宽度、高度

需求: 1、 根据后端返回的数据,动态绘制出信令图 2、根据 dataStatus 返回值: 0 和 1, 判断 文字内容的颜色,0:#000,1:red 3.、根据 lineType 返回值: 0 和 1, 判断 箭…

20240309web前端_第三周作业_教务系统页面

作业&#xff1a;教务系统页面 成果展示&#xff1a; 完整代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1…

Verilog实现手表计时

实现手表的计时功能&#xff1a; 1.具有start启动信号、pause暂停信号&#xff0c;可以自定义其触发机制。 2.具有时间更改接口&#xff0c;可以更改时、分、秒。 3.输出时、分、秒。 Verilog设计 模块端口定义&#xff1a; module watch1(input wire clk …

STC89C52学习笔记(七)

STC89C52学习笔记&#xff08;七&#xff09; 综述&#xff1a;本文介绍了串口以及讲述了串口相关寄存器如何配置并给予相关代码。 一、修改代码注意事项 在修改代码时不要一次性加入一堆代码&#xff0c;不利于定位错误。可以先注释一些代码&#xff0c;待解决完毕问题后再…

Angular 使用DomSanitizer

跨站脚本Cross-site scripting 简称XSS&#xff0c;是代码注入的一种&#xff0c;是一种网站应用程序的安全漏洞攻击。它允许恶意用户将代码注入到网页上&#xff0c;其他用户在使用网页时就会收到影响&#xff0c;这类攻击通常包含了HTML和用户端脚本语言&#xff08;JS&…

ES6基础(JavaScript基础)

本文用于检验学习效果&#xff0c;忘记知识就去文末的链接复习 1. ECMAScript介绍 ECMAScript是一种由Ecma国际&#xff08;前身为欧洲计算机制造商协会&#xff0c;英文名称是European Computer Manufacturers Association&#xff09;通过ECMA-262标准化的脚本程序设计语言…

基于拉格朗日分布算法的电动汽车充放电调度MATLAB程序

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 程序简介 该模型主要做的是基于拉格朗日分布算法的电动汽车充放电调度模型。利用蒙特卡洛模拟法模拟出电动汽车负荷曲线&#xff0c;并求解出无序充电功率曲线和有序充电曲线&#xff0c;该模型在电动汽车个…