场景:
网页使用以下javascript行显示错误登录页
let queryParams = new URLSearchParams(window.location.search);
document.getElementById("message").innerText = queryParams.get("message");
let link = document.getElementById("link");
link.innerText = queryParams.get("linkText");
link.href = queryParams.get("linkUrl");最后一个javascript行允许我将javascript隐藏在网页中的链接中,如下面所示。
1)用户单击此链接的缩短版本
2)用户点击“点击这里发光”
3)警报打开
我的灵感来自于这篇关于portswigger https://portswigger.net/web-security/cross-site-scripting/dom-based的文章,特别是来自这个例子。
如果使用的是JavaScript库(如jQuery ),请注意可以更改页面上DOM元素的接收器。例如,jQuery中的attr()函数可以更改DOM元素的属性。如果数据是从用户控制的源(如URL )读取,然后传递给attr()函数,那么就有可能操纵发送给XSS的值。例如,这里有一些JavaScript,它使用URL:
$(function(){ $('#backLink').attr("href",(newURLSearchParams(window.location.search)).get('returnUrl')); });中的数据来更改锚元素的href属性,您可以通过修改location.search源包含一个恶意的JavaScript URL来利用它。在页面的JavaScript将这个恶意URL应用到反向链接的href之后,单击反向链接将执行它:?returnUrl=javascript:alert(document.domain)
问题:在我看来,他们的攻击方式是一样的,但有人告诉我这是一种自我XSS。不管怎么说,我看到self期望用户在他的控制台中自粘贴javascript代码。所以我很困惑,我想知道是哪种类型的。另外,是否可以认为是中等/高度严重的漏洞?
发布于 2020-06-11 10:57:31
我将其称为基于DOM的XSS (反映为非持久性的)XSS,需要用户交互。
它不是self-XSS,因为self-XSS只是一种调用特定类型攻击的方法,在这种攻击中,用户实际上是自己注入代码,通常是通过将恶意代码直接复制和粘贴到浏览器JS控制台中。自XSS实际上是一种社会工程攻击,而不是真正的XSS漏洞。显然,在过去,能够通过欺骗受害者在地址栏中运行恶意代码来实现自我XSS,比如javascript:somethingMalicious();,但是在一些浏览器中已经不可能了(我刚刚在Chrome中测试了它,它不起作用)。但是,像这样的链接在单击它们时仍然有效。
您的漏洞的严重程度取决于几个因素,您可能需要考虑CVSS来尝试估计它,尽管我并不是那些评分系统的真正爱好者。例如,使用CVSSVersion3.1和这些参数( AV:n/AC:L/PR:n/UI:R/S:U/C:/I:n/A:n ),您将得到4.3的分数。请注意,我对您的漏洞的细节一无所知,我只是假设攻击的复杂性很低,当然需要用户交互,机密性影响很低,对完整性或可用性没有影响。例如,如果将机密性影响设置为高度,而攻击复杂性设置为高,则会得到5.3的分数。只有你才能知道这些数字是否有意义。有时很难估计攻击的复杂性和用户交互的影响。
https://security.stackexchange.com/questions/233097
复制相似问题