Schemeflood原理
前几天看到了一个很有趣的漏洞,具体的实现方法在https://github.com/fingerprintjs/external-protocol-flooding,本文只讨论在Windows系统下如何实现。
什么是Scheme
要了解Scheme就要先了解什么是Deeplink
以及URL Protocol
,Deeplink
简单来说就是通过网页打开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://123
、Tencent://2332
等,在打开URI时,如果存在对应的软件时,浏览器会自动弹出一个对话框确认是否打开软件并聚焦到URI页面,所以可以通过onfocus实现判断URI对应的软件是否存在(通过源码猜测判断方式,未能理解源码的实现方式)
参考源码如下
只要收集大量的URI指纹信息,即可通过该漏洞快速判断访问者个人PC上是否存在某些软件,虽然还存在某些不足,如必须打开新的浏览器窗口,但这对于正常使用者来说也是十分危险的。在我看来,如果通过该网页判断存在含有漏洞的软件,构造恶意代码即可攻击个人PC、获取个人PC上的数据等,如:通过Xmind://
判断个人PC存在Xmind软件,可以利用前些天存在的Xmind RCE
获取操作系统权限
《Schemeflood原理》链接:https://xdym11235.com/archives/58.html
具体版权规定详见侧栏版权说明页面