经典ASP:ServerVariables [" HTTP_HOST"]锻造

时间:2015-12-04 18:39:54

标签: security asp-classic header

根据此MSDN文章https://msdn.microsoft.com/en-us/library/ms525396(v=vs.90).aspx,这些变量是基于标头设置的。我很好奇HTTP_HOST变量是否可以欺骗。我已经进行了一些测试,表明它不可欺骗,但我想确定。

编辑:为了清楚起见,我很好奇,如果像服务器代理,中间人或者只是知道如何使用netcat的人可以伪造适当的标头以便在我的脚本中操作HTTP_HOST。 / p>

1 个答案:

答案 0 :(得分:1)

是的,它是可以欺骗的。

您网站的恶意用户可以在其HTTP请求中设置他们想要的任何host标头,HTTP_HOST变量将反映出:{/ p>

GET / HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)

唯一需要注意的是它必须绑定在您的网络服务器上。例如,如果使用IIS Web服务器,则指定网站绑定的主机。 “any”可以为空,也可以将其设置为特定域名。如果是后者,则攻击者发送

GET / HTTP/1.1
Host: www.foo.com
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)

到您的example.com域名不会访问您的example.com网站,但如果该网站本身正在运行并且如果这有空白绑定,则会访问默认的IIS网站。如果它没有运行,则返回错误。这些措施可以保护您免受攻击中的欺骗such as cache poisoning or spoofing malicious password reset emails

另请注意,HTTPS站点不使用主机标头。它们或者直接绑定到单个IP,或者使用服务器名称指示(SNI),它是作为TLS / SSL握手的一部分发送的,以确定请求所针对的网站。 IIS 8及更高版本支持SNI,这引入了每个绑定证书,其解释方式与普通HTTP的主机头相同。请注意,攻击者可能会以相同的方式欺骗​​这种情况,因为他们可以发送他们想要的任何域名。

但是,中间人攻击者不能像普通的HTTP请求那样改变SNI信息。这是因为浏览器将检查域名是否与请求的站点匹配,如果不是这种情况,则会警告用户。普通HTTP没有此类身份验证。在使用HTTPS的MITM场景中我唯一可以想到的攻击是使用通配符证书的攻击,并且MITM可以使用户在没有浏览器警告的情况下击中与预期不同的站点。但是,TLS握手FINISHED消息哈希不会计算是否已被MITM更改,因此应该可以减轻此攻击。