# Server Side Inclusion/Edge Side Inclusion Injection {{#include ../banners/hacktricks-training.md}} ## Server Side Inclusion Basic Information **(Introduction taken from** [**Apache docs**](https://httpd.apache.org/docs/current/howto/ssi.html)**)** SSI (Server Side Includes) είναι εντολές που **τοποθετούνται σε σελίδες HTML και αξιολογούνται στον διακομιστή** κατά την εξυπηρέτηση των σελίδων. Σας επιτρέπουν να **προσθέτετε δυναμικά παραγόμενο περιεχόμενο** σε μια υπάρχουσα σελίδα HTML, χωρίς να χρειάζεται να εξυπηρετήσετε ολόκληρη τη σελίδα μέσω ενός προγράμματος CGI ή άλλης δυναμικής τεχνολογίας.\ Για παράδειγμα, μπορείτε να τοποθετήσετε μια εντολή σε μια υπάρχουσα σελίδα HTML, όπως: `` Και, όταν η σελίδα εξυπηρετείται, αυτό το τμήμα θα αξιολογηθεί και θα αντικατασταθεί με την τιμή του: `Tuesday, 15-Jan-2013 19:28:54 EST` Η απόφαση για το πότε να χρησιμοποιήσετε SSI και πότε να έχετε τη σελίδα σας να παράγεται εξ ολοκλήρου από κάποιο πρόγραμμα, είναι συνήθως θέμα του πόσο στατική είναι η σελίδα και πόσο χρειάζεται να επαναϋπολογίζεται κάθε φορά που εξυπηρετείται η σελίδα. Το SSI είναι ένας εξαιρετικός τρόπος για να προσθέσετε μικρά κομμάτια πληροφοριών, όπως η τρέχουσα ώρα - όπως φαίνεται παραπάνω. Αλλά αν η πλειοψηφία της σελίδας σας παράγεται τη στιγμή που εξυπηρετείται, πρέπει να αναζητήσετε κάποια άλλη λύση. Μπορείτε να συμπεράνετε την παρουσία του SSI αν η διαδικτυακή εφαρμογή χρησιμοποιεί αρχεία με τις επεκτάσεις **`.shtml`, `.shtm` ή `.stm`**, αλλά δεν είναι μόνο αυτή η περίπτωση. Μια τυπική έκφραση SSI έχει την εξής μορφή: ``` ``` ### Έλεγχος ```javascript // Document name // Date // File inclusion // Including files (same directory) // CGI Program results // Including virtual files (same directory) // Modification date of a file // Command exec // Command exec // Reverse shell // Print all variables // Setting variables ``` ## Edge Side Inclusion Υπάρχει ένα πρόβλημα **με την αποθήκευση πληροφοριών ή δυναμικών εφαρμογών** καθώς μέρος του περιεχομένου μπορεί να έχει **διαφορεθεί** για την επόμενη φορά που θα ανακτηθεί το περιεχόμενο. Αυτό είναι που χρησιμοποιείται το **ESI**, για να υποδείξει χρησιμοποιώντας ετικέτες ESI το **δυναμικό περιεχόμενο που πρέπει να παραχθεί** πριν σταλεί η έκδοση της cache.\ Εάν ένας **επιτιθέμενος** είναι σε θέση να **εισάγει μια ετικέτα ESI** μέσα στο περιεχόμενο της cache, τότε θα μπορούσε να είναι σε θέση να **εισάγει αυθαίρετο περιεχόμενο** στο έγγραφο πριν σταλεί στους χρήστες. ### ESI Detection Η παρακάτω **κεφαλίδα** σε μια απάντηση από τον διακομιστή σημαίνει ότι ο διακομιστής χρησιμοποιεί ESI: ``` Surrogate-Control: content="ESI/1.0" ``` Αν δεν μπορείτε να βρείτε αυτή την κεφαλίδα, ο διακομιστής **μπορεί να χρησιμοποιεί ESI ούτως ή άλλως**.\ Μια **προσέγγιση τυφλής εκμετάλλευσης μπορεί επίσης να χρησιμοποιηθεί** καθώς ένα αίτημα θα πρέπει να φτάσει στον διακομιστή των επιτιθέμενων: ```javascript // Basic detection hello // If previous is reflected as "hello", it's vulnerable // Blind detection // XSS Exploitation Example // Cookie Stealer (bypass httpOnly flag) // Introduce private local files (Not LFI per se) // Valid for Akamai, sends debug information in the response ``` ### ESI exploitation [GoSecure δημιούργησε](https://www.gosecure.net/blog/2018/04/03/beyond-xss-edge-side-include-injection/) έναν πίνακα για να κατανοήσει τις πιθανές επιθέσεις που μπορούμε να δοκιμάσουμε σε διάφορα λογισμικά που υποστηρίζουν ESI, ανάλογα με τη λειτουργικότητα που υποστηρίζεται: - **Includes**: Υποστηρίζει την εντολή `` - **Vars**: Υποστηρίζει την εντολή ``. Χρήσιμο για την παράκαμψη φίλτρων XSS - **Cookie**: Τα cookies του εγγράφου είναι προσβάσιμα από την μηχανή ESI - **Upstream Headers Required**: Οι εφαρμογές surrogate δεν θα επεξεργαστούν δηλώσεις ESI εκτός αν η upstream εφαρμογή παρέχει τις κεφαλίδες - **Host Allowlist**: Σε αυτή την περίπτωση, οι ESI includes είναι δυνατές μόνο από επιτρεπόμενους διακομιστές, καθιστώντας το SSRF, για παράδειγμα, δυνατό μόνο κατά αυτών των διακομιστών | **Software** | **Includes** | **Vars** | **Cookies** | **Upstream Headers Required** | **Host Whitelist** | | :--------------------------: | :----------: | :------: | :---------: | :---------------------------: | :----------------: | | Squid3 | Yes | Yes | Yes | Yes | No | | Varnish Cache | Yes | No | No | Yes | Yes | | Fastly | Yes | No | No | No | Yes | | Akamai ESI Test Server (ETS) | Yes | Yes | Yes | No | No | | NodeJS esi | Yes | Yes | Yes | No | No | | NodeJS nodesi | Yes | No | No | No | Optional | #### XSS Η παρακάτω εντολή ESI θα φορτώσει ένα αυθαίρετο αρχείο μέσα στην απόκριση του διακομιστή ```xml ``` #### Παράκαμψη προστασίας XSS πελάτη ```xml x=>alert(/Chrome%20XSS%20filter%20bypass/);> Use to bypass WAFs: ipt>alert(1)ript> error=alert(1)> ``` #### Κλοπή Cookie - Απομακρυσμένη κλοπή cookie ```xml ``` - Κλέψε το cookie HTTP_ONLY με XSS αντανακλώντας το στην απάντηση: ```bash # This will reflect the cookies in the response # Reflect XSS (you can put '">' URL encoded and the URL encode eveyrhitng to send it in the HTTP request) # It's possible to put more complex JS code to steal cookies or perform actions ``` #### Ιδιωτικό Τοπικό Αρχείο Μην το συγχέετε με μια "Τοπική Συμπερίληψη Αρχείου": ```markup ``` #### CRLF ```markup ``` #### Open Redirect Το παρακάτω θα προσθέσει ένα `Location` header στην απάντηση ```bash ``` #### Προσθήκη Κεφαλίδας - Προσθέστε κεφαλίδα σε αναγκαστικό αίτημα ```xml ``` - Προσθέστε κεφαλίδα στην απάντηση (χρήσιμο για να παρακαμφθεί το "Content-Type: text/json" σε μια απάντηση με XSS) ```bash # Check the number of url_decode to know how many times you can URL encode the value ``` #### CRLF στο Add header (**CVE-2019-2438**) ```xml ``` #### Akamai debug Αυτό θα στείλει πληροφορίες αποσφαλμάτωσης που περιλαμβάνονται στην απάντηση: ```xml ``` ### ESI + XSLT = XXE Είναι δυνατόν να χρησιμοποιήσετε τη σύνταξη **`eXtensible Stylesheet Language Transformations (XSLT)`** στο ESI απλά δηλώνοντας την τιμή παραμέτρου **`dca`** ως **`xslt`**. Αυτό μπορεί να επιτρέψει την κατάχρηση του **XSLT** για τη δημιουργία και κατάχρηση μιας ευπάθειας XML External Entity (XXE): ```xml ``` XSLT αρχείο: ```xml ]> &xxe; ``` Ελέγξτε τη σελίδα XSLT: {{#ref}} xslt-server-side-injection-extensible-stylesheet-language-transformations.md {{#endref}} ### Αναφορές - [https://www.gosecure.net/blog/2018/04/03/beyond-xss-edge-side-include-injection/](https://www.gosecure.net/blog/2018/04/03/beyond-xss-edge-side-include-injection/) - [https://www.gosecure.net/blog/2019/05/02/esi-injection-part-2-abusing-specific-implementations/](https://www.gosecure.net/blog/2019/05/02/esi-injection-part-2-abusing-specific-implementations/) - [https://infosecwriteups.com/exploring-the-world-of-esi-injection-b86234e66f91](https://infosecwriteups.com/exploring-the-world-of-esi-injection-b86234e66f91) ## Λίστα Ανίχνευσης Brute-Force {{#ref}} https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssi_esi.txt {{#endref}} {{#include ../banners/hacktricks-training.md}}