CRLF (%0D%0A) 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)
Bug bounty tip: sign up for Intigriti, a premium bug bounty platform created by hackers, for hackers! Join us at https://go.intigriti.com/hacktricks today, and start earning bounties up to $100,000!
Ο χαρακτήρας επιστροφής καροτσιού (CR) και ο χαρακτήρας τροφοδοσίας γραμμής (LF), γνωστοί συλλογικά ως CRLF, είναι ειδικές ακολουθίες χαρακτήρων που χρησιμοποιούνται στο πρωτόκολλο HTTP για να δηλώσουν το τέλος μιας γραμμής ή την αρχή μιας νέας. Οι διακομιστές ιστού και οι περιηγητές χρησιμοποιούν το CRLF για να διακρίνουν μεταξύ των κεφαλίδων HTTP και του σώματος μιας απάντησης. Αυτοί οι χαρακτήρες χρησιμοποιούνται καθολικά σε επικοινωνίες HTTP/1.1 σε διάφορους τύπους διακομιστών ιστού, όπως οι Apache και Microsoft IIS.
Η ένεση CRLF περιλαμβάνει την εισαγωγή χαρακτήρων CR και LF σε είσοδο που παρέχεται από τον χρήστη. Αυτή η ενέργεια παραπλανεί τον διακομιστή, την εφαρμογή ή τον χρήστη να ερμηνεύσει την εισαγόμενη ακολουθία ως το τέλος μιας απάντησης και την αρχή μιας άλλης. Ενώ αυτοί οι χαρακτήρες δεν είναι εγγενώς επιβλαβείς, η κακή χρήση τους μπορεί να οδηγήσει σε διαχωρισμό απάντησης HTTP και άλλες κακόβουλες δραστηριότητες.
Σκεφτείτε ένα αρχείο καταγραφής σε έναν πίνακα διαχείρισης που ακολουθεί τη μορφή: IP - Χρόνος - Επισκεφθείσα Διαδρομή
. Μια τυπική καταχώρηση μπορεί να φαίνεται έτσι:
Ένας επιτιθέμενος μπορεί να εκμεταλλευτεί μια ένεση CRLF για να χειριστεί αυτό το αρχείο καταγραφής. Εισάγοντας χαρακτήρες CRLF στο HTTP αίτημα, ο επιτιθέμενος μπορεί να αλλάξει τη ροή εξόδου και να κατασκευάσει καταχωρήσεις αρχείου καταγραφής. Για παράδειγμα, μια εισαχθείσα ακολουθία μπορεί να μετατρέψει την καταχώρηση του αρχείου καταγραφής σε:
Εδώ, %0d
και %0a
αντιπροσωπεύουν τις URL-κωδικοποιημένες μορφές CR και LF. Μετά την επίθεση, το αρχείο καταγραφής θα εμφανίζεται παραπλανητικά:
The attacker thus cloaks their malicious activities by making it appear as if the localhost (an entity typically trusted within the server environment) performed the actions. The server interprets the part of the query starting with %0d%0a
as a single parameter, while the restrictedaction
parameter is parsed as another, separate input. The manipulated query effectively mimics a legitimate administrative command: /index.php?page=home&restrictedaction=edit
HTTP Response Splitting είναι μια ευπάθεια ασφαλείας που προκύπτει όταν ένας επιτιθέμενος εκμεταλλεύεται τη δομή των HTTP απαντήσεων. Αυτή η δομή χωρίζει τις κεφαλίδες από το σώμα χρησιμοποιώντας μια συγκεκριμένη ακολουθία χαρακτήρων, Carriage Return (CR) ακολουθούμενη από Line Feed (LF), που ονομάζεται συλλογικά CRLF. Εάν ένας επιτιθέμενος καταφέρει να εισάγει μια ακολουθία CRLF σε μια κεφαλίδα απάντησης, μπορεί να χειριστεί αποτελεσματικά το περιεχόμενο της επόμενης απάντησης. Αυτός ο τύπος χειρισμού μπορεί να οδηγήσει σε σοβαρά ζητήματα ασφαλείας, κυρίως Cross-site Scripting (XSS).
Η εφαρμογή ορίζει μια προσαρμοσμένη κεφαλίδα όπως αυτή: X-Custom-Header: UserInput
Η εφαρμογή ανακτά την τιμή για το UserInput
από μια παράμετρο ερωτήματος, ας πούμε "user_input". Σε σενάρια που λείπει η κατάλληλη επικύρωση και κωδικοποίηση εισόδου, ένας επιτιθέμενος μπορεί να δημιουργήσει ένα payload που περιλαμβάνει την ακολουθία CRLF, ακολουθούμενη από κακόβουλο περιεχόμενο.
Ένας επιτιθέμενος δημιουργεί μια διεύθυνση URL με ένα ειδικά κατασκευασμένο 'user_input': ?user_input=Value%0d%0a%0d%0a<script>alert('XSS')</script>
Σε αυτή τη διεύθυνση URL, %0d%0a%0d%0a
είναι η URL-encoded μορφή του CRLFCRLF. Εξαπατά τον διακομιστή να εισάγει μια ακολουθία CRLF, κάνοντάς τον να θεωρεί το επόμενο μέρος ως το σώμα της απάντησης.
Ο διακομιστής ανακλά την είσοδο του επιτιθέμενου στην κεφαλίδα απάντησης, οδηγώντας σε μια μη προγραμματισμένη δομή απάντησης όπου το κακόβουλο σενάριο ερμηνεύεται από τον περιηγητή ως μέρος του σώματος της απάντησης.
Browser to:
Και ο διακομιστής απαντά με την κεφαλίδα:
Άλλο παράδειγμα: (από https://www.acunetix.com/websitesecurity/crlf-injection/)
Μπορείτε να στείλετε το payload μέσα στο URL path για να ελέγξετε την απάντηση από τον διακομιστή (παράδειγμα από εδώ):
Check more examples in:
Η εισαγωγή HTTP Header Injection, που συχνά εκμεταλλεύεται μέσω της εισαγωγής CRLF (Carriage Return and Line Feed), επιτρέπει στους επιτιθέμενους να εισάγουν HTTP headers. Αυτό μπορεί να υπονομεύσει μηχανισμούς ασφαλείας όπως οι φίλτροι XSS (Cross-Site Scripting) ή η SOP (Same-Origin Policy), ενδεχομένως οδηγώντας σε μη εξουσιοδοτημένη πρόσβαση σε ευαίσθητα δεδομένα, όπως τα CSRF tokens, ή στη χειραγώγηση των συνεδριών χρηστών μέσω της τοποθέτησης cookies.
Ένας επιτιθέμενος μπορεί να εισάγει HTTP headers για να ενεργοποιήσει το CORS (Cross-Origin Resource Sharing), παρακάμπτοντας τους περιορισμούς που επιβάλλει η SOP. Αυτή η παραβίαση επιτρέπει σε σενάρια από κακόβουλες προελεύσεις να αλληλεπιδρούν με πόρους από διαφορετική προέλευση, ενδεχομένως αποκτώντας πρόσβαση σε προστατευμένα δεδομένα.
Η εισαγωγή CRLF μπορεί να χρησιμοποιηθεί για να κατασκευάσει και να εισάγει ένα εντελώς νέο HTTP request. Ένα αξιοσημείωτο παράδειγμα αυτού είναι η ευπάθεια στην κλάση SoapClient
της PHP, συγκεκριμένα μέσα στην παράμετρο user_agent
. Με την παραποίηση αυτής της παραμέτρου, ένας επιτιθέμενος μπορεί να εισάγει επιπλέον headers και περιεχόμενο σώματος, ή ακόμη και να εισάγει ένα νέο HTTP request εντελώς. Παρακάτω είναι ένα παράδειγμα PHP που δείχνει αυτή την εκμετάλλευση:
Για περισσότερες πληροφορίες σχετικά με αυτή την τεχνική και τα πιθανά προβλήματα ελέγξτε την αρχική πηγή.
Μπορείτε να εισάγετε βασικούς κεφαλίδες για να διασφαλίσετε ότι το back-end διατηρεί τη σύνδεση ανοιχτή μετά την απάντηση στο αρχικό αίτημα:
Μετά, μπορεί να καθοριστεί ένα δεύτερο αίτημα. Αυτό το σενάριο περιλαμβάνει συνήθως HTTP request smuggling, μια τεχνική όπου επιπλέον κεφαλίδες ή στοιχεία σώματος που προστίθενται από τον διακομιστή μετά την ένεση μπορούν να οδηγήσουν σε διάφορες εκμεταλλεύσεις ασφαλείας.
Εκμετάλλευση:
Ένεση Κακόβουλου Προθέματος: Αυτή η μέθοδος περιλαμβάνει την δηλητηρίαση του αιτήματος του επόμενου χρήστη ή μιας διαδικτυακής μνήμης 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 είναι μια αποθήκη κλειδιών-τιμών που χρησιμοποιεί ένα πρωτόκολλο καθαρού κειμένου. Περισσότερες πληροφορίες στο:
11211 - Pentesting MemcacheΓια πλήρεις πληροφορίες διαβάστε την αρχική ανάλυση
Εάν μια πλατφόρμα λαμβάνει δεδομένα από ένα HTTP αίτημα και τα χρησιμοποιεί χωρίς απολύμανση για να εκτελέσει αιτήματα σε έναν διακομιστή memcache, ένας επιτιθέμενος θα μπορούσε να εκμεταλλευτεί αυτή τη συμπεριφορά για να ενσωματώσει νέες εντολές memcache.
Για παράδειγμα, στην αρχικά ανακαλυφθείσα ευπάθεια, τα κλειδιά cache χρησιμοποιήθηκαν για να επιστρέψουν τη διεύθυνση IP και την πόρτα στην οποία θα έπρεπε να συνδεθεί ένας χρήστης, και οι επιτιθέμενοι μπόρεσαν να ενσωματώσουν εντολές memcache που θα δηλητηρίαζαν την cache για να στείλουν τις λεπτομέρειες των θυμάτων (συμπεριλαμβανομένων των ονομάτων χρηστών και των κωδικών πρόσβασης) στους διακομιστές των επιτιθέμενων:
Επιπλέον, οι ερευνητές ανακάλυψαν επίσης ότι μπορούσαν να αποσυγχρονίσουν τις απαντήσεις memcache για να στείλουν τη διεύθυνση IP και τις πόρτες των επιτιθέμενων σε χρήστες των οποίων το email δεν γνώριζαν οι επιτιθέμενοι:
Για να μετριάσετε τους κινδύνους των CRLF (Carriage Return and Line Feed) ή των Ενέσεων HTTP Header σε διαδικτυακές εφαρμογές, προτείνονται οι εξής στρατηγικές:
Αποφύγετε την Άμεση Είσοδο Χρήστη σε Κεφαλίδες Απαντήσεων: Η ασφαλέστερη προσέγγιση είναι να αποφύγετε την ενσωμάτωση εισόδου που παρέχεται από τον χρήστη απευθείας σε κεφαλίδες απαντήσεων.
Κωδικοποιήστε Ειδικούς Χαρακτήρες: Εάν η αποφυγή άμεσης εισόδου χρήστη δεν είναι εφικτή, βεβαιωθείτε ότι χρησιμοποιείτε μια συνάρτηση αφιερωμένη στην κωδικοποίηση ειδικών χαρακτήρων όπως CR (Carriage Return) και LF (Line Feed). Αυτή η πρακτική αποτρέπει την πιθανότητα ένεσης CRLF.
Ενημερώστε τη Γλώσσα Προγραμματισμού: Ενημερώνετε τακτικά τη γλώσσα προγραμματισμού που χρησιμοποιείται στις διαδικτυακές σας εφαρμογές στην τελευταία έκδοση. Επιλέξτε μια έκδοση που από τη φύση της απαγορεύει την ένεση χαρακτήρων CR και LF μέσα σε συναρτήσεις που έχουν ανατεθεί να ρυθμίζουν τις κεφαλίδες HTTP.
Συμβουλή bug bounty: εγγραφείτε στο Intigriti, μια premium πλατφόρμα bug bounty που δημιουργήθηκε από hackers, για hackers! Ελάτε μαζί μας στο https://go.intigriti.com/hacktricks σήμερα, και αρχίστε να κερδίζετε βραβεία έως $100,000!
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)