请求未到达服务器(主机标头注入)

时间:2020-05-31 07:14:42

标签: laravel http-headers burp

我有一个项目,客户的要求是防止主机头注入攻击。我在应用程序级别处理了该问题,创建了一个中间件,该中间件检查传入的“ Host”标头,然后在不属于受信任标头的情况下中止(403)。问题是如何测试此代码,因为我对安全性测试了解不多。我了解到有一个Burp Suite代理工具可以拦截任何请求并编辑标题,所以我做到了。但是,我得到一个非常奇怪的行为:编辑主机头时,请求甚至没有到达我的服务器。

请允许我解释这种情况。我在密码重置页面上,即GET /lender/password/reset。在此页面上,我们必须输入电子邮件地址并单击“重置”按钮,该按钮将POST发送到/lender/password/email,然后重定向回GET /lender/password/reset(Laravel开发人员将识别此标准的内置流程)。

enter image description here

因此,当我使用Burp工具并且不篡改标题时,该应用程序将按预期运行,但是当我更改“主机”(例如,更改为google.com)时,上述POST请求就会得到转换为GET请求,并且由于主机现在是新主机,它甚至无法到达应用程序。

请从下面的Burp工具历史记录中查看此屏幕截图(免费版不允许导出,但如有需要,我将其键入)。查看第468和469行:/lender/password/email的POST已转换为GET,然后在google.com上自然会有一个404。奇怪的是,第468行上有301重定向(显示应用程序的主机名),这不是正常流程的一部分。

enter image description here

我的问题是客户端正在使用它来声明我们的应用程序无法抵御这种攻击,而对我来说,似乎被篡改的请求甚至没有到达我们的服务器,并且出现了奇怪的301。理想的结果将是在收到错误的“主机”值时将用户送回。

最后,进行这种攻击的正确方法是什么?

0 个答案:

没有答案