一、Flash XSS 是什么?
Flash XSS 是一种利用 Flash 文件(.swf)中不安全脚本调用(如 getURL()、ExternalInterface.call())来 执行恶意 JavaScript 代码的 XSS 攻击方式。
二、攻击原理
正常情况下:
Flash 文件可以通过 getURL() 打开网页,例如:
getURL("https://example.com");
攻击者利用时:
如果 Flash 接收外部参数,比如:
getURL(_root.link);
然后页面这样使用这个 Flash:
<embed src="vuln.swf?link=javascript:alert(document.cookie)">
那么 Flash 会执行:
javascript:alert(document.cookie)
于是触发了 XSS 漏洞。
三、漏洞条件
要能造成 Flash XSS,需满足以下条件:
| 条件 | 描述 |
|---|---|
| 1️⃣ Flash 中存在不安全函数 | 如 getURL() 或 ExternalInterface.call() |
| 2️⃣ Flash 参数可控 | Flash 文件从 URL 获取参数,未做过滤 |
| 3️⃣ 浏览器未阻止 Flash 执行 | 旧版浏览器 / 人为开启 Flash 插件 |
| 4️⃣ Flash 文件未加密或未上锁 | 攻击者可修改、重写或伪造 |
四、攻击方式分类
| 攻击方式 | 描述 |
|---|---|
| 1. 参数注入 | getURL(_root.param) 接收攻击者控制的参数 |
| 2. 本地 swf 注入 | 上传恶意 swf 文件,诱导访问 |
| 3. 外链 swf 引用 | 页面嵌入远程 swf,例如 embed src="evil.swf" |
| 4. 反射型 XSS | URL 中的参数直接被 Flash 使用并执行 JavaScript |
五、复现流程(示例)
❗需本地 Flash Player 支持,可以用 Flash 播放器或者 IE 旧版本(如 IE 8)
示例 swf 代码(ActionScript 2.0):
// Flash中获取参数并调用
var link = _root.link;
getURL(link, "_blank");
使用方式:
构造页面调用:
<embed src="xss.swf?link=javascript:alert(document.domain)"
width="300" height="200">
当用户打开该页面时,Flash 会执行:
alert(document.domain);
漏洞成功!
六、工具与验证
-
工具:
-
swfmill:查看 swf 结构 -
JPEXS Free Flash Decompiler:反编译 swf -
Burp Suite:劫持 swf 请求和参数
-
-
可复现平台:
-
OWASP BWA 虚拟机
-
DVWA 旧版本
-
或自行搭建 Flash 页面测试
-
七、真实案例
Twitter Flash XSS 漏洞(2008)
-
攻击者上传包含
getURL("javascript:...")的 swf 文件 -
利用
embed引诱用户点击 -
成功获取了用户 cookie,甚至可伪造推文
八、防御方式
| 防御点 | 措施 |
|---|---|
| 禁用 Flash | 最根本,现代浏览器已默认禁用 |
| 参数过滤 | 不允许传入 javascript:、HTML 标签等敏感字符 |
| Flash 加密与签名 | 禁止篡改 swf 内容 |
| CSP 限制 | 使用 Content-Security-Policy 禁止执行 JavaScript: 协议 |
| 使用 HTML5 替代 Flash | 防止旧技术带来的新漏洞 |
九、总结
Flash XSS 是一种已逐渐消失但曾非常危险的 XSS 类型,攻击者利用 swf 文件中的函数执行 JavaScript,造成脚本注入,目前已基本被淘汰但依然值得安全研究者掌握其历史与原理。
1146

被折叠的 条评论
为什么被折叠?



