高级请求走私
在本节中,我们将基于您到目前为止所学到的概念,并教您一些更先进的HTTP请求走私技术。我们还将介绍各种基于HTTP/2的攻击Burp独特的HTTP/2测试功能。不用担心您是http/2的新手 - 我们将介绍所有必需品。
特别是,我们会看:
HTTP/2实现如何实现一系列范围强大的新向量供要求走私,使许多以前安全的站点容易受到此类攻击。
您如何使用走私请求持续毒反应队列,有效地实现全站点接管。
如何使用HTTP/2-排定输入来构建高度利用即使目标不重复连接在前端和后端服务器之间。
为了帮助您练习所学的知识,我们一直在整个过程中提供了故意的脆弱实验室。这些基于我们的研究总监,第2021页首次在美国黑帽美国首先提出的现实漏洞。詹姆斯·凯特尔(James Kettle)。
beplay官网可以赌港口研究
http/2:续集总是更糟http/2请求走私
在本节中,我们将向您展示与普遍的信念相反,实施HTTP/2实际上已经使许多网站更容易受到要求走私的攻击,即使它们以前是免受此类攻击的保护。beplay体育能用吗
http/2消息长度
请求走私基本上是关于利用不同服务器如何解释请求长度之间的差异。HTTP/2引入了一种强大的机制来实现此目的,长期以来,人们一直认为它本质上可以免疫要求走私。
尽管您不会在打bur中看到这一点,但HTTP/2消息是通过电线作为一系列单独的“帧”发送的。每个帧之前都有一个显式的长度字段,该字段告诉服务器准确地读取了多少个字节。因此,请求的长度是其帧长度的总和。
从理论上讲,这种机制意味着攻击者没有机会引入请求走私所需的歧义,只要网站使用HTTP/2端到头。beplay体育能用吗然而,在野外,由于HTTP/2降级的广泛但危险的做法,通常并非如此。
http/2降级
HTTP/2降级是使用HTTP/1语法重写HTTP/2请求的过程,以生成等效的HTTP/1请求。beplay体育能用吗Web服务器和反向代理通常是为了为客户提供HTTP/2支持,同时与仅说HTTP/1的后端服务器进行通信。这种做法是本节中许多攻击的先决条件。
阅读更多
什么是HTTP/2降级?在http/2消息表示上注释
由于HTTP/2是二进制协议,因此我们使用了一些艺术许可来代表这些材料中的HTTP/2消息,以人为可读的格式表示:
我们将每个消息显示为一个实体,而不是单独的“帧”。
我们使用纯文本名称和值字段显示标题。
我们将伪标头的名称带有结肠,以帮助它们与普通标题区分开。
这与方式非常相似Burp代表HTTP/2消息在检查员中,请注意,它们实际上并没有在电线上看起来像这样。
H2.Cl漏洞
HTTP/2请求不必在标题中明确指定其长度。在降级期间,这意味着前端服务器通常添加HTTP/1内容长度
标题,使用其值HTTP/2的内置长度机制。有趣的是,http/2请求也可以包括自己的内容长度
标题。在这种情况下,某些前端服务器将简单地将此值重复使用,将此值重用。
规格指出任何内容长度
HTTP/2请求中的标头必须匹配使用内置机制计算的长度,但是在降级之前,这并不总是正确验证。结果,可以通过注入误导来走私请求内容长度
标题。尽管前端将使用隐式http/2长度来确定请求结束的位置,但HTTP/1后端必须参考该请求内容长度
标头源自您的注射量,导致DESYNC。
前端(HTTP/2)
:方法 | 邮政 |
:小路 | /例子 |
:权威 | 脆弱的website.beplay体育能用吗com |
内容类型 | 应用/X-WWW-Form-urlenCoded |
内容长度 | 0 |
get /admin http /1.1主机:脆弱的website.combeplay体育能用吗内容长度:10 x = 1 |
后端(HTTP/1)
帖子/示例http/1.1主机:脆弱的website.com content-tbeplay体育能用吗ype:application/x-www-form-urlencoded content-Length:0get /admin http /1.1主机:脆弱的website.combeplay体育能用吗内容长度:10 x = 1获取 / h
小费
在执行一些请求走私攻击时,您将希望受害者的请求中的标题附加到走私的前缀上。但是,在某些情况下,这些会干扰您的攻击,从而导致重复的标题错误等。在上面的示例中,我们通过包括尾随参数和一个内容长度
走私前缀中的标题。通过使用内容长度
标题比身体稍长,受害者的要求仍将附加到您的走私前缀上,但会在标题面前截断。
H2.TE漏洞
块的传输编码与HTTP/2不兼容,规格建议转移编码:分块
您尝试注入的标题应剥离或完全阻止请求。如果前端服务器无法执行此操作,并随后降低了支持块状编码的HTTP/1后端的请求,这也可以启用请求走私攻击。
前端(HTTP/2)
:方法 | 邮政 |
:小路 | /例子 |
:权威 | 脆弱的website.beplay体育能用吗com |
内容类型 | 应用/X-WWW-Form-urlenCoded |
转移编码 | 块 |
0 get /admin http /1.1主机:脆弱的website.combeplay体育能用吗 foo:bar |
后端(HTTP/1)
帖子/示例http/1.1主机:脆弱的website.com content-tbeplay体育能用吗ype:application/x-www-form-urlencoded转移 - 编码:块0get /admin http /1.1主机:脆弱的website.combeplay体育能用吗 foo:bar
如果网站容beplay体育能用吗易受到H2.CL或H2.TE请求走私的攻击,则您可以利用此行为来执行我们在我们中涵盖的相同攻击以前的请求走私实验室。
反应队列中毒
响应队列中毒是一个强大的请求走私攻击,使您能够窃取针对其他用户的任意响应,可能损害其帐户甚至整个网站。
阅读更多
反应队列中毒要求通过CRLF注射走私
即使网站采取步骤beplay体育能用吗来防止基本的H2.Cl或H2.TE攻击,例如验证内容长度
或剥离任何转移编码
标题HTTP/2的二进制格式可以绕过这些新型前端措施的一些新颖方法。
在http/1中,您有时可以利用服务器如何处理独立newline之间的差异(\ n
)字符以走私禁止的标题。如果后端将其视为定界线,但前端服务器不将其视为,则某些前端服务器将根本无法检测到第二个标头。
foo:酒吧\ n转移编码:分块
处理完整的CRLF并不存在这种差异(\ r \ n
)序列,因为所有HTTP/1服务器都同意这将终止标头。
另一方面,由于HTTP/2消息是二进制的,而不是基于文本的消息,因此每个标头的边界基于明确的,预定的偏移而不是定界器字符。这意味着\ r \ n
标题值不再具有任何特殊意义,因此可以包括在内里面值本身而不会导致标头被拆分:
foo | 酒吧\ r \ n转移编码:分块 |
这本身似乎相对无害,但是当将其重写为HTTP/1请求时,\ r \ n
将再次将其解释为标题定界符。结果,HTTP/1后端服务器将看到两个不同的标题:
foo:栏转移编码:分块
阅读更多
附加的HTTP/2-排定攻击向量http/2请求分裂
当我们看着反应队列中毒,您学会了如何将单个HTTP请求分为后端的两个完整请求。在我们查看的示例中,拆分发生在消息主体内部,但是当http/2降级时,您还可以导致此分裂发生在标题中。
这种方法更具用途,因为您不依赖于使用允许包含身体的请求方法。例如,您甚至可以使用得到
要求:
:方法 | 得到 |
:小路 | / |
:权威 | 脆弱的website.beplay体育能用吗com |
foo | 酒吧\ r \ n\ r \ n获取 /管理员http /1.1\ r \ n主持人:脆弱的website.cobeplay体育能用吗m |
这在情况下也很有用内容长度
已验证,后端不支持块编码。
考虑前端重写
要在标题中拆分请求,您需要了解前端服务器重写该请求的方式,并在手动添加任何HTTP/1标头时对此进行帐户。否则,其中一个请求可能缺少强制性标题。
例如,您需要确保后端收到的两个请求包含一个主持人
标题。前端服务器通常剥离:权威
伪标头并用新的HTTP/1代替它主持人
降级期间的标题。这样做有不同的方法,这可能会影响您需要定位的位置主持人
您要注射的标题。
考虑以下请求:
:方法 | 得到 |
:小路 | / |
:权威 | 脆弱的website.beplay体育能用吗com |
foo | 酒吧\ r \ n\ r \ n获取 /管理员http /1.1\ r \ n主持人:脆弱的website.cobeplay体育能用吗m |
在重写期间,一些前端服务器附加了新的主持人
标题到当前标题列表的末端。就http/2前端而言,这是foo
标题。请注意,这也是在后端分配请求的点之后。这意味着第一个请求将没有主持人
标题完全是,而走私的请求将有两个。在这种情况下,您需要定位注射主持人
标题,使得拆分发生后,它最终出现在第一个请求中:
:方法 | 得到 |
:小路 | / |
:权威 | 脆弱的website.beplay体育能用吗com |
foo | 酒吧\ r \ n主持人:脆弱的website.cobeplay体育能用吗m\ r \ n\ r \ n获取 /管理员http /1.1 |
您还需要调整要以类似方式注入的任何内部标头的定位。
小费
在上面的示例中,我们以触发的方式将请求分开反应队列中毒,但您也可以以这种方式走私前缀,以供经典请求走私攻击。在这种情况下,您的注射标头可能会与请求中的标头冲突,该请求将附加到后端的前缀附加到您的前缀,从而导致重复的标题错误或导致请求在错误的位置终止。为了减轻这种情况,您可以在走私的前缀中包含一个尾随的身体参数以及内容长度
标题比身体长一些。受害者的要求仍将附加到您的走私前缀上,但会在标题面前截断。
HTTP请求隧道
到目前为止,我们涵盖的许多请求走私攻击是可能的,因为前端和后端服务器之间的相同连接用于处理多个请求。HTTP Request Tunneling即使根本没有连接重复使用,也提供了一种制作高层利用的方法。