XXXXXXSS
URL编码表
.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(){}//"+"¶m=";
一、反射型XSS的查找思路:
过滤了双引号
1. 如果输入值在JS脚本中
a.如果值在标签的属性中,要查看没有过滤 &,# 等符号。
在HTML属性中,会自动对实体字符进行转义,所以可以考虑将单引号' 写成 '。
<img src="1" οnerrοr="alert(1)">和<img src="1" οnerrοr="alert(1)"> 是等效的
因为在url编码中&-> %26, # -> %23
所以最后在Url编码中输入,%26%23x27;%2balert(1)%2b%26%23x27 就等于 '+alert(1)+
b 如果输入值不在JS脚本中
a.如果值在标签的属性中,基本就绕不过了。
2. 存在宽字节
a. 如果输入值在JS脚本中
1. 首先要看html采用了哪种字符集,如果是GB这种,一般就存在宽字节隐患。
宽字节跨站,过滤了双引号。基本思路就是搞个%c0%22或者%bf%27用款字节过滤下。
正常宽字节是 %df%5c%27 但是%c0是可以吞掉一个%5c,也就是吞掉一个反斜杠\
3. 没有过滤换行符
a. 如果输入值在JS脚本中
1 .在JS中,如果输出值存在于注释当中,/n可以进行换行,如果在URL中则写成%0a
4. 没有过滤反斜线
a. 如果输入值在JS脚本中 尝试"闭合
1 .基本思路就是用\过滤到 \" 让前一个字符结束"和后面一个字符的最开始”合并起来。如果过滤空格就/**/注释掉试试。//注释掉后面的内容
2. 如果输出值在JS的注释当中,则可以将\利用成一个字符窜没有结束,另起一行。
如果\被拆成了\\两个,则用%c0吃掉一个。
例如:var a="我是一个字符串\
我还是一个字符串";
二、DOM型XSS查找思路
更多推荐
XXXXXXSS
发布评论