XXXXXXSS

URL编码表

http://www.w3school.com.cn/tags/html_ref_urlencode.html

%22 "

%23 #

%27 '

%2f /

' '

  html 空格

" html "


javascript中的特殊字符如下:

\’ 单引号

" 双引号

\& 和号

\\ 反斜杠

\n 换行符    url中对应%0a

\r 回车符

\t 制表符

\b 退格符

\f 换页符

url中的特殊字符如下:

+ 表示空格(在 URL 中不能使用空格)        

/ 分隔目录和子目录                          /

? 分隔实际的 URL 和参数                      ?

% 指定特殊字符                               %

# 表示书签                                  #

& URL 中指定的参数间的分隔符  


javascript特性

1.//代表注释后面内容

2,\一个字符村没有结束。可以另起一行

3.js中都可以unicode表示

4.javascript里有一个特性。 如下:

aaa();

function aaa(){}

凡是以 function xxx(){} 形式定义的函数,都会被最优先解析。换句话说:

解析器在解析JS代码段时,会先将 function xxx(){} 拿到最前面解析,然后再依次解析其它的部分。 换句话说,上面的代码,实际的解析顺序是:

function aaa(){

}

aaa();

利用这样一个特性,我们的代码可以改改。

location.href="........."+"&ss=aaaa\"+"&from==1;function from(){}//"+"&param=";


一、反射型XSS的查找思路:

过滤了双引号

1. 如果输入值在JS脚本中

   a.如果值在标签的属性中,要查看没有过滤 &,# 等符号。

     在HTML属性中,会自动对实体字符进行转义,所以可以考虑将单引号' 写成 &#x27。

     <img src="1" onerror="alert(1)">和<img src="1" onerror="alert&#x28;1&#x29;"> 是等效的

     因为在url编码中&-> %26, # -> %23

     所以最后在Url编码中输入,%26%23x27;%2balert(1)%2b%26%23x27  就等于 &#x27;+alert(1)+&#x2

     http://www.wooyun.org/bugs/wooyun-2010-015963


  b 如果输入值不在JS脚本中

   a.如果值在标签的属性中,基本就绕不过了。


2. 存在宽字节

   a. 如果输入值在JS脚本中

     1. 首先要看html采用了哪种字符集,如果是GB这种,一般就存在宽字节隐患。

      宽字节跨站,过滤了双引号。基本思路就是搞个%c0%22或者%bf%27用款字节过滤下。

      正常宽字节是 %df%5c%27 但是%c0是可以吞掉一个%5c,也就是吞掉一个反斜杠\

      http://www.wooyun.org/bugs/wooyun-2010-015969


3. 没有过滤换行符

    a. 如果输入值在JS脚本中

     1 .在JS中,如果输出值存在于注释当中,/n可以进行换行,如果在URL中则写成%0a

     http://www.wooyun.org/bugs/wooyun-2010-016003


4. 没有过滤反斜线

    a. 如果输入值在JS脚本中  尝试"闭合

     1 .基本思路就是用\过滤到 \" 让前一个字符结束"和后面一个字符的最开始”合并起来。如果过滤空格就/**/注释掉试试。//注释掉后面的内容

     http://www.wooyun.org/bugs/wooyun-2010-015979

     2. 如果输出值在JS的注释当中,则可以将\利用成一个字符窜没有结束,另起一行。

        如果\被拆成了\\两个,则用%c0吃掉一个。

        例如:var  a="我是一个字符串\

             我还是一个字符串";

http://www.wooyun.org/bugs/wooyun-2010-016008


二、DOM型XSS查找思路


本文出自 “无双城” 博客,谢绝转载!

你可能感兴趣的:(11)