这个 JavaScript 注入(DOM-based)是真的还是假阳性?

Is this JavaScript injection (DOM-based) real or false positive?

我正在尝试更好地掌握基于 JavaScript DOM 的注入攻击,因此我将不胜感激对此的一些意见。

我从 Burpsuite 得到这个输出 "firm" 表明它应该在这里。 因此,主页会加载一个包含以下代码的 .js 文件。 数据从 document.location 读取并通过以下语句传递给 eval():

var _9f=document.location.toString();
var _a0=_9f.split("?",2);
var _a1=_a0[1];
var _a2=_a1.split("&");
var sp=_a2[x].split("=");
djConfig[opt]=eval(sp[1]);

如果我没理解错的话,它获取的是'?'之后的内容在 url 中,然后拆分“=”之后的参数,然后评估第二个数组。所以 www.domain.tld?first=nothing&second=payload,对吗?

鉴于它已经在一个 js 文件中,我假设我不需要有效载荷中的 < script > 标签?我真的无法让它发射任何东西,所以我显然做错了。希望能提供一些输入以更好地理解这一点,不仅仅是代码片段,但一些解释会很棒。

...it gets the content after '?' in the url, then splits the parameters after '=' and then evals the second array of that...

差不多。它获取第一个 ? 之后的字符串部分,将其拆分为参数数组(通过拆分 &),然后获取第 x 个参数的值(第一个在索引 x 处),拆分它以获得它的值,然后 eval 就是这样。

这意味着该页面执行通过查询字符串输入的代码,这意味着 Mary 可以给 Joe 一个 URL,其中包含代码,当 Joe 打开它时,该代码将在该页面内执行,这是一个乔的潜在安全风险。

假设 x2。此 URL 将显示警报:http://example.com/?a=1&b=2&c=alert(42)

var x = 2;
var _9f="http://example.com/?a=1&b=2&c=alert(42)";
var _a0=_9f.split("?",2);
var _a1=_a0[1];
var _a2=_a1.split("&");
var sp=_a2[x].split("=");
/*djConfig[opt]=*/eval(sp[1]);

这里有一个关于 JSBin 的例子:https://output.jsbin.com/cibusixeqe?a=1&b=2&c=alert(42)

风险有多大取决于这段代码在哪个页面。

由于代码不使用 decodeURIComponent,所以查询字符串中的代码是有限制的,尽管它们可能会变通...