百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

如何检测Edge浏览器中已安装的扩展应用

toyiye 2024-05-09 18:41 19 浏览 0 评论

作者:興趣使然的小胃

预估稿费:160RMB

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿

一、前言


对攻击者来说,如果能够收集受害者的指纹信息是最好不过的事情。在前面的文章中,我们已经知道攻击者可以利用漏洞来检测特定文件的存在(以规避安全分析人员的检测),也可以将mimeTypes与应用程序相关联。微软及时修复了这两个漏洞,也封堵了与之相关的其他漏洞。今天,我们将向读者展示如何检测Edge浏览器中已安装的扩展应用。

4月5日,Nataliia Bielova发布了一条推文,介绍了某个网站如何检测多个浏览器上已安装的扩展应用,但微软的Edge并不包括在内。

如果读者希望进一步了解如何检测Firefox和Chrome浏览器的扩展应用,可以参考这篇文章以获取更多知识。本文我们将在Edge浏览器上完成同样任务。

二、安装扩展


在Edge浏览器的扩展商店中,我随机选择一款名为AdGuard blocker的扩展应用。两次鼠标点击后,扩展已安装完毕,自动打开了一个感谢页面。正是这个页面给了我研究的灵感,如下图所示:

我们可以利用上面的URL信息开始研究。如果我们能够在一个iframe内部中加载该URL,通过onload或onreadystatechange事件(或者其他事件),判断获取的是Edge浏览器的标准404页面(即扩展未安装)还是该扩展的thankyou.html页面,那么我们基本上就可以判断该扩展是否存在。不幸的是,iframe拒绝加载该扩展的URL。

1
<iframe src="ms-browser-extension://EdgeExtension_AdguardAdguardAdBlocker_m055xr0c82818/pages/thankyou.html"></iframe>

如果使用windows.open方法,结果如何呢?我们可以尝试在脚本中打开扩展的URL:

1
2
win = window.open("ms-browser-extension://EdgeExtension_AdguardAdguardAdBlocker_m055xr0c82818/pages/thankyou.html");
// win returns null when the URL is ms-browser-extension

页面打开成功!不过对我们来说这个结果用处不大,因为不管扩展是否安装,windows对象返回值始终为空(null)。换句话说,当我们试图使用ms-browser-extension扩展协议打开一个新建窗口时,返回结果始终为null。因此即使我们的确能够打开浏览器窗口(当然这是个丑陋的解决方案),我们也无法判断获取的结果是否准确。

我们是否可以利用扩展中的图片来判断呢?扩展中的图片有可能会暴露在主页面中,我们可以使用onload或onerror事件检测扩展是否安装。首先,我们需要找出扩展文件存放在文件系统中具体位置。

三、定位扩展文件


运行Process Monitor,将MicrosoftEdgeCP.exe添加到过滤规则中。打开Edge浏览器,在地址栏中输入AdGuard扩展的URL,载入扩展的感谢页面。在Process Monitor中,我们很快就可以定位到扩展文件所处的具体位置。记住我们的目标是找出扩展中的图片,判断是否可以通过onload或onerror事件检测图片的存在。

看起来扩展文件存放在如下位置:

访问上一层目录,我们可以看到其中存在一个manifest.json文件,定义了某些资源可以被任何网站加载,与Chrome或Firefox浏览器类似。

这些资源大多数都是图片资源,我们可以尝试使用下面这个脚本加载logo.svg图片,如果触发onload事件,则表明该扩展已安装,否则表明用户并没有安装该扩展。

这种方法并没有让我眼前一亮,因为我们还是重复以前检测的老套路(与Chrome和FireFox浏览器上的方法类似),我们过度依赖于扩展的积极配合,允许我们加载其内部资源。如果某个扩展在manifest文件中不存在Web可以访问的资源,这种情况下我们如何检测它的存在呢?

四、检测扩展的通用方法


经过了短暂的尝试后,我决定借鉴Soroush提出的IE DTD技巧,这类技巧尝试使用微软的XMLDOM对象加载资源,通过错误号来判断资源文件的存在与否。在Edge浏览器上,我们没有XMLDOM对象,但我们可以使用与之类似的XMLHttpRequest对象。

使用XMLHttpRequest对象打开资源时,如果扩展存在,它会抛出拒绝访问异常,否则会抛出未指定错误异常。为了表示对Soroush成果的尊重,我们同样采用异常错误号来判断所抛出的异常类别。代码如下所示:

结果非常不错,感谢Soroush的伟大发现。

顺便提一下,你是否注意到我们使用的URL并没有指向任何一个资源文件?这涉及到XML的一些技巧。对XML来说,使用目录名就已足够,我们不需要指向某个特定资源,只需要掌握扩展的ID信息就足以检测扩展是否存在。如果我们希望实现一个通用的检测工具,查找所有的扩展信息,我们首先需要在自己的Edge浏览器上安装所有的扩展,记录这些扩展的ID。我们只需要在安装扩展后,打开一个空白页面,按下F12,就可以找到扩展的ID信息。如下图所示:

我们现在可以利用这些信息为Edge浏览器创建一个通用的扩展检测工具。已禁用的扩展不会在开发者工具中加载,但我们还是可以在注册表中找到它们。

即使用户禁用了扩展,我们的检测方法仍然行之有效。我们利用PoC检测出来的20个已安装的扩展信息,如下图所示。

检测已安装扩展的PoC可以在这里找到。

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码