需要帮助解码跨站点脚本javascript攻击吗

需要帮助解码跨站点脚本javascript攻击吗,javascript,xss,web-application-firewall,imperva,Javascript,Xss,Web Application Firewall,Imperva,有人在推特上发帖,不确定我是否可以把它链接到这里,作为Imperva Web应用程序防火墙的跨站点脚本旁路。如下所示: <a/href="j%0A%0Davascript:{var{3:s,2:h,5:a,0:v,4:n,1:e}='earltv'}[self][0][v+a+e+s](e+s+v+h+n)(/infected/.source)" />click %0A%0解码为新行。将创建指向给定URI的可单击链接。但是所有的3:s和v+a+e等都让我完全无法

有人在推特上发帖,不确定我是否可以把它链接到这里,作为Imperva Web应用程序防火墙的跨站点脚本旁路。如下所示:

<a/href="j%0A%0Davascript:{var{3:s,2:h,5:a,0:v,4:n,1:e}='earltv'}[self][0][v+a+e+s](e+s+v+h+n)(/infected/.source)" />click
%0A%0解码为新行。将创建指向给定URI的可单击链接。但是所有的3:s和v+a+e等都让我完全无法理解。我曾尝试在反射、存储和domxss中使用它,并获得混合结果。事实上,在某些情况下,Imperva WAF不会检测到它,但在某些情况下,它会被检测到,而在许多情况下,它根本不会产生可点击的链接。现在的问题是我没有完全理解javascript代码。非常感谢您的帮助。

您关于%0A%0D解码到新行的说法是正确的!这就产生了: javascript:{var{3:s,2:h,5:a,0:v,4:n,1:e}='earltv'}[self][0][v+a+e+s]e+s+v+h+n/infected/.source

现在让我们把它分解一下

var{3:s,2:h,5:a,0:v,4:n,1:e}'

这表示字符串'earltv'的第三个索引是s,第二个索引是h,第五个索引是a,依此类推

[现场][0]

这本质上只是指它自己

[v+a+e+s]

这就是解码的开始

v实际上是e字符串的索引0

a实际上是v字符串的索引5

等等

解码为eval

类似地,e+s+v+h+n解码发出警报

因此,我们有:

evalalert/infected/.source

/infected/是一个正则表达式,.source指的是它的源,它就是infected字符串

现在,这相当于:

评估警报已感染

eval警报本质上返回警报的本机代码,因此这只是警报

警惕感染

现在它很简单——它只是提醒被感染的人,这就是实际发生的事情

关于%0A%0D解码到新行,您是对的!这就产生了: javascript:{var{3:s,2:h,5:a,0:v,4:n,1:e}='earltv'}[self][0][v+a+e+s]e+s+v+h+n/infected/.source

现在让我们把它分解一下

var{3:s,2:h,5:a,0:v,4:n,1:e}'

这表示字符串'earltv'的第三个索引是s,第二个索引是h,第五个索引是a,依此类推

[现场][0]

这本质上只是指它自己

[v+a+e+s]

这就是解码的开始

v实际上是e字符串的索引0

a实际上是v字符串的索引5

等等

解码为eval

类似地,e+s+v+h+n解码发出警报

因此,我们有:

evalalert/infected/.source

/infected/是一个正则表达式,.source指的是它的源,它就是infected字符串

现在,这相当于:

评估警报已感染

eval警报本质上返回警报的本机代码,因此这只是警报

警惕感染


现在它很简单——它只是提醒被感染的人,这就是实际发生的事情

除了另一个答案之外,这里还有一个简单的工作演示,展示了它的功能

编辑:一些额外的解释

如果我们在字符串上附加[0]:

let first_letter = "Hey!"[0]; //returns "H"
这意味着,每当对字符串请求数组操作时,该字符串将转换为数组:

let obj = {0:h,1:e,2:y,3:I} = ["H","e","y","!"];
因此,它等于:

let first_letter = ["H","e","y","!"][0]
现在,如果您有一个对象,可以使用数组填充它:

let obj = {0:h,1:e,2:y,3:I} = ["H","e","y","!"];
最后,您可以将其与破坏相结合:

字母=[H,e,y,!]; {0:h,1:e,2:y,3:I}=字母
控制台。logh,e,y,I//他回来了 除了另一个答案,这里还有一个简单的工作演示,展示了它的功能

编辑:一些额外的解释

如果我们在字符串上附加[0]:

let first_letter = "Hey!"[0]; //returns "H"
这意味着,每当对字符串请求数组操作时,该字符串将转换为数组:

let obj = {0:h,1:e,2:y,3:I} = ["H","e","y","!"];
因此,它等于:

let first_letter = ["H","e","y","!"][0]
现在,如果您有一个对象,可以使用数组填充它:

let obj = {0:h,1:e,2:y,3:I} = ["H","e","y","!"];
最后,您可以将其与破坏相结合:

字母=[H,e,y,!]; {0:h,1:e,2:y,3:I}=字母
控制台。logh,e,y,I//他回来了!将特定索引处的字符分配给变量的语法的名称是什么?我已经使用js好几年了,但我想我从来没有见过它。哈哈。没有线索。我第一次也看到这个语法。谢谢,这是great@Mahdi哦,我得到了另一部分,但不知道破坏。检查我的编辑:谢谢@mirow在为变量指定特定索引处的字符时,该语法的名称是什么?我已经使用js好几年了,但我想我从来没有见过它。哈哈。没有线索。我第一次也看到这个语法。谢谢,这是great@Mahdi哦,我得到了另一部分,但不知道破坏。检查我的编辑:谢谢@米罗谢谢你的解释:谢谢你的解释: