我正在阅读有关JSf**k的信息。从他们的网站:
JSF**k 是一种基于 JavaScript 原子部分的深奥且具有教育意义的编程风格。它只使用六个不同的字符来编写和执行代码。
我的问题是:我们究竟什么时候可以使用这样的有效载荷来利用 XSS 漏洞?我尝试了以下简单的 HTML 代码来测试它:
<html>
<img src=1 onerror="(![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]+(!![]+[])[+[]]+(![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]]+[+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[!+[]+!+[]+[+[]]]" >
</html>
我刚刚用alert(1)相应的纯文本 JSF**k 代码替换了 。但是,浏览器似乎没有呈现有效负载。当我在 Chrome 的控制台中键入有效负载时,它会呈现为字符串“alert(1)”,但在上面的 HTML 代码中不起作用。我想这与浏览器如何呈现这些有效负载有关(我不完全了解浏览器究竟如何/何时呈现各种类型的有效负载)。
我想了解在测试 Web 应用程序时此类有效负载可能有用的场景。
更新:如答案中所述,该方法在使用 eval 源而不是普通的 alert(1) 字符串时有效。我的问题是,为什么我需要评估源?AFAIK,浏览器应该执行作为 JavaScript 传递给 onerror 属性的字符串。