本次练习网站:http://prompt.ml/
练习网站
要求:弹窗成功出现you win
0x0:闭合引号
输出在value内,首先闭合再进行prompt(1)的弹窗。
1"><script> prompt(1)</script>
0x1:html不严谨性,单标签自动补全功能
它过滤了一个完整的标签,当<…/> 存在便过滤为空。为此利用html的自动补全,单标签的>符号功能。
<img src="1" οnerrοr="prompt(1)"
0x02:call函数
因为这里=与( 都被过滤了。因此我们可以使用Unicode编码,不使用html实体编码是因为它不能在JavaScript中使用回无效的。
关于call函数: call把eval绑定在绑定,直接用eval执行字符串,即等价于eval(`prompt(1)`)的执行
eval() 函数会将传入的字符串当做 JavaScript 代码进行执行
call传两个值:eval的指向,与eval执行的值
第一个传值为空时指向Windows的全局变量,后返回字符串prompt(1)。
因为指向全局变量,在全局中有prompt(1)函数,如此就执行这个函数
字符串是eval来执行的,最后返回的是给eval这个返回值
call收到一个值为空于是指向Windows的全局
aaaaa在Windows全局没有这个函数
这里直接将eval执行相当于别名调用,这里就想到与call方法强行指向prompt(1),但是js官网为了安全指向了全局,但是目前第二个参数没有传值,所有undefind。
call的传给指向与执行值
eval的别名:call在这传的值不是空,而是具体的值时就是他的别名。 JavaScript中默认别名指向全局
<script>eval.call`${
`prompt\u00281)`}`</script>