概括
本篇博客详细解释了FV Flowplayer Video Player (WordPress Plugin) 7.4.37.727之前版本的STORED XSS漏洞,为什么会出现,如何利用,如何缓解。请注意,此漏洞已在版本 7.4.38.727 中修补。
漏洞概述
FV Flowplayer Video Player 是一个 WordPress 插件,用于将 FLV 或 MP4 视频嵌入到您的帖子或页面中。它在/wp-admin/admin.php?page=fv_player中存在严重的跨站点脚本 (XSS) 漏洞。它允许经过身份验证的远程用户注入任意 Web 脚本或 HTML。
漏洞分析
在 /models/db-player.php 页面的第 446 行,
当我们发送创建视频播放器的 post 请求时,它包含`data`参数,然后将其存储在“$value”变量中。在将“$value”变量存储到数据库之前,没有适当的清理方法从“$value”变量中剥离 HTML 标签。
在 /models/db-player.php 页面的第 446 行,
同样,当我们发送更新视频播放器的 post 请求时,它包含 `data` 参数,然后将其存储在“$value”变量中。这里也没有适当的消毒方法。
开发
考虑到没有 HTML 标签剥离方法,我们可以在 onerror 属性中注入带有脚本的 <img> 标签,然后将其存储在数据库中并在检索和列出它们时执行。这是有关如何重现它的步骤,
打开 WordPress 转到仪表板->FV 播放器。
点击新视频。
在视频输入框中输入 http://localhost ”<img src=1 onerror=alert(‘testing’)> 并点击保存。
脚本存储在数据库中并执行。
减轻
XSS漏洞有很多缓解措施,其中一些是,
- 到达时过滤输入。
- 编码输出数据。
- 使用适当的响应标头。
- 使用内容安全策略。
内容安全政策:
它是防止 XSS 攻击的最简单和最有效的方法之一。它只是一个元标记,向网站提供有关资源应来自何处的非常明确的说明。此方法作为 XSS 漏洞的修补程序非常有效,直到根本原因得到修复(即,对输入进行适当的清理)。
上面的元标记应该可以防止跨站点脚本攻击。我们需要做的就是将元标记复制/粘贴到用户页面上。在这种情况下,我们必须将它放在我们的flowplayer.php页面上。这可以防止在页面呈现时从数据库加载存储的脚本。
例子:
此图片显示注入的脚本无法加载,因为它违反了我们正在实施的内容安全策略。