一、绕过XSS-Filter
用户提交信息时,系统的XSS Filter会对所有的输入进行校验,如果检测到黑名单列表中的数据,便会进行拦截、编码和过滤等处理。
1、利用HTML标签属性值
2、空格、回车、Tab
若XSS Filter仅把敏感的字符列入黑名单处理,则可以利用空格、回车和Tab键拆分输入的字符,来绕过限制。
原因:JavaScript语句通常以分号结尾,如果JavaScript引擎确定一个语句是完整的,而这一行的结尾有换行符,那么就可以省略分号。
3、对标签属性值进行转码
-将输入字符通过ASCII码进行转码,来避免XSS Filter过滤
-HTML属性值支持ASCII编码形式
-示例:t的ASCII值为116,则用“t”表示
4、利用事件
5、利用CSS样式表
-缺点:不同浏览器或者同一浏览器不同版本之间有可能不通用
-可以使用expression执行JavaScript代码
-可以使用@import直接执行JavaScript代码,例如:
<style>
@import 'javascript:alert("XSS")';
</style>
-JavaScript脚本通常嵌入到style标签/属性中
-style属性可以配合任意HTML标签使用
扰乱过滤规则
-大小写转换
-不使用引号,或改用单引号
-在使用CSS中的expression执行XSS脚本时,可以构造不同的全角字符来扰乱过滤规则
<xss STYLE="xss:expression(alert('XSS'))">
-使用注释字符
-样式标签中,\和结束符\0也是被浏览器忽略的