Server Side Inclusion/Edge Side Inclusion Injection
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
(Εισαγωγή από Apache docs)
SSI (Server Side Includes) είναι εντολές που είναι τοποθετημένες σε σελίδες HTML και αξιολογούνται στον διακομιστή κατά την εξυπηρέτηση των σελίδων. Σας επιτρέπουν να προσθέσετε δυναμικά παραγόμενο περιεχόμενο σε μια υπάρχουσα σελίδα HTML, χωρίς να χρειάζεται να εξυπηρετήσετε ολόκληρη τη σελίδα μέσω ενός προγράμματος CGI ή άλλης δυναμικής τεχνολογίας. Για παράδειγμα, μπορείτε να τοποθετήσετε μια εντολή σε μια υπάρχουσα σελίδα HTML, όπως:
<!--#echo var="DATE_LOCAL" -->
Και, όταν η σελίδα εξυπηρετείται, αυτό το τμήμα θα αξιολογηθεί και θα αντικατασταθεί με την τιμή του:
Tuesday, 15-Jan-2013 19:28:54 EST
Η απόφαση για το πότε να χρησιμοποιήσετε SSI και πότε να έχετε τη σελίδα σας να παράγεται εξ ολοκλήρου από κάποιο πρόγραμμα, είναι συνήθως θέμα του πόσο από τη σελίδα είναι στατική και πόσο χρειάζεται να ξαναϋπολογιστεί κάθε φορά που εξυπηρετείται η σελίδα. Το SSI είναι ένας εξαιρετικός τρόπος για να προσθέσετε μικρά κομμάτια πληροφοριών, όπως η τρέχουσα ώρα - όπως φαίνεται παραπάνω. Αλλά αν η πλειοψηφία της σελίδας σας παράγεται τη στιγμή που εξυπηρετείται, πρέπει να αναζητήσετε κάποια άλλη λύση.
Μπορείτε να συμπεράνετε την παρουσία του SSI αν η διαδικτυακή εφαρμογή χρησιμοποιεί αρχεία με την επέκταση .shtml
, .shtm
ή .stm
, αλλά δεν είναι μόνο αυτό το περίπτωση.
Μια τυπική έκφραση SSI έχει την εξής μορφή:
Υπάρχει ένα πρόβλημα με την αποθήκευση πληροφοριών ή δυναμικών εφαρμογών καθώς το περιεχόμενο μπορεί να έχει διαφορεθεί για την επόμενη φορά που θα ανακτηθεί το περιεχόμενο. Αυτό είναι που χρησιμοποιείται το ESI, για να υποδείξει χρησιμοποιώντας ετικέτες ESI το δυναμικό περιεχόμενο που πρέπει να παραχθεί πριν σταλεί η έκδοση της cache. Εάν ένας επιτιθέμενος είναι σε θέση να εισάγει μια ετικέτα ESI μέσα στο περιεχόμενο της cache, τότε θα μπορούσε να είναι σε θέση να εισάγει αυθαίρετο περιεχόμενο στο έγγραφο πριν σταλεί στους χρήστες.
Η παρακάτω κεφαλίδα σε μια απάντηση από τον διακομιστή σημαίνει ότι ο διακομιστής χρησιμοποιεί ESI:
Αν δεν μπορείτε να βρείτε αυτή την κεφαλίδα, ο διακομιστής μπορεί να χρησιμοποιεί ESI ούτως ή άλλως. Μια προσέγγιση τυφλής εκμετάλλευσης μπορεί επίσης να χρησιμοποιηθεί καθώς ένα αίτημα θα πρέπει να φτάσει στον διακομιστή των επιτιθέμενων:
Η GoSecure δημιούργησε έναν πίνακα για να κατανοήσει τις πιθανές επιθέσεις που μπορούμε να δοκιμάσουμε κατά διαφόρων λογισμικών που υποστηρίζουν ESI, ανάλογα με τη λειτουργικότητα που υποστηρίζουν:
Includes: Υποστηρίζει την εντολή <esi:includes>
Vars: Υποστηρίζει την εντολή <esi:vars>
. Χρήσιμο για την παράκαμψη φίλτρων XSS
Cookie: Τα cookies του εγγράφου είναι προσβάσιμα στον κινητήρα ESI
Απαιτούμενοι Κεφαλίδες Upstream: Οι εφαρμογές surrogate δεν θα επεξεργαστούν δηλώσεις ESI εκτός αν η upstream εφαρμογή παρέχει τις κεφαλίδες
Λίστα Επιτρεπόμενων Hosts: Σε αυτή την περίπτωση, οι ESI includes είναι δυνατές μόνο από επιτρεπόμενους διακομιστές, καθιστώντας το SSRF, για παράδειγμα, δυνατό μόνο κατά αυτών των διακομιστών
Λογισμικό
Includes
Vars
Cookies
Απαιτούμενοι Κεφαλίδες Upstream
Λίστα Επιτρεπόμενων Hosts
Squid3
Ναι
Ναι
Ναι
Ναι
Όχι
Varnish Cache
Ναι
Όχι
Όχι
Ναι
Ναι
Fastly
Ναι
Όχι
Όχι
Όχι
Ναι
Akamai ESI Test Server (ETS)
Ναι
Ναι
Ναι
Όχι
Όχι
NodeJS esi
Ναι
Ναι
Ναι
Όχι
Όχι
NodeJS nodesi
Ναι
Όχι
Όχι
Όχι
Προαιρετικό
Η παρακάτω εντολή ESI θα φορτώσει ένα αυθαίρετο αρχείο μέσα στην απόκριση του διακομιστή
Απομακρυσμένη κλοπή cookie
Κλέψτε το cookie HTTP_ONLY με XSS αντανακλώντας το στην απάντηση:
Μην το συγχέετε με μια "Τοπική Συμπερίληψη Αρχείου":
Το παρακάτω θα προσθέσει ένα Location
header στην απάντηση
Προσθέστε κεφαλίδα σε αναγκαστικό αίτημα
Προσθέστε κεφαλίδα στην απάντηση (χρήσιμο για να παρακάμψετε το "Content-Type: text/json" σε μια απάντηση με XSS)
Αυτό θα στείλει πληροφορίες αποσφαλμάτωσης που περιλαμβάνονται στην απάντηση:
Είναι δυνατόν να χρησιμοποιήσετε τη σύνταξη eXtensible Stylesheet Language Transformations (XSLT)
στο ESI απλά δηλώνοντας την τιμή παραμέτρου dca
ως xslt
. Αυτό μπορεί να επιτρέψει την κατάχρηση του XSLT για τη δημιουργία και κατάχρηση μιας ευπάθειας XML External Entity (XXE):
Check the XSLT page:
XSLT Server Side Injection (Extensible Stylesheet Language Transformations)Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)