题目很有意思
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)//
成功过关
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于