我目前正在测试一个站点,其中主机头用于创建恢复电子邮件链接。但是,当我试图操作Burp中的主机头时,我会收到一条HTTP 400消息,其中说我使用的是无效的主机名。即使我只试图篡改GET /或任何其他请求的主机头,也会出现此错误。
我最初的想法是,由于它是Azure上的Azure,主机没有找到,在服务器上也没有绑定,因此无法工作。但是,在同一个application服务器上,还有一个托管的应用程序允许我对其进行测试。当我添加一个我知道存在于该服务器上的主机头时,我仍然会得到相同的HTTP 400错误。
微软采取了什么措施来防止这种情况?
Ping检查域是否位于同一服务器上:

示例请求、已编辑的主机和目标,但两个域位于同一台服务器上。

消息总是一样的:
HTTP/1.1 400 Bad Request
Content-Type: text/html; charset=us-ascii
Server: Microsoft-HTTPAPI/2.0
Date: Fri, 06 Oct 2017 07:28:25 GMT
Connection: close
Content-Length: 334
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd">
<HTML><HEAD><TITLE>Bad Request</TITLE>
<META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii"></HEAD>
<BODY><h2>Bad Request - Invalid Hostname</h2>
<hr><p>HTTP Error 400. The request hostname is invalid.</p>
</BODY></HTML>我可以向请求中添加一个X-Forwarded-Host: mydomain.com,它将通过,但不会作为主机拾取头部。
https://www.acunetix.com/blog/articles/automated-detection-of-host-header-attacks/
发布于 2017-10-06 08:48:11
试试看自己回答这个问题。负责发送电子邮件的代码如下所示:
await emailRepository.SendResetPasswordTokenAsync(Url.Action("ResetPassword", "Authentication", new { token.Token }, Request.Url.Scheme), model.Email, token.User.FullName);易受伤害的部分是:
Url.Action("ResetPassword", "Authentication", new { token.Token }, Request.Url.Scheme)我在我的机器上创建了一个应用程序,并尝试使用IIS Express创建URL,并更改了主机,得到了完全相同的错误。我认为发生此错误是因为没有默认绑定,而且请求是使用HTTPS发出的。如果我将请求更改为使用标准HTTP,主机头将被解释,在下面的请求中,我将以domain2结束。

不过,我也尝试过使用本地IIS和绑定来捕获端口80上的所有内容。使用与易受攻击的应用程序相同的代码,我能够操作主机:
代码:
public ActionResult Index()
{
var host = Request.Headers["host"];
ViewBag.Title = $"Host: {host} Url Created: {Url.Action("Index", "Home", "", Request.Url.Scheme)}";
return View();
}
https://security.stackexchange.com/questions/170755
复制相似问题