Real Player 'DCP://' URI 远程任意代码执行漏洞
视频演示:https://youtu.be/AMODp3iTnqY
'DCP://' URI 方案是 Real Player 使用的一种内部协议,用于获取要在播放器浏览器选项卡中显示的 URL。 它代表"数据缓存协议"(Data Cache Protocol)。它将从 '%appdata%\real\realplayer' 目录获取文件。 这些文件是简单的 '.ini' 文件,包含以下代码:
'offlineurl' 属性似乎被忽略了,但是仍可以传入任意 URL,包括指向本地文件的 URL 以及不安全的 'Javascript:' URI。
示例:dcp://custom.ini
这可能会造成普遍的跨站脚本(uXSS)条件。
Real Player 使用 Microsoft Internet Explorer 的功能,并通过一种应用程序特有的特殊方式公开属性和方法:
'external' 对象及其公开的多个自定义方法和属性。
虽然无法检索远程文件,但可以使用上级目录(..\)来获取这些文件。 为此,我们可以使用 'external::OpenURLInPlayerBrowser()' 方法
将此问题与 'external::RecordClip()' 方法的文件植入问题相结合,我们能够在可预测的位置 植入有效的 '.ini' 文件(尽管它们没有扩展名):
'Videos\RealPlayer Downloads'。
通过植入 2 个文件,并进一步通过 'DCP://' URI 引用它们,就可以引用 属于任意域名或"安全区域"(Windows 安全区域)的 URL,然后注入自定义 javascript 代码。
该 PoC 使用的代码会让针对不安全 ActiveX 控件的提示"失效",并运行指向第二个文件的 MSHTA, 第二个文件包含用于运行 'cmd.exe' 的代码。其中还可以包含例如内嵌的 EXE。
要复现此问题,只需编辑文件并将 '%server%' 替换为实际的服务器主机名或 IP。 同时,在文件 'dcp1.txt' 和 'rp_dcp.htm' 中,将 '%username%' 替换为目标实际的 Windows 用户名。
注意:Windows 用户名可以通过向 SMB 服务器或 WebDAV 服务器发起请求来获取。
受影响版本:16.0.3.51、Cloud 17.0.9.17、v.20.0.7.309 适用于任何 Windows 版本(XP 至 11)