专业的社区

在Burp Suite中与HTTP/2合作

  • 最近更新时间:2022年4月6日

  • 阅读时间:7分钟

现在,许多服务器支持HTTP/2。这使他们暴露于潜在的漏洞,这些漏洞无法测试使用仅使用HTTP/1的工具。Burp Suite为基于HTTP/2的测试提供了无与伦比的支持,使您可以以其他工具无法使用的方式处理HTTP/2请求。您可以:

  • 使用消息编辑器中的请求的HTTP/1风格表示

    打bur归一化您进行的任何更改并将等效的HTTP/2请求发送到服务器。在您使用的协议并不重要的情况下,这非常适合一般测试。

  • 在检查员中与HTTP/2视图一起工作

    这显示了将发送到服务器的标题和伪标头的更准确表示。由于此视图不依赖任何HTTP/1语法,因此它还使您可以使用多个http/2-排定向量

Burp独特的HTTP/2功能使您有机会探索一个全新的攻击表面,由于到目前为止完全缺乏任何合适的工具,该攻击表面几乎没有审核。有关可能可能发生的事情的一些现实示例,请查看我们的一位研究人员如何使用这些功能来识别和利用广泛的新向量进行申请走私。

beplay官网可以赌港口研究

背景概念

在引擎盖下,HTTP/2与HTTP/1大不相同。为了帮助您充分利用这些功能,我们提供了一个简要概述相关的背景概念。

默认协议

默认情况下,BURP对所有在TLS握手期间通过ALPN广告支持的服务器会说HTTP/2。这样可以确保,即使您不进行任何特定于协议的测试,您仍然可以利用HTTP/2提供的性能改进。

您还可以根据您的当前需求来量身定制这种行为更改默认协议为该项目。如果您要执行测试需要始终使用http/1,这将很有用。您仍然可以通过切换检查器中的协议如有必要。

跟踪您正在使用的协议

在测试协议级别漏洞时,重要的是您必须知道每个请求都使用哪种协议。在许多地方显示此信息:

  • 在消息编辑器中,请求行和状态行包含协议版本。这是HTTP/1消息的标准,但也适用于编辑器的HTTP/2消息的表示。

  • 在Burp Repeater中,当前协议显示在目标主机旁边的屏幕右上角。

  • 在检查员中,请求属性部分显示协议版本。在不可编辑的情况下,例如在代理历史记录中,突出的协议纯粹是信息的。对于您在Burp代理中拦截或发送给Burp Repeater的要求,您可以切换您要使用哪种协议发送请求。

更改请求的协议

不管你默认协议设置,您可以手动选择用于发送每个请求的协议。为此,请在下面使用切换开关检查器>请求属性

当您更改协议时,BURP会执行必要的转换,以针对新协议以正确格式生成等效请求。这意味着您可以根据需要轻松升级和降级单个请求。

默认情况下,只有在TLS握手期间通过ALPN明确广告支持此服务,您只能将请求升级到HTTP/2。如果您想尝试发送HTTP/2请求以测试隐藏的HTTP/2支持,则首先需要启用允许HTTP/2 ALPN替代来自中继器菜单。

笔记

在检查器中工作时,可以创建一个无法使用HTTP/1语法准确表示的HTTP/2请求而不会丢失信息。Burp称此为“水壶“请求。如果您尝试降级这样的请求,请警告您,必须将请求进行标准化,以便可以在编辑器中显示。

水壶请求

Inspector使您能够创建HTTP/2请求,这些请求不可能使用HTTP/1语法准确表示而不会丢失信息。为了纪念我们臭名昭著的研究主任詹姆斯·凯特尔(James Kettle),我们创造了“水壶”一词来描述此类要求。

例如,从技术上讲是可以添加newline字符的里面HTTP/2中的标题值。无法在http/1中显示这一点,因为newline表示标头的末端,因此,在此之后的任何内容似乎都是下一个标题名称的开始。

一旦请求被调用,消息编辑器将不再尝试显示其等效的HTTP/1。您仍然可以看到消息的正文,但是代替标题,Burp将显示一条通知,告诉您为什么要被视为水壶。如果您想进一步更改水壶请求的标题,则需要使用检查员。

笔记

