如何利用HTTP "Host" header XSS漏洞?

How to exploit HTTP "Host" header XSS vulnerability?

跟进

的问题

假设一个页面只是打印 HTTP 'Host' header 的值,没有转义。因此该页面容易受到 XSS 攻击,即攻击者可以使用 'Host' header 包含类似 alert('xss');.

的内容来制作 GET 请求

但是你怎么能用它来攻击目标呢?攻击者如何通过特定 header 发出特定请求的目标?

http 主机 header 基本上用作字符串来确定服务器配置中的(可能很多)named-based 主机应该用于处理请求。

假设您伪造了一个 HTTP 请求并发送了这个 header:

Host: <script>alert('foo');</script>.example.com

如果网站管理员将服务器和站点定义配置为允许该显式主机名,唯一 可以通过您想要攻击的 PHP 脚本的方式,或者有适当的通配符命名,例如

<VirtualHost ...
    ServerName www.example.com
    ServerAlias *.example.com
</VirtualHost>

由于通配符允许 .example.com 之前的任何内容,您的 JS-hostname 将通过。

但是这样配置的虚拟主机:

<Virtualhost ...>
    Servername www.example.com
    ServerAlias web.example.com
</Virtualhost

不会受到攻击,因为您提供的主机名与任何配置的主机名都不匹配。该请求可能由其他一些 catch-all 虚拟主机处理,但由于该站点上不存在您的易受攻击的脚本,因此这对您没有用。