这个 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 打开它时,该代码将在该页面内执行,这是一个乔的潜在安全风险。
假设 x
是 2
。此 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
,所以查询字符串中的代码是有限制的,尽管它们可能会变通...
我正在尝试更好地掌握基于 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 打开它时,该代码将在该页面内执行,这是一个乔的潜在安全风险。
假设 x
是 2
。此 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
,所以查询字符串中的代码是有限制的,尽管它们可能会变通...