首页 > 解决方案 > 需要帮助解码跨站点脚本 javascript 攻击

问题描述

有人在 Twitter 上发布(不确定我是否可以在这里链接)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 等都完全让我无法理解。我已经尝试在反射、存储和 DOM XSS 中使用它并获得混合结果。实际上,在某些情况下,Imperva WAF 无法检测到它,但在某些情况下会检测到,而且在许多情况下,它根本不会产生可点击的链接。此时的问题是我不完全理解 javascript 代码。任何帮助表示赞赏。

标签: javascriptxssweb-application-firewallimperva

解决方案


您对%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'

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

[self][0]

这基本上什么都不做,只是引用它自己。

[v+a+e+s]

现在这是解码开始的地方。

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

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

等等

解码为eval.

同样,(e+s+v+h+n)解码以发出警报。

所以,我们有:

eval(alert)(/infected/.source)

/infected/是一个正则表达式,并.source引用它的源,即字符串"infected"

现在,这相当于:

eval (alert) ("infected")

本质上返回警报的本eval (alert)机代码,因此只是alert.

alert("infected")

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


推荐阅读