當前位置:
首頁 > 新聞 > 如何通過簡單的網頁文件從MacOS中盜取文件?

如何通過簡單的網頁文件從MacOS中盜取文件?

文檔、源碼、ssh密鑰、密碼等等所有的這些文件都可以傳送過去。不可能嗎?當然是可能的。一些常用的瀏覽器可能正在這樣做。

通常情況下,攻擊者的攻擊流程大致如下:

1. 用戶在瀏覽器中打開html文件

2. 瀏覽器讀取用戶有許可權訪問的文件列表。

3. 瀏覽器讀取重要文件,並且將他們上傳到攻擊者啟動的遠程伺服器中,這一過程會在後台進行,並且不會通知用戶。

現在我們將這一過程分成幾個階段:

階段一:在當前用戶計算機上收集關於文件的信息。

階段二:讀取文件,將文件上傳到遠程伺服器上。

在階段一中,攻擊者需要得到文件列表。這一步驟不是那麼容易解決的,通常來講,開發者不會允許html頁面讀取文件夾內容,或者獲取當前路徑。猜測以及嘗試所有可能的路徑也不是一個好的選擇。雖然一些文件的路徑是通用的,比如~/.ssh/id_rsa,但是大部分文件在不同系統中存放的位置是不同的。

假設我們已經將第一階段中的限制繞過,那麼在第二階段攻擊者需要對瀏覽器的沙箱進行逃逸,進而對文件讀取,將其上傳到遠程伺服器。

得到目錄列表

MacOS不同Windows以及Linux,它具有一個很有趣的屬性,當目錄被訪問時,操作系統會產生隱藏文件:.DS_Store.

這一文件會保存文件瀏覽會話信息,包括瀏覽文件窗口的大小以及位置,查看屬性和所選圖標等信息。這一文件是自動生成的,主要目的是為了快速簡單的獲取到文件夾信息。

.DS_Store和windows下面的Thumbs.db功能類似,不過.DS_Store中還包含了文件夾以及文件名字。一旦文件夾打開,.DS_Store.

這就非常有趣了,可以通過解析.DS_Store文件很容易獲取到文件夾中文件名字。舉個例子,下方python代碼就可以做到這一點:

##!/usr/bin/env pythonfrom ds_store import DSStoreimport jsonpath = 『/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訪問到這些文件吧。

Safari同樣也會警告不能同本地文件一同使用,比如:file://協議

但是如果文件是從互聯網上下載的,safari就會放寬它的驗證機制,因此我們可以使用XHR請求本地文件,進而返迴文件內容:

如果文件存在,那它就會執行成功。

了解了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內置網頁。解釋起來有點複雜,它有兩種支持的格式,每種都可以進行手動偽造:

數據為Base64頁面,每行包含59個符號

如何解決數據來源問題?

默認情況下,通過互聯網下載的文件都具有執行保護:

這就意味著電子郵件中的附件可能不會執行,不過有個好消息是,不是所有的下載文件都具有保護機制。舉個例子,MacOS版本的Telegram就沒有保護機制,可以直接執行。在一些實踐之後,我們通過telegram桌面版本進行傳送惡意XHTM,進而解除執行限制。

這只是一個簡單例子,其他類似的情況也是可能的。舉個例子,你可以通過一個裝有家庭照片的U盤進行傳播。

如果你想嘗試一下這一例子,你可以在我的github(https://github.com/Bo0oM/Safiler)上找到PoC進行實驗。

該怎麼辦?

在這個時候,作為一個Safari用戶,你不能做任何事情。顯然,蘋果不認為這個問題是安全漏洞。我們還沒有了解到有補丁來解決這一問題。

所以需要保持警惕,並且非常小心你從互聯網上下載的文件。唯一要做的就是不要使用Safari瀏覽器。

點擊展開全文

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 嘶吼RoarTalk 的精彩文章:

Ebay出售投票機:內含美國大選中65萬選民個人信息
64位系統下的Office後門利用
維基解密再爆CIA武器,Dumbo可拔除所有的攝像頭
踏雪無痕——對新型無文件後門 JS

TAG:嘶吼RoarTalk |

您可能感興趣

如何從iOS中捕獲TAR文件
如何訪問macOS上的鎖定文件
iOS最新beta版系統描述文件以及屏蔽更新文件
如何在 Linux 上複製文件/文件夾到遠程系統?
越獄插件:讓iPhone文件變透明!
OneDrive意外刪除文件如何恢復?
使用 Python 將數據寫到 CSV 文件
Twitter曝出日誌文件存明文密碼騷操作
iOS也能將Safari網頁直接轉存成PDF文件,超級簡單!
如何在Linux下解除PDF文件的密碼?
蘋果macos dmg文件轉換成ISO文件教程
如何把神經網路keras模型轉PMML文件?
如何在 Linux 中查看已掛載的文件系統類型
FSO應用 讀取txt文件
怎麼破解PDF文件中的密碼?
黑客可利用PDF文件獲取Windows憑據
我的 P30 Pro 簡單使用體驗,以及如何查看是否支持 EROFS 文件系統
如何使用 pdfgrep 從終端搜索 PDF 文件
Python實現讀取PDF文件案例
iOSbeta3測試版描述文件