第十六关,空格被替换为空字符的绕过技巧
查看level16.php

可以看到,这一关过滤了script、空格、/、Tab 或者 \t制表符。
由于我们构造payload时,标签的属性都需要空格进行隔开,如果不用空格隔开浏览器的解析就会出错。
但其实我们都知道,除了空格,我们还可以使用换行来分隔不同属性,例如\n,或者enter(回车键)
浏览器会对这些分隔符进行URL编码:
换行符\n -> %0a
回车符enter -> %0d
空格 -> %20
利用这一方法,我们就可以开始闯关了
构造payload,由于尖括号、引号都没被过滤,但是script标签被过滤了(导致无法使用伪协议),/也被过滤,无法闭合标签,所以这里我们使用触发事件,例如onclick、onerror等;
tips:由于/被过滤,无法被闭合标签,所以我们要考虑不需要进行闭合的标签,例如<svg>、<img>等等
①、方法一,<svg>标签
keyword=<svg%0aonload=alert()>

②、方法2,<img>标签
keyword=<img%0asrc=”1″%0aonerror=”alert()”>

