我最近读到了关于请求走私的文章。这是一次我不知道的非常有趣的袭击。最近在斯拉克发现了一个漏洞,并负责任地披露了这一点,并颁发了赏金。
这篇链接文章说:
当前端服务器将HTTP请求转发给后端服务器时,通常会通过同一个后端网络发送多个请求。
请求走私使用的事实是,多个请求跨越一个连接。
我的问题是:这种联系是什么?我是人际关系网的新手。我知道连接有多个层: IP、TCP、SSL。请解释一下这个连接存在的层是什么?
更新:如果有人可以包括一个示例(最好是Python中的例子),说明如何在同一个连接上发送多个请求,那将是有帮助的。
发布于 2020-03-14 12:53:44
这是关于TCP连接(有和没有TLS)。通过HTTP保持活动,可以在相同的TCP连接中互相发送多个HTTP请求,这取决于HTTP堆栈是否正确地区分请求从何处开始和在何处结束。
由于HTTP标准的复杂性和在某些情况下的模糊性,可以创建HTTP请求序列,其中不同的HTTP堆栈(即前端和后端服务器)在请求开始结束时有不同的想法。这些解释差异允许HTTP请求走私。
发布于 2021-02-24 17:27:35
只是对@steffen反应的补充,这是对的。
HTTP/HTTPS协议基于TCP/IP连接。一旦建立了TCP/IP连接,就可以在HTTP请求和响应的往返过程中使用,但也可以保持打开(保持活动模式)。连接保持活动的事实由双方( HTTP客户端和服务器)控制,服务器可以在任何时候关闭它(通常发送连接: close头告诉客户端它将关闭),客户机也可以随时关闭它。
HTTP/1.1在Keepalive机制的基础上引入了另一个层,即HTTP管道。您可以在TCP/IP连接上发送多个请求,而不是等待每个响应之间的响应,这是走私攻击中的一个关键组件,因为您可以使用该组件隐藏多个请求并获得多个响应,而链中的一些参与者只看到一个传入的请求。
是的,因为他们不仅仅是客户端和服务器的角色。要解决一些走私问题,您需要有一个角色链(负载平衡器、反向代理缓存)作为代理。它们接收来自客户端的HTTP请求(通过tcp/ip连接),建立到后端的tcp/ip连接(并可能将该连接存储在本地池中),并将请求转发到后端(充当此后端的HTTP客户端)。因此,如果您跟踪所有的连接,您不只是一个,而是几个步骤之间的参与者。走私攻击需要针对这些行为者之一,在这些行为体中,提出的请求或答复的数量将不同于以前的行为体。
现在,如果您想要编写seevral查询的例子,您可以在python中的套接字中发送文本,甚至在bash中使用printf发送文本,在nc中发送套接字(或者openssl_client(如果它位于https上)。
我曾经用回声和telnet写过一个例子..。是的,在这里:https://stackoverflow.com/questions/19619124/http-pipelining-request-text-example/19621514#19621514,所以连接是由telnet管理的(但是nc或netcat通常更好),并且由自己来管理客户端的http协议。
如果您漫游什么是HTTPS连接,它也是tcp/ip连接,其中HTTP协议用于请求和响应消息。但是仅仅在这两个层(tcp/ip & http)之间添加了另一个层(ssl或TLS),在参与者之间交换了一些消息,以选择加密通信的权利。该层为任何读取tcp/ip流的人混淆HTTP消息,但对于客户机和服务器,HTTP协议的文本内容是从层中提取出来的,它只是简单的HTTp。因此,走私攻击通常不会受到HTTPS的影响。
https://security.stackexchange.com/questions/227295
复制相似问题