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()有下面的特性:

 

posted @ 2018-01-03 15:51  S3c0ldW4ng  阅读(168)  评论(0编辑  收藏  举报