题目很有意思
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();
}
意思就是我的输入被 JSON.stringify()函数转义。比如我输入”实际上是\”,输入\实际上是\\。
所以这里需要对该函数进行绕过。
在第二题中,题目:
function escape(s) {
s = JSON.stringify(s);
return '<script>console.log(' + s + ');</script>';
}
可以使用闭合 <script>
标签的方式绕过。我输入
</script><script>alert(1)//
即可过关。
可是第三题不能这么使用,因为不存在 <script>
标签。
所以首先想办法的是绕过 log()
函数。
我们可以发现题目中是创建了一个 <a>
,且给 <a>
的 href
属性进行赋值,并在将 <a>
添加到浏览器上。这就可以想到浏览器会对部分代码进行 URL 转义。比如说双引号 ”
对应的是 %22
,空格 对应的是 %20
…这里我们可以使用 %22 来让浏览器帮我们渲染出一个双引号从而逃过 log()
函数。
输入
%22);alert(1)//
成功过关
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于