基于 DOM 的 XSS 攻击:最危险的例子是什么?

信息安全 网页浏览器 攻击预防 javascript xss 注射
2021-08-17 09:21:46

我知道 XSS 攻击(“非持久性”和“持久性”)可以劫持用户会话、破坏网站、进行网络钓鱼攻击等。

但是,如果不能(劫持会话、点击劫持等),我无法理解基于 DOM 的 XSS 有什么危险?

我查看了基于 OWSAP DOM 的 XSS以及概述了这两个注释的此页面:

  1. 恶意负载在任何时候都不会嵌入到原始 HTML 页面中(与其他类型的 XSS 不同)。

  2. 此漏洞利用仅在浏览器不修改 URL 字符的情况下有效。Mozilla 在文档中自动编码 < 和 >(分别为 %3C 和 %3E)。

那么,什么样的攻击(XSS DOM Based)可以完成呢?

2个回答

跨站点脚本是跨站点脚本——DOM/持久/反射之间的区别仅在于攻击是如何完成(和防止)的。

威胁是一样的——攻击者以某种方式将恶意 javascript 注入到他们不应该控制的页面中,通常是由于网站设计中的漏洞。

OWASP 中的示例为例,其中 HTML 页面包含一些内联 javascript(部分位于标签内)。内联 javascript 的目的是从“默认”查询参数中获取一个变量,并使用它的值来修改 DOM——即将第一个<option>标记的值更改为该查询参数的值。

网页源(通过网络发送)如下所示:

Select your language:
<select><script>    
document.write("<OPTION value=1>"+document.location.href.substring(document.location.href.indexOf("default=")+8)+"</OPTION>");    
document.write("<OPTION value=2>English</OPTION>");    
</script></select>

但从 中查看后http://www.some.site/page.html?default=French,DOM 将变为:

Select your language:
<select>    
<OPTION value=1>French</OPTION>
<OPTION value=2>English</OPTION>
</select>

这意味着您的 Web 浏览器一旦运行 DOM 修改 javascript(对 的调用),就会将上述网页视为通过网络发送的网页document.write

现在,一个聪明的攻击者会发送一个链接(通过电子邮件/网页链接),受害者单击该链接指向http://www.some.site/page.html?default=<script>alert(document.cookie)</script>. 然后页面上的网页(在使用 处理初始 javascript 之后document.write)看起来像:

Select your language:
<select>    
<OPTION value=1><script>alert(document.cookie)</script></OPTION>
<OPTION value=2>English</OPTION>
</select>

同样alert(document.cookie)可以是攻击者想要的任意 javascript。

也许页面上有一个秘密的用户名/密码或会话 cookie 或信用卡号,而不是警报,您将按下提交按钮绑定到 ajax 调用,以便当用户按下提交时,它将所有秘密数据发送到服务器攻击者可以访问。

实际上没有最坏的情况——如果存在 DOM-XSS 漏洞,您应该能够使用 javascript 执行的任何操作。

DOM XSS 与反射型 XSS 一样危险。为了利用它,攻击者总是需要诱使客户端创建请求(通过单击仍然指向被认为安全站点的某些链接)。完成此操作后,您可以在客户端浏览器上执行 JavaScript。这可能导致对浏览器的各种攻击!