依旧先看源码

跟上一关一样,两个参数。
试试上一关的payload
arg01=1%20onmouseover&arg02=alert(1)
发现不行
这关是主要将flash xss,有关flash xss讲解在这篇博文:
这里我们第一步,下载页面中的插件,点击链接

用JPEXS反编译swf,快速定位到geturl

下面我们对这段代码进行分析
源码分析
这段 Flash XSS 代码来自一个早期的经典 Flash 字体渲染库漏洞场景 —— sIFR(Scalable Inman Flash Replacement)。它曾用于网页中将文字替换成自定义字体,而字体是由 Flash 显示的。这种机制因为接收 HTML 内容、支持点击链接,曾被广泛用于 Flash XSS 攻击。
一、主逻辑:右键菜单执行 getURL
sIFR.menuItems.push(
new ContextMenuItem("Followlink", function () {
getURL(sIFR.instance.primaryLink, sIFR.instance.primaryLinkTarget);
}),
new ContextMenuItem("Open link in new window", function () { getURL(sIFR.instance.primaryLink, "_blank");
})
);
解释:
-
ContextMenuItem是 Flash 的右键菜单项构造函数。 -
点击菜单后,会调用
getURL(...)—— 它是 Flash 中触发浏览器跳转(或者执行 JavaScript)的函数。 -
sIFR.instance.primaryLink是要跳转的链接; -
sIFR.instance.primaryLinkTarget是跳转方式(如_blank是新窗口)。
二、getURL 的前提:必须是“链接内容”
后面提到:
function contentIsLink() {
return this.content.indexOf("<a ") == 0 &&
this.content.indexOf("<a ") == this.content.lastIndexOf("<a ") &&
this.content.indexOf("</a>") == this.content.length - 4; }
解释:
这是个 判断内容是否是合法超链接(<a> 标签) 的函数:
| 条件 | 意义 |
|---|---|
<a 在起始位置 | <a> 标签必须出现在字符串最前面 |
<a> 出现一次 | 避免嵌套或多个链接 |
</a> 恰好在结尾 | 说明是完整闭合标签 |
如果通过判断,就会设置这个链接为 primaryLink,最终才能被右键菜单中的 getURL() 调用!
三、version 参数传入 context 中:
if (_loc5_ && _root.version != sIFR.VERSION) {
_loc4_ = sIFR.VERSION_WARNING.split("%s").join(_root.version);
}
解释:
-
如果你访问页面时带参数:
?version=xxx -
就会将这个 version 的值插入到
_loc4_变量中。 -
_loc4_被插入到页面中的 Flash 内容里。
但此时只是一个普通的字符串插值,不会直接执行 JavaScript,除非:
你插入的是:
<a href="javascript:alert(1)">click me</a>
并且这段 HTML 刚好满足 contentIsLink() 的判断条件。
四、完整攻击链条
如果页面中存在如下内容:
<embed src="sifr.swf?version=<a href='javascript:alert(1)'>x</a>">
流程如下:
-
version参数变成 Flash 中的_loc4_; -
_loc4_渲染到了页面中的this.content; -
contentIsLink()判断通过; -
Flash 将这段内容解析为链接;
-
用户右键选择菜单 →
getURL(...)被触发; -
浏览器执行了
javascript:alert(1),成功 XSS!
五、Flash XSS 的危险点就在于:
-
JavaScript 可被 Flash 的
getURL调用; -
Flash 会解析 URL 参数并直接拼接;
-
如果
href="javascript:..."没有被过滤,就可以执行任意脚本。
六、防御建议
虽然 Flash 已淘汰,但在渗透测试或审计旧系统时,可以参考以下做法:
| 防御点 | 描述 |
|---|---|
禁用 getURL("javascript:...") | 通过黑名单或严格匹配 |
| 参数输入校验 | 不允许 href 使用 javascript: 协议 |
| CSP 防护 | 禁止执行内联 JS |
| 不允许 Flash 接收动态 HTML 内容 | 禁止 ?version=<a> 这种用法 |
payload为:arg01=version&arg02=%3Ca%20href=%22javascript:alert(%27xss%27)%22%3E111%3C/a%3E

2517

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



