xsslab-第十九关

依旧先看源码

跟上一关一样,两个参数。

试试上一关的payload

arg01=1%20onmouseover&arg02=alert(1)

发现不行

这关是主要将flash xss,有关flash xss讲解在这篇博文:

flash-XSS-CSDN博客

这里我们第一步,下载页面中的插件,点击链接

用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>">

流程如下:

  1. version 参数变成 Flash 中的 _loc4_

  2. _loc4_ 渲染到了页面中的 this.content

  3. contentIsLink() 判断通过;

  4. Flash 将这段内容解析为链接;

  5. 用户右键选择菜单 → getURL(...) 被触发;

  6. 浏览器执行了 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值