portswigger——Response queue poisoning(响应队列中毒)_02

发布时间 2023-09-02 11:39:24作者: JKding233

响应队列中毒

响应队列中毒是一种强大的请求走私攻击形式,它会导致前端服务器开始将响应从后端映射到错误的请求。实际上,这意味着同一前端/后端连接的所有用户都将获得针对其他人的持久响应。

这是通过走私一个完整的请求来实现的,从而在前端服务器只期望一个响应时从后端引发两个响应。

响应队列中毒有什么影响?

响应队列中毒的影响通常是灾难性的。一旦队列中毒,攻击者只需发出任意的后续请求即可捕获其他用户的响应。这些响应可能包含敏感的个人或业务数据,以及会话令牌等,这实际上授予攻击者对受害者帐户的完全访问权限。

响应队列中毒还会导致严重的附带损害,有效地破坏任何其他用户的站点,这些用户的流量通过同一TCP连接发送到后端。在尝试正常浏览站点时,用户将收到来自服务器的看似随机的响应,这将阻止大多数功能正常工作。

如何构造响应队列中毒攻击

要成功进行响应队列中毒攻击,必须满足以下条件:

  • 前端服务器和后端服务器之间的 TCP 连接在多个请求/响应周期中重复使用
  • 攻击者能够成功走私一个完整的独立请求,该请求从后端服务器接收自己的独特响应。
  • 该攻击不会导致任一服务器关闭 TCP 连接。服务器通常在收到无效请求时关闭传入连接,因为它们无法确定请求应该在哪里结束。

了解请求走私的后果

请求走私攻击通常涉及走私部分请求,服务器将其作为前缀添加到连接上下一个请求的开头。请务必注意,走私请求的内容会影响初始攻击后连接发生的情况。

如果您只是偷运一个带有一些标头的请求行,假设不久之后在连接上发送了另一个请求,则后端最终仍会看到两个完整的请求。

如果您改为走私也包含正文的请求,则连接上的下一个请求将追加到走私请求的正文中。这通常具有基于明显 .因此,后端有效地看到三个请求,其中第三个“请求”只是一系列剩余的字节:Content-Length

前端 (CL)

后端 (TE)

由于这些剩余字节不构成有效请求,这通常会导致错误,导致服务器关闭连接。

走私完整的请求

只要小心一点,您就可以走私一个完整的请求,而不仅仅是一个前缀。只要您一次发送两个请求,连接上的任何后续请求都将保持不变:

前端 (CL)

后端 (TE)

请注意,没有无效请求到达后端,因此连接在攻击后应保持打开状态。

取消同步响应队列

当您走私一个完整的请求时,前端服务器仍然认为它只转发了一个请求。另一方面,后端看到两个不同的请求,并将相应地发送两个响应:

前端将第一个响应正确映射到初始“包装器”请求,并将其转发到客户端。由于没有进一步的请求等待响应,因此意外的第二个响应将保留在前端和后端之间连接的队列中。

当前端收到另一个请求时,它会照常将其转发到后端。但是,在发出响应时,它会发送队列中的第一个响应,即剩余的响应到走私请求。

然后,来自后端的正确响应将没有匹配的请求。每次将新请求通过同一连接转发到后端时,都会重复此循环。

窃取其他用户的回复

一旦响应队列中毒,攻击者只需发送任意请求即可捕获其他用户的响应。

他们无法控制他们收到哪些响应,因为他们将始终被发送到队列中的下一个响应,即对前一个用户请求的响应。在某些情况下,这的兴趣有限。但是,使用Burp Intruder等工具,攻击者可以轻松地自动执行重新发出请求的过程。通过这样做,他们可以快速获取针对不同用户的各种响应,至少其中一些可能包含有用的数据。

只要前端/后端连接保持打开状态,攻击者就可以继续窃取此类响应。关闭连接的确切时间因服务器而异,但常见的默认设置是在处理了 100 个请求后终止连接。一旦当前连接关闭,重新毒害新连接也是微不足道的。

为了更轻松地区分被盗响应和对您自己的请求的响应,请尝试在您发送的两个请求中使用不存在的路径。这样,您自己的请求应该始终收到 404 响应。