alert(1) to win 7

function escape(s) {
  // Pass inn "callback#userdata"
  var thing = s.split(/#/); 

  if (!/^[a-zA-Z[]']*$/.test(thing[0])) return 'Invalid callback';
  var obj = {'userdata': thing[1] };
  var json = JSON.stringify(obj).replace(/</g, '\u003c');
  return "<script>" + thing[0] + "(" + json +")</script>";
}

payload:callback#userdata

两个参数,两个输出点,要执行alert(1)或alert`1`就必须隔离,通过引号可以达到这样的效果,但双引号被转义了,可尝试单引号:

 这里使用单引号闭合一堆无用内容而不用双引号,是因为JSON.stringify()有下面的特性:

原文地址:https://www.cnblogs.com/natian-ws/p/8184134.html