需要帮助解码跨站点脚本javascript攻击吗
有人在推特上发帖,不确定我是否可以把它链接到这里,作为Imperva Web应用程序防火墙的跨站点脚本旁路。如下所示:需要帮助解码跨站点脚本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等都让我完全无法
<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哦,我得到了另一部分,但不知道破坏。检查我的编辑:谢谢@米罗谢谢你的解释:谢谢你的解释: