如何利用 HTTP header XSS 漏洞?

How to exploit HTTP header XSS vulnerability?

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

之类的引用 header 来制作 GET 请求

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

我可以想到一些不同的攻击,也许还有更多其他人希望添加的攻击。 :)

如果您的 XSS 只是一些 header 值反映在未编码的响应中,我会说与存储相比风险较小。不过可能有一些因素需要考虑。例如,如果它是浏览器添加并可以在浏览器中设置的 header(如用户代理),则攻击者可能会访问客户端计算机,更改用户代理,然后让普通用户使用该网站,现在已注入攻击者的 javascript。想到的另一个例子是网站可能会显示将您重定向到那里的 url(引荐来源网址)——在这种情况下,攻击者只需 link 从他精心设计的 url 到易受攻击的应用程序].不过,这些都是边缘情况。

如果存储起来,那就更直接了。考虑一个使用所有请求 header 记录用户访问的应用程序,让我们假设有一个供管理员用来检查日志的内部应用程序。如果此日志查看器应用程序是基于 Web 的且易受攻击,则来自任何请求 header 的任何 javascript 在管理上下文中都可能是 运行。显然这只是一个例子,当然不需要盲目。

Cache poisoning 也可能有助于利用 header XSS。

我能想到的另一件事是浏览器插件。 Flash 现在不太流行(谢天谢地),但是对于不同版本的 Flash,您可以在请求中设置不同的请求 headers。 What exactly you can and cannot set 整个 Flash 插件版本一团糟,非常混乱。

所以有几种攻击方式,需要把所有的header都当作用户输入,进行相应的编码。

这听起来很标准 reflected XSS attack

在反射型 XSS 攻击中,攻击者需要受害者访问以某种方式受攻击者控制的某个站点。即使这只是一个攻击者可以 post 一个 link 希望有人会关注它的论坛。

在使用 referer header 的反射 XSS 攻击的情况下,攻击者可以将用户从论坛重定向到攻击者域中的页面。

例如

http://evil.example.com/?<script>alert(123)>

此页面以保留 referer.

的方式依次重定向到以下目标页面
http://victim.example.org/vulnerable_xss_page.php

因为它在这个页面上显示 referer header 没有正确的转义,http://evil.example.com/?<script>alert(123)> 在 HTML 源中获取输出,执行警报。请注意,这仅适用于 Internet Explorer。

其他浏览器会自动编码 URL 渲染

%3cscript%3ealert%28123%29%3c/script%3e

而不是哪个是安全的。

在 referrer header 中利用 xss 几乎就像传统的反射 xss,需要补充一点的是 "Attacker's website redirects to victim website and hence referrer header with required javascript will be appended to the victim website request"。

这里需要讨论的一个重点是为什么只有IE可以利用这个漏洞为什么其他浏览器不能利用?

这个问题的传统答案是'Chrome and firefox automatically encodes URL parameters and hence XSS is not possible..' 但这里有趣的是当我们有 n 次传统 xss 绕过的绕过。为什么我们不能绕过这种情况。

是的..我们可以使用以下有效载荷绕过,这与绕过传统有效载荷中的HTML验证的方法相同。

http://evil.example.com/?alert(1)//cctixn1f

这里的响应可能是这样的:

上的link 参考 页面似乎有误或已过时。 响应结束

如果受害者点击引用页面,将生成警报..

底线: 不只是 IE,当 referrer 被用作 href 标签的一部分时,XSS 甚至在 Mozilla 和 Firefox 中也是可能的..