javascript - 需要帮助解码跨站点脚本 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 代码。任何帮助表示赞赏。
解决方案
您对%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")
现在很简单——它只是提醒“感染”,这就是实际发生的事情!
推荐阅读
- javascript - 使用 jQuery 创建一个“实时”倒数计时器
- php - 如何从数据库和多个文件夹中删除文件
- javascript - 预期的实例道具与 React 16 中的记忆道具匹配
- c# - 为什么代码中定义的这个故事板不起作用?
- javascript - 我是否需要使用 jQuery 和 Ajax 使用模态表单中的数据删除记录?
- javascript - webRTC-没有从其他对等点获取流和冰候选者
- c# - c#泛型方法和将对象作为参数的方法有什么区别?
- linux - 使用 crypt 的基本 Perl/Shellscripting 问题
- vba - VBA。如何从此导出代码中排除隐藏表?
- css - 使用 CSS 自定义形状