Request.getHeader("host") 是否易受攻击?

信息安全 渗透测试 xss 源代码 代码审查
2021-08-12 21:01:54

如果以下是代码片段,您有什么建议?

<script type="text/javascript" src="<%=request.getHeader("Host")%>/XXX/xxx.js"></script>    

这是一个明显的 XSS 示例吗?如果是,攻击者可以使用哪些攻击场景?

1个回答

这是一个 XSS 漏洞,但很难利用:例如以下 URL:

http://anything."><script>xss</script>.example.com/aa/bb

此 URL 将在导航到时在 Host 参数中携带 XSS 有效负载,但是:

  1. DNS 必须将这个奇怪的域解析为具有易受攻击的应用程序的 IP(因此,除非 DNS 非常宽容,否则攻击者将需要 DNS 中毒)
  2. 浏览器必须跳过对主机名的编码 - 通常主机名是由浏览器编码的百分比(因此<script>变为%3Cscript%3E)。您当然可以在浏览器之外伪造请求。
  3. 目标服务器必须在易受攻击的网站的上下文中处理请求,这并不是那么简单。例如 - 如果此应用程序VirtualHost在 Apache 中安装为 a ,则此Host标头将不匹配任何标头VirtualHost,并将由 fallback 或 first 处理VirtualHost

如果这个 XSS 被存储而不被反映,那将会更加危险,因为这样你就可以跳过 (1) DNS 和 (2) 编码要求。您可以通过在浏览器外部发送手动 HTTP 请求来植入有效负载。然后,此有效负载将对易受攻击站点的“标准”基于浏览器的访问者可见。

所以,作为一个结论 - 这是一个 XSS 漏洞,但利用概率很低。不过,应用程序应该通过转义显示的 Host 标头来修复它。