Burp代理,中继器,Logger和Scanner目前支持Kettled请求。如果您将水壶请求发送给不支持它们的工具,例如入侵者,则将其归一化,以便可以在编辑器中显示。

什么会导致请求成为水壶?

每当您使用检查员进行以下更改时,请求就会变得ketter缩:

  • 在标题名称中添加大写字母或结肠。

  • 将newline字符添加到标题名称或值中。

  • 修改值:方案伪头。

  • :小路或者:方法伪头。

  • 添加重复的伪标头。

  • 在cookie值中添加半隆和空间字符。

解开请求

如果您不小心的请求,则有许多可以解钉的选项。你可以:

  • 使用您的更改使用ctrl/cmd + z钥匙。

  • 使用检查员手动扭转导致请求的特定更改。检查编辑器中的通知,以查看您需要进行的更改。

  • 使用检查器中的切换将请求降级到http/1,并解散警告,告诉您您的更改将丢失。Burp将使请求正常化,有效地丢弃与HTTP/1不相容的任何更改。

水壶请求和扩展

扩展可以生成并发出新的水壶请求,因此您已经可以为基于HTTP/2的测试开发自己的扩展名。但是,目前,扩展名无法修改Burp最初发出的水壶请求。这是因为他们只能访问BURP请求的归一化,HTTP/1式表示。

http/2设置

在整个BURP中都有许多设置,可让您在使用HTTP/2时调整其行为。

更改默认协议

默认情况下,BURP对所有在TLS握手期间通过ALPN广告支持的服务器会说HTTP/2。但是,您可以更改默认协议,以便它使用HTTP/1,除非您明确告诉它发送HTTP/2请求。为此,去项目选项> http> http/2并取消选择如果服务器支持它,则默认为http/2选项。

如果您专注于专门需要HTTP/1的漏洞,例如Classic,您可能需要这样做cl.te或te.cl请求走私

您仍然可以通过使用协议在下面切换检查器>请求属性

HTTP/2的中继器选项

来自中继器屏幕顶部的菜单,您可以在处理HTTP/2请求时访问以下选项,以控制Burp中继器的行为。

执行跨域重定向的协议选择

默认情况下,当重定向交叉域时,Repeater将作为正常协议协商。如果启用此选项,它将遵循使用在下面选择的相同协议的任何跨域重定向检查器>请求属性。当测试触发跨域请求的HTTP/2特异性漏洞时,这一点很重要。

启用HTTP/2连接重用

默认情况下,Repeater重用多个HTTP/2请求的相同连接。一些服务器对每个连接的第一个请求都与后续请求不同,这可能导致漏洞出现间歇性甚至完全被错过。在其他服务器上,有时请求会破坏连接,而不会导致服务器拆除,从而默默地影响了所有后续请求的处理方式。

如果您遇到这些问题中的任何一个,则可以通过禁用此选项来减轻它们,以便您发送的请求始终是连接上的第一个。

http/2的带连接标头

默认情况下,当http/2请求包含一个联系标题,在将请求发送到服务器之前,请bur绑它。这是因为许多HTTP/2服务器会拒绝包含此标头的请求。

如果您想尝试发送联系无论如何,您可以禁用此选项。

允许HTTP/2 ALPN替代

即使服务器不通过ALPN广告HTTP/2支持,启用此设置也可以从BURP中继器发送HTTP/2请求。这使您可以探索任何“隐藏的http/2”攻击表面bepaly下载 或手动测试隐藏的HTTP/2支持。

禁用http/2用于代理听众

在某些极少数情况下,例如客户在其HTTP/2实现方面存在问题时,您可能希望在客户端和Burp的代理侦听器之间的连接上禁用HTTP/2。为此,去代理>选项,选择相关的侦听器,然后单击编辑。在对话框中,转到HTTP/2选项卡,取消选择支持HTTP/2复选框。然后,即使客户要使用HTTP/2,BURP将仅在此连接上接受HTTP/1。

请注意,这不会影响Burp和服务器之间的连接。

Burp中HTTP/2的即将增强

BURP的HTTP/2支持有一些局限性。我们目前正在研究以下增强功能。

增加对水壶请求的支持

目前,Burp的一些工具无法处理Burp Intruder。我们的目标是使您能够在Burp的所有工具中处理水壶请求。