MENU

Schemeflood原理

May 24, 2021 • Read: 204 • 常山阅读设置

Schemeflood原理

前几天看到了一个很有趣的漏洞,具体的实现方法在https://github.com/fingerprintjs/external-protocol-flooding,本文只讨论在Windows系统下如何实现。

什么是Scheme

要了解Scheme就要先了解什么是Deeplink以及URL ProtocolDeeplink简单来说就是通过网页打开APP软件的一种链接,而URL Protocol就是实现Deeplink的一种途径,通过在Windows系统下配置URL Protocol,每当输入特定的URI(该URI即为Deeplink)后,即可打开该URI指定的软件,这种通过URI打开指定软件的过程就叫Scheme以QQ为例,在Windows上,在浏览器输入Tencent://任意字符即可打开QQ这个软件

PS:URI的全称是Uniform Resource Identifier(统一资源标志符),而URI中最常见的就是我们常用的统一资源定位符(URL)就是URI的一种,当然URI中也包含统一资源名(URN),这与本篇文章无关,具体的URI详情请阅读RFC3305文件

Deeplink

Deeplink全称Deferred Deeplink,中文名延迟深度链接,主要作用为判断是否安装相对应的软件,且URL与该软件匹配。当用户点击Deeplink时,会先判断是否安装了该软件,如果安装则打开该软件,如果未安装则跳转到安装页面

URL Protocol

Windows提供了配置URL Protocol的方法是通过注册表实现的,具体的配置方法请参照MSDN文档),注册表显示如图:

Schemeflood实现

在网页中嵌入JavaScript代码,打开一个新的浏览器窗口,同时对该窗口传入URI参数,如skype://123Tencent://2332等,在打开URI时,如果存在对应的软件时,浏览器会自动弹出一个对话框确认是否打开软件并聚焦到URI页面,所以可以通过onfocus实现判断URI对应的软件是否存在(通过源码猜测判断方式,未能理解源码的实现方式)

参考源码如下

只要收集大量的URI指纹信息,即可通过该漏洞快速判断访问者个人PC上是否存在某些软件,虽然还存在某些不足,如必须打开新的浏览器窗口,但这对于正常使用者来说也是十分危险的。在我看来,如果通过该网页判断存在含有漏洞的软件,构造恶意代码即可攻击个人PC、获取个人PC上的数据等,如:通过Xmind://判断个人PC存在Xmind软件,可以利用前些天存在的Xmind RCE获取操作系统权限

Last Modified: August 16, 2021
Archives QR Code Tip
QR Code for this page
Tipping QR Code