Translated ['src/pentesting-web/http-request-smuggling/README.md', 'src/

This commit is contained in:
Translator 2025-08-20 16:41:44 +00:00
parent 47cfae38be
commit cc208e2bd0
2 changed files with 180 additions and 52 deletions

View File

@ -4,7 +4,7 @@
## Τι είναι
Αυτή η ευπάθεια συμβαίνει όταν μια **αποσυγχρονισμένη** κατάσταση μεταξύ των **proxy front-end** και του **server back-end** επιτρέπει σε έναν **επιτιθέμενο** να **στείλει** ένα HTTP **request** που θα **ερμηνευτεί** ως **ένα μόνο request** από τους **proxy front-end** (load balance/reverse-proxy) και **ως 2 requests** από τον **server back-end**.\
Αυτή η ευπάθεια συμβαίνει όταν μια **αποσυγχρονισμένη** κατάσταση μεταξύ των **proxy front-end** και του **server back-end** επιτρέπει σε έναν **επιτιθέμενο** να **στείλει** ένα HTTP **request** που θα **ερμηνευθεί** ως **ένα μόνο request** από τους **proxy front-end** (load balance/reverse-proxy) και **ως 2 requests** από τον **server back-end**.\
Αυτό επιτρέπει σε έναν χρήστη να **τροποποιήσει το επόμενο request που φτάνει στον server back-end μετά το δικό του**.
### Θεωρία
@ -24,21 +24,21 @@
### Πραγματικότητα
Ο **Front-End** (ένα load-balance / Reverse Proxy) **επεξεργάζεται** την _**content-length**_ ή την _**transfer-encoding**_ κεφαλίδα και ο **Back-end** server **επεξεργάζεται την άλλη** προκαλώντας μια **αποσυγχρονισμένη** κατάσταση μεταξύ των 2 συστημάτων.\
Αυτό μπορεί να είναι πολύ κρίσιμο καθώς **ένας επιτιθέμενος θα είναι σε θέση να στείλει ένα request** στον reverse proxy που θα **ερμηνευτεί** από τον **back-end** server **ως 2 διαφορετικά requests**. Ο **κίνδυνος** αυτής της τεχνικής έγκειται στο γεγονός ότι ο **back-end** server **θα ερμηνεύσει** το **2ο request που εισάγεται** σαν να **προήλθε από τον επόμενο πελάτη** και το **πραγματικό request** αυτού του πελάτη θα είναι **μέρος** του **εισαγμένου request**.
Οι **Front-End** (ένα load-balance / Reverse Proxy) **επεξεργάζονται** την κεφαλίδα _**content-length**_ ή την κεφαλίδα _**transfer-encoding**_ και ο **Back-end** server **επεξεργάζεται την άλλη** προκαλώντας μια **αποσυγχρονισμένη** κατάσταση μεταξύ των 2 συστημάτων.\
Αυτό μπορεί να είναι πολύ κρίσιμο καθώς **ένας επιτιθέμενος θα είναι σε θέση να στείλει ένα request** στον reverse proxy που θα **ερμηνευθεί** από τον **server back-end** **ως 2 διαφορετικά requests**. Ο **κίνδυνος** αυτής της τεχνικής έγκειται στο γεγονός ότι ο **server back-end** **θα ερμηνεύσει** το **2ο request που εισάγεται** σαν να **προήλθε από τον επόμενο πελάτη** και το **πραγματικό request** αυτού του πελάτη θα είναι **μέρος** του **εισαγμένου request**.
### Ιδιαιτερότητες
Θυμηθείτε ότι στο HTTP **ένας χαρακτήρας νέας γραμμής αποτελείται από 2 bytes:**
- **Content-Length**: Αυτή η κεφαλίδα χρησιμοποιεί έναν **δεκαδικό αριθμό** για να υποδείξει τον **αριθμό** των **bytes** του **σώματος** του request. Το σώμα αναμένεται να τελειώνει στον τελευταίο χαρακτήρα, **μια νέα γραμμή δεν είναι απαραίτητη στο τέλος του request**.
- **Transfer-Encoding:** Αυτή η κεφαλίδα χρησιμοποιεί στο **σώμα** έναν **εξαδικό αριθμό** για να υποδείξει τον **αριθμό** των **bytes** του **επόμενου κομματιού**. Το **chunk** πρέπει να **τελειώνει** με μια **νέα γραμμή** αλλά αυτή η νέα γραμμή **δεν μετράται** από τον δείκτη μήκους. Αυτή η μέθοδος μεταφοράς πρέπει να τελειώνει με ένα **κομμάτι μεγέθους 0 ακολουθούμενο από 2 νέες γραμμές**: `0`
- **Transfer-Encoding:** Αυτή η κεφαλίδα χρησιμοποιεί στο **σώμα** έναν **εξαδικό αριθμό** για να υποδείξει τον **αριθμό** των **bytes** του **επόμενου κομματιού**. Το **κομμάτι** πρέπει να **τελειώνει** με μια **νέα γραμμή** αλλά αυτή η νέα γραμμή **δεν μετράται** από τον δείκτη μήκους. Αυτή η μέθοδος μεταφοράς πρέπει να τελειώνει με ένα **κομμάτι μεγέθους 0 ακολουθούμενο από 2 νέες γραμμές**: `0`
- **Connection**: Βασισμένο στην εμπειρία μου, συνιστάται να χρησιμοποιείτε **`Connection: keep-alive`** στο πρώτο request της τεχνικής Smuggling.
## Βασικά Παραδείγματα
> [!TIP]
> Όταν προσπαθείτε να εκμεταλλευτείτε αυτό με το Burp Suite **απενεργοποιήστε το `Update Content-Length` και το `Normalize HTTP/1 line endings`** στον επαναλήπτη γιατί ορισμένα gadgets εκμεταλλεύονται τις νέες γραμμές, τις επιστροφές καροτσιού και τα κακώς διαμορφωμένα content-lengths.
> Όταν προσπαθείτε να εκμεταλλευτείτε αυτό με το Burp Suite **απενεργοποιήστε το `Update Content-Length` και το `Normalize HTTP/1 line endings`** στο repeater γιατί ορισμένα gadgets εκμεταλλεύονται τις νέες γραμμές, τις επιστροφές καροτσιού και τα κακώς διαμορφωμένα content-lengths.
Οι επιθέσεις HTTP request smuggling κατασκευάζονται στέλνοντας ασαφή requests που εκμεταλλεύονται τις διαφορές στον τρόπο που οι servers front-end και back-end ερμηνεύουν τις κεφαλίδες `Content-Length` (CL) και `Transfer-Encoding` (TE). Αυτές οι επιθέσεις μπορούν να εκδηλωθούν σε διάφορες μορφές, κυρίως ως **CL.TE**, **TE.CL**, και **TE.TE**. Κάθε τύπος αντιπροσωπεύει έναν μοναδικό συνδυασμό του πώς οι servers front-end και back-end δίνουν προτεραιότητα σε αυτές τις κεφαλίδες. Οι ευπάθειες προκύπτουν από την επεξεργασία του ίδιου request από τους servers με διαφορετικούς τρόπους, οδηγώντας σε απροσδόκητα και δυνητικά κακόβουλα αποτελέσματα.
@ -46,10 +46,10 @@
![https://twitter.com/SpiderSec/status/1200413390339887104?ref_src=twsrc%5Etfw%7Ctwcamp%5Etweetembed%7Ctwterm%5E1200413390339887104&ref_url=https%3A%2F%2Ftwitter.com%2FSpiderSec%2Fstatus%2F1200413390339887104](../../images/EKi5edAUUAAIPIK.jpg)
> [!NOTE]
> [!TIP]
> Στον προηγούμενο πίνακα θα πρέπει να προσθέσετε την τεχνική TE.0, όπως η τεχνική CL.0 αλλά χρησιμοποιώντας Transfer Encoding.
#### CL.TE Ευπάθεια (Content-Length χρησιμοποιούμενη από Front-End, Transfer-Encoding χρησιμοποιούμενη από Back-End)
#### CL.TE Ευπάθεια (Content-Length που χρησιμοποιείται από Front-End, Transfer-Encoding που χρησιμοποιείται από Back-End)
- **Front-End (CL):** Επεξεργάζεται το request με βάση την κεφαλίδα `Content-Length`.
- **Back-End (TE):** Επεξεργάζεται το request με βάση την κεφαλίδα `Transfer-Encoding`.
@ -73,7 +73,7 @@ GET /404 HTTP/1.1
Foo: x
```
#### TE.CL Ευπάθεια (Transfer-Encoding χρησιμοποιούμενη από Front-End, Content-Length χρησιμοποιούμενη από Back-End)
#### TE.CL Ευπάθεια (Transfer-Encoding που χρησιμοποιείται από Front-End, Content-Length που χρησιμοποιείται από Back-End)
- **Front-End (TE):** Επεξεργάζεται το request με βάση την κεφαλίδα `Transfer-Encoding`.
- **Back-End (CL):** Επεξεργάζεται το request με βάση την κεφαλίδα `Content-Length`.
@ -102,7 +102,7 @@ x=
```
#### TE.TE Ευπάθεια (Transfer-Encoding χρησιμοποιούμενη και από τους δύο, με παραπλάνηση)
#### TE.TE Ευπάθεια (Transfer-Encoding που χρησιμοποιείται και από τους δύο, με παραπλάνηση)
- **Servers:** Και οι δύο υποστηρίζουν το `Transfer-Encoding`, αλλά ένας μπορεί να παραπλανηθεί ώστε να το αγνοήσει μέσω παραπλάνησης.
- **Σενάριο Επίθεσης:**
@ -129,7 +129,7 @@ Transfer-Encoding
: chunked
```
#### **CL.CL Σενάριο (Content-Length χρησιμοποιούμενη και από τους Front-End και Back-End)**
#### **CL.CL Σενάριο (Content-Length που χρησιμοποιείται και από τους Front-End και Back-End)**
- Και οι δύο servers επεξεργάζονται το request βασισμένο αποκλειστικά στην κεφαλίδα `Content-Length`.
- Αυτό το σενάριο συνήθως δεν οδηγεί σε smuggling, καθώς υπάρχει ευθυγράμμιση στον τρόπο που και οι δύο servers ερμηνεύουν το μήκος του request.
@ -147,7 +147,7 @@ Normal Request
#### **CL.0 Σενάριο**
- Αναφέρεται σε σενάρια όπου η κεφαλίδα `Content-Length` είναι παρούσα και έχει τιμή διαφορετική από το μηδέν, υποδεικνύοντας ότι το σώμα του request έχει περιεχόμενο. Ο back-end αγνοεί την κεφαλίδα `Content-Length` (η οποία θεωρείται 0), αλλά ο front-end την αναλύει.
- Είναι κρίσιμο στην κατανόηση και την κατασκευή επιθέσεων smuggling, καθώς επηρεάζει το πώς οι servers προσδιορίζουν το τέλος ενός request.
- Είναι κρίσιμο για την κατανόηση και την κατασκευή επιθέσεων smuggling, καθώς επηρεάζει το πώς οι servers καθορίζουν το τέλος ενός request.
- **Παράδειγμα:**
```
@ -185,11 +185,11 @@ EMPTY_LINE_HERE
Αυτή η τεχνική είναι επίσης χρήσιμη σε σενάρια όπου είναι δυνατόν να **σπάσει ένας διακομιστής ιστού ενώ διαβάζετε τα αρχικά δεδομένα HTTP** αλλά **χωρίς να κλείσετε τη σύνδεση**. Με αυτόν τον τρόπο, το **σώμα** του αιτήματος HTTP θα θεωρείται το **επόμενο αίτημα HTTP**.
Για παράδειγμα, όπως εξηγείται σε [**αυτή την ανάρτηση**](https://mizu.re/post/twisty-python), στο Werkzeug ήταν δυνατό να σταλούν μερικοί **Unicode** χαρακτήρες και αυτό θα προκαλούσε **σπάσιμο** του διακομιστή. Ωστόσο, αν η σύνδεση HTTP δημιουργήθηκε με την κεφαλίδα **`Connection: keep-alive`**, το σώμα του αιτήματος δεν θα διαβαστεί και η σύνδεση θα παραμείνει ανοιχτή, οπότε το **σώμα** του αιτήματος θα αντιμετωπιστεί ως το **επόμενο αίτημα HTTP**.
Για παράδειγμα, όπως εξηγείται σε [**αυτή τη γραφή**](https://mizu.re/post/twisty-python), στο Werkzeug ήταν δυνατό να σταλούν μερικοί **Unicode** χαρακτήρες και αυτό θα έκανε τον διακομιστή να **σπάσει**. Ωστόσο, αν η σύνδεση HTTP δημιουργήθηκε με την κεφαλίδα **`Connection: keep-alive`**, το σώμα του αιτήματος δεν θα διαβαστεί και η σύνδεση θα παραμείνει ανοιχτή, οπότε το **σώμα** του αιτήματος θα αντιμετωπιστεί ως το **επόμενο αίτημα HTTP**.
#### Εξανα forcing μέσω κεφαλίδων hop-by-hop
Καταχρώντας τις κεφαλίδες hop-by-hop, μπορείτε να υποδείξετε στον proxy να **διαγράψει την κεφαλίδα Content-Length ή Transfer-Encoding ώστε να είναι δυνατή η κατάχρηση του HTTP request smuggling**.
Καταχρώντας τις κεφαλίδες hop-by-hop, θα μπορούσατε να υποδείξετε στον proxy να **διαγράψει την κεφαλίδα Content-Length ή Transfer-Encoding ώστε να είναι δυνατή η κατάχρηση του HTTP request smuggling**.
```
Connection: Content-Length
```
@ -201,7 +201,7 @@ Connection: Content-Length
## Εύρεση HTTP Request Smuggling
Η αναγνώριση ευπαθειών HTTP request smuggling μπορεί συχνά να επιτευχθεί χρησιμοποιώντας τεχνικές χρονομέτρησης, οι οποίες βασίζονται στην παρατήρηση του χρόνου που χρειάζεται ο διακομιστής για να απαντήσει σε παραποιημένα αιτήματα. Αυτές οι τεχνικές είναι ιδιαίτερα χρήσιμες για την ανίχνευση ευπαθειών CL.TE και TE.CL. Εκτός από αυτές τις μεθόδους, υπάρχουν άλλες στρατηγικές και εργαλεία που μπορούν να χρησιμοποιηθούν για να βρουν τέτοιες ευπάθειες:
Η αναγνώριση ευπαθειών HTTP request smuggling μπορεί συχνά να επιτευχθεί χρησιμοποιώντας τεχνικές χρονομέτρησης, οι οποίες βασίζονται στην παρατήρηση του πόσο χρόνο χρειάζεται ο διακομιστής για να απαντήσει σε παραποιημένα αιτήματα. Αυτές οι τεχνικές είναι ιδιαίτερα χρήσιμες για την ανίχνευση ευπαθειών CL.TE και TE.CL. Εκτός από αυτές τις μεθόδους, υπάρχουν άλλες στρατηγικές και εργαλεία που μπορούν να χρησιμοποιηθούν για να βρουν τέτοιες ευπάθειες:
### Εύρεση Ευπαθειών CL.TE Χρησιμοποιώντας Τεχνικές Χρονομέτρησης
@ -252,40 +252,146 @@ X
- Ο διακομιστής front-end επεξεργάζεται το αίτημα με βάση το `Transfer-Encoding` και προωθεί ολόκληρο το μήνυμα.
- Ο διακομιστής back-end, περιμένοντας ένα μήνυμα με βάση το `Content-Length`, περιμένει για επιπλέον δεδομένα που ποτέ δεν φτάνουν, προκαλώντας καθυστέρηση.
### Άλλες Μέθοδοι για Εύρεση Ευπαθειών
### Άλλες Μέθοδοι για να Βρείτε Ευπάθειες
- **Ανάλυση Διαφορετικών Απαντήσεων:**
- Στείλτε ελαφρώς παραλλαγμένες εκδόσεις ενός αιτήματος και παρατηρήστε αν οι απαντήσεις του διακομιστή διαφέρουν με απροσδόκητο τρόπο, υποδεικνύοντας μια διαφορά στην ανάλυση.
- **Χρήση Αυτοματοποιημένων Εργαλείων:**
- **Χρησιμοποιώντας Αυτοματοποιημένα Εργαλεία:**
- Εργαλεία όπως η επέκταση 'HTTP Request Smuggler' του Burp Suite μπορούν αυτόματα να δοκιμάσουν αυτές τις ευπάθειες στέλνοντας διάφορες μορφές ασαφών αιτημάτων και αναλύοντας τις απαντήσεις.
- **Δοκιμές Διαφορετικών Τιμών Content-Length:**
- Στείλτε αιτήματα με μεταβαλλόμενες τιμές `Content-Length` που δεν ευθυγραμμίζονται με το πραγματικό μήκος περιεχομένου και παρατηρήστε πώς ο διακομιστής χειρίζεται τέτοιες ασυμφωνίες.
- Στείλτε αιτήματα με διαφορετικές τιμές `Content-Length` που δεν ευθυγραμμίζονται με το πραγματικό μήκος περιεχομένου και παρατηρήστε πώς ο διακομιστής χειρίζεται τέτοιες ασυμφωνίες.
- **Δοκιμές Διαφορετικών Τιμών Transfer-Encoding:**
- Στείλτε αιτήματα με παραποιημένες ή κακώς διαμορφωμένες κεφαλίδες `Transfer-Encoding` και παρακολουθήστε πώς αντιδρούν διαφορετικά οι διακομιστές front-end και back-end σε τέτοιες παραποιήσεις.
### Δοκιμή Ευπάθειας HTTP Request Smuggling
Αφού επιβεβαιωθεί η αποτελεσματικότητα των τεχνικών χρονομέτρησης, είναι κρίσιμο να επαληθευτεί αν τα αιτήματα του πελάτη μπορούν να παραποιηθούν. Μια απλή μέθοδος είναι να προσπαθήσετε να δηλητηριάσετε τα αιτήματά σας, για παράδειγμα, κάνοντάς το αίτημα προς το `/` να αποδώσει μια απάντηση 404. Τα παραδείγματα `CL.TE` και `TE.CL` που συζητήθηκαν προηγουμένως στο [Basic Examples](#basic-examples) δείχνουν πώς να δηλητηριάσετε ένα αίτημα πελάτη για να προκαλέσετε μια απάντηση 404, παρά το γεγονός ότι ο πελάτης στοχεύει να αποκτήσει πρόσβαση σε διαφορετικό πόρο.
Αφού επιβεβαιωθεί η αποτελεσματικότητα των τεχνικών χρονομέτρησης, είναι κρίσιμο να επαληθευτεί αν τα αιτήματα του πελάτη μπορούν να παραποιηθούν. Μια απλή μέθοδος είναι να προσπαθήσετε να δηλητηριάσετε τα αιτήματά σας, για παράδειγμα, κάνοντάς το αίτημα προς το `/` να αποδώσει μια απάντηση 404. Τα παραδείγματα `CL.TE` και `TE.CL` που συζητήθηκαν προηγουμένως στο [Basic Examples](#basic-examples) δείχνουν πώς να δηλητηριάσετε ένα αίτημα πελάτη για να προκαλέσετε μια απάντηση 404, παρά το γεγονός ότι ο πελάτης στοχεύει να αποκτήσει πρόσβαση σε έναν διαφορετικό πόρο.
**Κύριες Σκέψεις**
Κατά τη δοκιμή ευπαθειών request smuggling παρεμβαίνοντας σε άλλα αιτήματα, έχετε υπόψη:
- **Διακριτές Δικτυακές Συνδέσεις:** Τα "επίθεση" και "κανονικά" αιτήματα θα πρέπει να αποστέλλονται μέσω ξεχωριστών δικτυακών συνδέσεων. Η χρήση της ίδιας σύνδεσης και για τα δύο δεν επιβεβαιώνει την παρουσία της ευπάθειας.
- **Διακριτές Συνδέσεις Δικτύου:** Τα "επίθεση" και "κανονικά" αιτήματα θα πρέπει να αποστέλλονται μέσω ξεχωριστών συνδέσεων δικτύου. Η χρήση της ίδιας σύνδεσης και για τα δύο δεν επιβεβαιώνει την παρουσία της ευπάθειας.
- **Συνεπής URL και Παράμετροι:** Στοχεύστε να χρησιμοποιήσετε ταυτόσημα URLs και ονόματα παραμέτρων και για τα δύο αιτήματα. Οι σύγχρονες εφαρμογές συχνά δρομολογούν αιτήματα σε συγκεκριμένους διακομιστές back-end με βάση το URL και τις παραμέτρους. Η αντιστοίχιση αυτών αυξάνει την πιθανότητα ότι και τα δύο αιτήματα θα επεξεργαστούν από τον ίδιο διακομιστή, προϋπόθεση για μια επιτυχημένη επίθεση.
- **Χρονομέτρηση και Συνθήκες Αγώνα:** Το "κανονικό" αίτημα, που προορίζεται να ανιχνεύσει την παρέμβαση από το "επίθεση" αίτημα, ανταγωνίζεται άλλα ταυτόχρονα αιτήματα εφαρμογής. Επομένως, στείλτε το "κανονικό" αίτημα αμέσως μετά το "επίθεση" αίτημα. Οι πολυάσχολες εφαρμογές μπορεί να απαιτούν πολλές δοκιμές για την καταληκτική επιβεβαίωση ευπάθειας.
- **Προκλήσεις Φορτωτικής Ισορροπίας:** Οι διακομιστές front-end που λειτουργούν ως ισοσταθμιστές φορτίου μπορεί να διανέμουν αιτήματα σε διάφορα συστήματα back-end. Εάν τα "επίθεση" και "κανονικά" αιτήματα καταλήξουν σε διαφορετικά συστήματα, η επίθεση δεν θα επιτύχει. Αυτό το στοιχείο ισοσταθμιστή φορτίου μπορεί να απαιτήσει πολλές προσπάθειες για την επιβεβαίωση μιας ευπάθειας.
- **Ακούσια Επίδραση στους Χρήστες:** Εάν η επίθεσή σας επηρεάσει ακούσια το αίτημα άλλου χρήστη (όχι το "κανονικό" αίτημα που στείλατε για ανίχνευση), αυτό υποδεικνύει ότι η επίθεσή σας επηρέασε έναν άλλο χρήστη της εφαρμογής. Η συνεχής δοκιμή θα μπορούσε να διαταράξει άλλους χρήστες, απαιτώντας προσεκτική προσέγγιση.
- **Χρονομέτρηση και Συνθήκες Αγώνα:** Το "κανονικό" αίτημα, που προορίζεται να ανιχνεύσει την παρέμβαση από το "επίθεση" αίτημα, ανταγωνίζεται άλλα ταυτόχρονα αιτήματα εφαρμογής. Επομένως, στείλτε το "κανονικό" αίτημα αμέσως μετά το "επίθεση" αίτημα. Οι πολυάσχολες εφαρμογές μπορεί να απαιτούν πολλές δοκιμές για την επιβεβαίωση της ευπάθειας.
- **Προκλήσεις Φορτίου Ισορροπίας:** Οι διακομιστές front-end που λειτουργούν ως ισοσταθμιστές φορτίου μπορεί να διανέμουν αιτήματα σε διάφορα συστήματα back-end. Εάν τα "επίθεση" και "κανονικά" αιτήματα καταλήξουν σε διαφορετικά συστήματα, η επίθεση δεν θα επιτύχει. Αυτό το στοιχείο ισορροπίας φορτίου μπορεί να απαιτήσει πολλές προσπάθειες για την επιβεβαίωση μιας ευπάθειας.
- **Ακούσια Επίδραση στους Χρήστες:** Εάν η επίθεσή σας επηρεάσει κατά λάθος το αίτημα άλλου χρήστη (όχι το "κανονικό" αίτημα που στείλατε για ανίχνευση), αυτό υποδεικνύει ότι η επίθεσή σας επηρέασε έναν άλλο χρήστη της εφαρμογής. Η συνεχής δοκιμή θα μπορούσε να διαταράξει άλλους χρήστες, απαιτώντας προσεκτική προσέγγιση.
## Κατάχρηση HTTP Request Smuggling
## Διαχωρισμός των τεχνικών HTTP/1.1 pipelining από την πραγματική request smuggling
Η επαναχρησιμοποίηση συνδέσεων (keep-alive) και το pipelining μπορεί εύκολα να δημιουργήσουν ψευδαισθήσεις "smuggling" σε εργαλεία δοκιμών που στέλνουν πολλαπλά αιτήματα στην ίδια υποδοχή. Μάθετε να διαχωρίζετε αβλαβή στοιχεία πελάτη από πραγματική ασυμφωνία διακομιστή.
### Γιατί το pipelining δημιουργεί κλασικά ψευδώς θετικά
Το HTTP/1.1 επαναχρησιμοποιεί μια μόνο σύνδεση TCP/TLS και συνενώνει αιτήματα και απαντήσεις στην ίδια ροή. Στο pipelining, ο πελάτης στέλνει πολλαπλά αιτήματα το ένα μετά το άλλο και βασίζεται σε απαντήσεις με τη σειρά. Ένα κοινό ψευδώς θετικό είναι να ξαναστείλετε ένα κακώς διαμορφωμένο payload τύπου CL.0 δύο φορές σε μια μόνο σύνδεση:
```
POST / HTTP/1.1
Host: hackxor.net
Content_Length: 47
GET /robots.txt HTTP/1.1
X: Y
```
Οι απαντήσεις μπορεί να φαίνονται όπως:
```
HTTP/1.1 200 OK
Content-Type: text/html
```
```
HTTP/1.1 200 OK
Content-Type: text/plain
User-agent: *
Disallow: /settings
```
Αν ο διακομιστής αγνόησε το κακώς σχηματισμένο `Content_Length`, δεν υπάρχει αποσυγχρονισμός FE↔BE. Με την επαναχρησιμοποίηση, ο πελάτης σας έστειλε πραγματικά αυτό το ρεύμα byte, το οποίο ο διακομιστής ανάλυσε ως δύο ανεξάρτητες αιτήσεις:
```
POST / HTTP/1.1
Host: hackxor.net
Content_Length: 47
GET /robots.txt HTTP/1.1
X: YPOST / HTTP/1.1
Host: hackxor.net
Content_Length: 47
GET /robots.txt HTTP/1.1
X: Y
```
Impact: κανένα. Απλώς αποσυνδέσατε τον πελάτη σας από το πλαίσιο του διακομιστή.
> [!TIP]
> Burp modules που εξαρτώνται από την επαναχρησιμοποίηση/προσωρινή αποθήκευση: Turbo Intruder με `requestsPerConnection>1`, Intruder με "HTTP/1 επαναχρησιμοποίηση σύνδεσης", Repeater "Αποστολή ομάδας σε σειρά (μία σύνδεση)" ή "Ενεργοποίηση επαναχρησιμοποίησης σύνδεσης".
### Δοκιμές Litmus: προσωρινή αποθήκευση ή πραγματική αποσύνδεση;
1. Απενεργοποιήστε την επαναχρησιμοποίηση και επαναδοκιμάστε
- Στο Burp Intruder/Repeater, απενεργοποιήστε την επαναχρησιμοποίηση HTTP/1 και αποφύγετε την "Αποστολή ομάδας σε σειρά".
- Στο Turbo Intruder, ορίστε `requestsPerConnection=1` και `pipeline=False`.
- Αν η συμπεριφορά εξαφανιστεί, πιθανότατα ήταν προσωρινή αποθήκευση από την πλευρά του πελάτη, εκτός αν ασχολείστε με στόχους κλειδωμένων/καταστατικών συνδέσεων ή αποσύνδεση από την πλευρά του πελάτη.
2. Έλεγχος εσωτερικής απάντησης HTTP/2
- Στείλτε ένα αίτημα HTTP/2. Αν το σώμα της απάντησης περιέχει μια πλήρη εσωτερική απάντηση HTTP/1, έχετε αποδείξει ένα σφάλμα ανάλυσης/αποσύνδεσης στο backend αντί για ένα καθαρό αντικείμενο πελάτη.
3. Δοκιμή μερικών αιτημάτων για κλειδωμένα front-ends
- Ορισμένα FEs επαναχρησιμοποιούν μόνο τη σύνδεση BE αν ο πελάτης επαναχρησιμοποίησε τη δική του. Χρησιμοποιήστε μερικά αιτήματα για να ανιχνεύσετε τη συμπεριφορά του FE που αντικατοπτρίζει την επαναχρησιμοποίηση του πελάτη.
- Δείτε το PortSwigger "BrowserPowered Desync Attacks" για την τεχνική κλειδώματος σύνδεσης.
4. Δοκιμές κατάστασης
- Αναζητήστε διαφορές πρώτου και επόμενου αιτήματος στην ίδια TCP σύνδεση (δρομολόγηση/επικύρωση πρώτου αιτήματος).
- Το Burp "HTTP Request Smuggler" περιλαμβάνει μια δοκιμή κατάστασης σύνδεσης που αυτοματοποιεί αυτό.
5. Οπτικοποιήστε το καλώδιο
- Χρησιμοποιήστε την επέκταση Burp "HTTP Hacker" για να επιθεωρήσετε τη συγχώνευση και το πλαίσιο μηνυμάτων απευθείας ενώ πειραματίζεστε με την επαναχρησιμοποίηση και τα μερικά αιτήματα.
### Κλειδωμένη αποστολή αιτημάτων (απαιτείται επαναχρησιμοποίηση)
Ορισμένα front-ends επαναχρησιμοποιούν μόνο τη σύνδεση upstream όταν ο πελάτης επαναχρησιμοποιεί τη δική του. Υπάρχει πραγματική αποστολή, αλλά είναι υπό προϋποθέσεις επαναχρησιμοποίησης από την πλευρά του πελάτη. Για να διακρίνετε και να αποδείξετε τον αντίκτυπο:
- Αποδείξτε το σφάλμα από την πλευρά του διακομιστή
- Χρησιμοποιήστε τον έλεγχο εσωτερικής απάντησης HTTP/2, ή
- Χρησιμοποιήστε μερικά αιτήματα για να δείξετε ότι το FE επαναχρησιμοποιεί μόνο το upstream όταν το κάνει ο πελάτης.
- Δείξτε πραγματικό αντίκτυπο ακόμη και αν η άμεση κακή χρήση υποδοχής χρήστη είναι αποκλεισμένη:
- Μολυσμένη προσωρινή αποθήκευση: μολύνετε κοινές προσωρινές αποθήκες μέσω της αποσύνδεσης ώστε οι απαντήσεις να επηρεάζουν άλλους χρήστες.
- Αποκάλυψη εσωτερικών κεφαλίδων: αντανάκλαση κεφαλίδων που εισάγονται από το FE (π.χ., κεφαλίδες auth/trust) και μετά πηγαίνετε σε παράκαμψη αυθεντικοποίησης.
- Παράκαμψη ελέγχων FE: αποστολή περιορισμένων διαδρομών/μεθόδων πέρα από το front-end.
- Κακή χρήση κεφαλίδας host: συνδυάστε με ιδιορρυθμίες δρομολόγησης host για να μεταβείτε σε εσωτερικούς vhosts.
- Ροή εργασίας χειριστή
- Αναπαραγωγή με ελεγχόμενη επαναχρησιμοποίηση (Turbo Intruder `requestsPerConnection=2`, ή ομάδα καρτελών Burp Repeater → "Αποστολή ομάδας σε σειρά (μία σύνδεση)").
- Στη συνέχεια, αλυσίδα σε μολυσμένα/κεφαλίδα-διαρροής/παράκαμψη ελέγχου και δείξτε αντίκτυπο διασύνδεσης χρήστη ή εξουσιοδότησης.
> Δείτε επίσης επιθέσεις κατάστασης σύνδεσης, οι οποίες σχετίζονται στενά αλλά δεν είναι τεχνικά αποστολή:
>
>{{#ref}}
>../http-connection-request-smuggling.md
>{{#endref}}
### Περιορισμοί αποσύνδεσης από την πλευρά του πελάτη
Αν στοχεύετε σε αποσύνδεση από την πλευρά του πελάτη/προγράμματος περιήγησης, το κακόβουλο αίτημα πρέπει να μπορεί να σταλεί από ένα πρόγραμμα περιήγησης διασυνοριακά. Τεχνάσματα απόκρυψης κεφαλίδων δεν θα λειτουργήσουν. Επικεντρωθείτε σε πρωτόκολλα που είναι προσβάσιμα μέσω πλοήγησης/λήψης, και στη συνέχεια μεταβείτε σε μολυσμένη προσωρινή αποθήκευση, αποκάλυψη κεφαλίδων ή παράκαμψη ελέγχου front-end όπου τα downstream στοιχεία αντικατοπτρίζουν ή αποθηκεύουν απαντήσεις.
Για υπόβαθρο και ροές εργασίας από άκρο σε άκρο:
{{#ref}}
-browser-http-request-smuggling.md
{{#endref}}
### Εργαλεία για βοήθεια στην απόφαση
- HTTP Hacker (Burp BApp Store): αποκαλύπτει χαμηλού επιπέδου συμπεριφορά HTTP και συγχώνευση υποδοχών.
- "Αποστολή ή προσωρινή αποθήκευση;" Burp Repeater Custom Action: https://github.com/PortSwigger/bambdas/blob/main/CustomAction/SmugglingOrPipelining.bambda
- Turbo Intruder: ακριβής έλεγχος της επαναχρησιμοποίησης σύνδεσης μέσω `requestsPerConnection`.
- Burp HTTP Request Smuggler: περιλαμβάνει μια δοκιμή κατάστασης σύνδεσης για να εντοπίσει τη δρομολόγηση/επικύρωση πρώτου αιτήματος.
> [!NOTE]
> Αντιμετωπίστε τα αποτελέσματα μόνο επαναχρησιμοποίησης ως μη ζητήματα εκτός αν μπορείτε να αποδείξετε αποσύνδεση από την πλευρά του διακομιστή και να συνδέσετε συγκεκριμένο αντίκτυπο (μολυσμένο αντικείμενο προσωρινής αποθήκευσης, διαρροή εσωτερικής κεφαλίδας που επιτρέπει παράκαμψη προνομίων, παρακάμψη ελέγχου FE, κ.λπ.).
## Κακή χρήση HTTP Request Smuggling
### Παράκαμψη Ασφαλείας Front-End μέσω HTTP Request Smuggling
Ορισμένες φορές, οι front-end proxies επιβάλλουν μέτρα ασφαλείας, εξετάζοντας τα εισερχόμενα αιτήματα. Ωστόσο, αυτά τα μέτρα μπορούν να παρακαμφθούν εκμεταλλευόμενα το HTTP Request Smuggling, επιτρέποντας μη εξουσιοδοτημένη πρόσβαση σε περιορισμένα endpoints. Για παράδειγμα, η πρόσβαση στο `/admin` μπορεί να απαγορεύεται εξωτερικά, με τον front-end proxy να μπλοκάρει ενεργά τέτοιες προσπάθειες. Παρ' όλα αυτά, αυτός ο proxy μπορεί να παραλείψει να εξετάσει τα ενσωματωμένα αιτήματα μέσα σε ένα smuggled HTTP αίτημα, αφήνοντας ένα παραθυράκι για την παράκαμψη αυτών των περιορισμών.
Μερικές φορές, οι front-end διακομιστές επιβάλλουν μέτρα ασφαλείας, εξετάζοντας τα εισερχόμενα αιτήματα. Ωστόσο, αυτά τα μέτρα μπορούν να παρακαμφθούν εκμεταλλευόμενα το HTTP Request Smuggling, επιτρέποντας μη εξουσιοδοτημένη πρόσβαση σε περιορισμένα endpoints. Για παράδειγμα, η πρόσβαση στο `/admin` μπορεί να απαγορεύεται εξωτερικά, με τον front-end διακομιστή να μπλοκάρει ενεργά τέτοιες προσπάθειες. Παρ' όλα αυτά, αυτός ο διακομιστής μπορεί να παραλείψει να εξετάσει τις ενσωματωμένες αιτήσεις μέσα σε ένα λαθραίο HTTP αίτημα, αφήνοντας ένα παραθυράκι για την παράκαμψη αυτών των περιορισμών.
Σκεφτείτε τα παρακάτω παραδείγματα που απεικονίζουν πώς το HTTP Request Smuggling μπορεί να χρησιμοποιηθεί για να παρακάμψει τους ελέγχους ασφαλείας front-end, στοχεύοντας συγκεκριμένα τη διαδρομή `/admin`, η οποία συνήθως φυλάσσεται από τον front-end proxy:
Σκεφτείτε τα παρακάτω παραδείγματα που απεικονίζουν πώς το HTTP Request Smuggling μπορεί να χρησιμοποιηθεί για να παρακάμψει τους ελέγχους ασφαλείας front-end, στοχεύοντας συγκεκριμένα τη διαδρομή `/admin`, η οποία συνήθως φυλάσσεται από τον front-end διακομιστή:
**Παράδειγμα CL.TE**
**CL.TE Παράδειγμα**
```
POST / HTTP/1.1
Host: [redacted].web-security-academy.net
@ -320,13 +426,13 @@ a=x
0
```
Αντίθετα, στην επίθεση TE.CL, το αρχικό `POST` αίτημα χρησιμοποιεί `Transfer-Encoding: chunked`, και το επόμενο ενσωματωμένο αίτημα επεξεργάζεται με βάση την κεφαλίδα `Content-Length`. Παρόμοια με την επίθεση CL.TE, ο πρόξενος της εμπρός πλευράς παραβλέπει το λαθραίο αίτημα `GET /admin`, παρέχοντας ακούσια πρόσβαση στο περιορισμένο μονοπάτι `/admin`.
Αντίθετα, στην επίθεση TE.CL, το αρχικό `POST` αίτημα χρησιμοποιεί `Transfer-Encoding: chunked`, και το επόμενο ενσωματωμένο αίτημα επεξεργάζεται με βάση την κεφαλίδα `Content-Length`. Παρόμοια με την επίθεση CL.TE, ο πρόξενος του front-end παραβλέπει το λαθραίο αίτημα `GET /admin`, παραχωρώντας ακούσια πρόσβαση στη περιορισμένη διαδρομή `/admin`.
### Αποκάλυψη αναδιατύπωσης αιτημάτων της εμπρός πλευράς <a href="#revealing-front-end-request-rewriting" id="revealing-front-end-request-rewriting"></a>
### Αποκάλυψη αναδιατύπωσης αιτημάτων front-end <a href="#revealing-front-end-request-rewriting" id="revealing-front-end-request-rewriting"></a>
Οι εφαρμογές συχνά χρησιμοποιούν έναν **διακομιστή εμπρός πλευράς** για να τροποποιούν τα εισερχόμενα αιτήματα πριν τα περάσουν στον διακομιστή πίσω πλευράς. Μια τυπική τροποποίηση περιλαμβάνει την προσθήκη κεφαλίδων, όπως `X-Forwarded-For: <IP του πελάτη>`, για να μεταφέρει τη διεύθυνση IP του πελάτη στον διακομιστή πίσω πλευράς. Η κατανόηση αυτών των τροποποιήσεων μπορεί να είναι κρίσιμη, καθώς μπορεί να αποκαλύψει τρόπους για **να παρακαμφθούν οι προστασίες** ή **να αποκαλυφθούν κρυφές πληροφορίες ή σημεία πρόσβασης**.
Οι εφαρμογές συχνά χρησιμοποιούν έναν **server front-end** για να τροποποιούν τα εισερχόμενα αιτήματα πριν τα περάσουν στον server back-end. Μια τυπική τροποποίηση περιλαμβάνει την προσθήκη κεφαλίδων, όπως `X-Forwarded-For: <IP του πελάτη>`, για να μεταφέρει τη διεύθυνση IP του πελάτη στον back-end. Η κατανόηση αυτών των τροποποιήσεων μπορεί να είναι κρίσιμη, καθώς μπορεί να αποκαλύψει τρόπους για **να παρακαμφθούν οι προστασίες** ή **να αποκαλυφθούν κρυμμένες πληροφορίες ή σημεία πρόσβασης**.
Για να ερευνήσετε πώς ένας πρόξενος τροποποιεί ένα αίτημα, εντοπίστε μια παράμετρο POST που ο διακομιστής πίσω πλευράς επαναλαμβάνει στην απάντηση. Στη συνέχεια, δημιουργήστε ένα αίτημα, χρησιμοποιώντας αυτή την παράμετρο τελευταία, παρόμοια με την εξής:
Για να ερευνήσετε πώς ένας πρόξενος τροποποιεί ένα αίτημα, εντοπίστε μια παράμετρο POST που ο back-end επαναλαμβάνει στην απάντηση. Στη συνέχεια, δημιουργήστε ένα αίτημα, χρησιμοποιώντας αυτή την παράμετρο τελευταία, παρόμοια με το εξής:
```
POST / HTTP/1.1
Host: vulnerable-website.com
@ -375,20 +481,20 @@ Cookie: session=4X6SWQeR8KiOPZPF2Gpca2IKeA1v4KYi
csrf=gpGAVAbj7pKq7VfFh45CAICeFCnancCM&postId=4&name=asdfghjklo&email=email%40email.com&comment=
```
Σε αυτό το σενάριο, η **παράμετρος σχολίου** προορίζεται να αποθηκεύσει το περιεχόμενο στην ενότητα σχολίων μιας ανάρτησης σε μια δημόσια προσβάσιμη σελίδα. Ως εκ τούτου, το περιεχόμενο του επόμενου αιτήματος θα εμφανίζεται ως σχόλιο.
Σε αυτό το σενάριο, η **παράμετρος σχολίου** προορίζεται να αποθηκεύσει τα περιεχόμενα μέσα στην ενότητα σχολίων μιας ανάρτησης σε μια δημόσια προσβάσιμη σελίδα. Ως εκ τούτου, τα περιεχόμενα του επόμενου αιτήματος θα εμφανιστούν ως σχόλιο.
Ωστόσο, αυτή η τεχνική έχει περιορισμούς. Γενικά, καταγράφει δεδομένα μόνο μέχρι τον διαχωριστή παραμέτρου που χρησιμοποιείται στο λαθραίο αίτημα. Για υποβολές φορμών με κωδικοποίηση URL, αυτός ο διαχωριστής είναι ο χαρακτήρας `&`. Αυτό σημαίνει ότι το καταγεγραμμένο περιεχόμενο από το αίτημα του θύματος θα σταματήσει στον πρώτο `&`, ο οποίος μπορεί ακόμη και να είναι μέρος της συμβολοσειράς ερωτήματος.
Επιπλέον, αξίζει να σημειωθεί ότι αυτή η προσέγγιση είναι επίσης βιώσιμη με μια ευπάθεια TE.CL. Σε τέτοιες περιπτώσεις, το αίτημα θα πρέπει να ολοκληρώνεται με `search=\r\n0`. Ανεξαρτήτως χαρακτήρων νέας γραμμής, οι τιμές θα προστεθούν στην παράμετρο αναζήτησης.
### Χρησιμοποιώντας το HTTP request smuggling για να εκμεταλλευτείτε το Reflected XSS
### Χρήση HTTP request smuggling για την εκμετάλλευση του Reflected XSS
Το HTTP Request Smuggling μπορεί να αξιοποιηθεί για να εκμεταλλευτεί ευάλωτες ιστοσελίδες σε **Reflected XSS**, προσφέροντας σημαντικά πλεονεκτήματα:
Το HTTP Request Smuggling μπορεί να αξιοποιηθεί για την εκμετάλλευση ιστοσελίδων που είναι ευάλωτες σε **Reflected XSS**, προσφέροντας σημαντικά πλεονεκτήματα:
- Η αλληλεπίδραση με τους στόχους χρήστες **δεν απαιτείται**.
- Επιτρέπει την εκμετάλλευση του XSS σε μέρη του αιτήματος που είναι **κανονικά μη προσβάσιμα**, όπως οι κεφαλίδες αιτήματος HTTP.
Σε σενάρια όπου μια ιστοσελίδα είναι ευάλωτη σε Reflected XSS μέσω της κεφαλίδας User-Agent, το παρακάτω payload δείχνει πώς να εκμεταλλευτείτε αυτήν την ευπάθεια:
Σε σενάρια όπου μια ιστοσελίδα είναι ευάλωτη σε Reflected XSS μέσω της κεφαλίδας User-Agent, το παρακάτω payload δείχνει πώς να εκμεταλλευτεί αυτή την ευπάθεια:
```
POST / HTTP/1.1
Host: ac311fa41f0aa1e880b0594d008d009e.web-security-academy.net
@ -413,22 +519,22 @@ A=
1. Να ξεκινήσει ένα `POST` αίτημα, φαινομενικά τυπικό, με ένα `Transfer-Encoding: chunked` header για να υποδείξει την αρχή της λαθραίας μεταφοράς.
2. Να ακολουθήσει με ένα `0`, που σηματοδοτεί το τέλος του σώματος του chunked μηνύματος.
3. Στη συνέχεια, εισάγεται ένα λαθραίο `GET` αίτημα, όπου το `User-Agent` header είναι εγχυμένο με ένα script, `<script>alert(1)</script>`, ενεργοποιώντας το XSS όταν ο διακομιστής επεξεργάζεται αυτό το επόμενο αίτημα.
3. Στη συνέχεια, εισάγεται ένα λαθραίο `GET` αίτημα, όπου το `User-Agent` header είναι εγχυμένο με ένα script, `<script>alert(1)</script>`, που ενεργοποιεί το XSS όταν ο διακομιστής επεξεργάζεται αυτό το επόμενο αίτημα.
Με την παραποίηση του `User-Agent` μέσω λαθραίας μεταφοράς, το payload παρακάμπτει τους κανονικούς περιορισμούς αιτημάτων, εκμεταλλευόμενο έτσι την ευπάθεια Reflected XSS με έναν μη τυπικό αλλά αποτελεσματικό τρόπο.
Με την παραποίηση του `User-Agent` μέσω της λαθραίας μεταφοράς, το payload παρακάμπτει τους κανονικούς περιορισμούς αιτημάτων, εκμεταλλευόμενο έτσι την ευπάθεια Reflected XSS με έναν μη τυπικό αλλά αποτελεσματικό τρόπο.
#### HTTP/0.9
> [!CAUTION]
> Σε περίπτωση που το περιεχόμενο του χρήστη αντικατοπτρίζεται σε μια απάντηση με **`Content-type`** όπως **`text/plain`**, αποτρέποντας την εκτέλεση του XSS. Αν ο διακομιστής υποστηρίζει **HTTP/0.9, μπορεί να είναι δυνατό να παρακαμφθεί αυτό**!
> Σε περίπτωση που το περιεχόμενο του χρήστη αντανακλάται σε μια απάντηση με **`Content-type`** όπως **`text/plain`**, αποτρέποντας την εκτέλεση του XSS. Αν ο διακομιστής υποστηρίζει **HTTP/0.9 μπορεί να είναι δυνατό να παρακαμφθεί αυτό**!
Η έκδοση HTTP/0.9 ήταν προηγούμενη της 1.0 και χρησιμοποιεί μόνο **GET** ρήματα και **δεν** απαντά με **headers**, μόνο το σώμα.
Στο [**αυτό το writeup**](https://mizu.re/post/twisty-python), αυτό εκμεταλλεύτηκε με μια λαθραία μεταφορά αιτήματος και ένα **ευάλωτο endpoint που θα απαντήσει με την είσοδο του χρήστη** για να λαθραία μεταφέρει ένα αίτημα με HTTP/0.9. Η παράμετρος που θα αντικατοπτρίζεται στην απάντηση περιείχε μια **ψεύτικη απάντηση HTTP/1.1 (με headers και σώμα)** έτσι ώστε η απάντηση να περιέχει έγκυρο εκτελέσιμο JS κώδικα με `Content-Type` `text/html`.
Στην [**παρούσα αναφορά**](https://mizu.re/post/twisty-python), αυτό εκμεταλλεύτηκε με μια λαθραία μεταφορά αιτήματος και ένα **ευάλωτο endpoint που θα απαντήσει με την είσοδο του χρήστη** για να λαθραία μεταφέρει ένα αίτημα με HTTP/0.9. Η παράμετρος που θα αντανακλαστεί στην απάντηση περιείχε μια **ψεύτικη απάντηση HTTP/1.1 (με headers και σώμα)** έτσι ώστε η απάντηση να περιέχει έγκυρο εκτελέσιμο JS κώδικα με `Content-Type` `text/html`.
### Εκμετάλλευση Εντός Σελίδας Ανακατευθύνσεων με HTTP Request Smuggling <a href="#exploiting-on-site-redirects-with-http-request-smuggling" id="exploiting-on-site-redirects-with-http-request-smuggling"></a>
### Εκμετάλλευση Εντός Ιστοσελίδων Ανακατευθύνσεων με HTTP Request Smuggling <a href="#exploiting-on-site-redirects-with-http-request-smuggling" id="exploiting-on-site-redirects-with-http-request-smuggling"></a>
Οι εφαρμογές συχνά ανακατευθύνουν από μια διεύθυνση URL σε άλλη χρησιμοποιώντας το hostname από το `Host` header στη διεύθυνση URL ανακατεύθυνσης. Αυτό είναι κοινό με διακομιστές ιστού όπως ο Apache και ο IIS. Για παράδειγμα, η αίτηση ενός φακέλου χωρίς τελεία σλάς έχει ως αποτέλεσμα μια ανακατεύθυνση για να συμπεριληφθεί η σλάς:
Οι εφαρμογές συχνά ανακατευθύνουν από μια διεύθυνση URL σε άλλη χρησιμοποιώντας το hostname από το `Host` header στην ανακατευθυνόμενη URL. Αυτό είναι κοινό με διακομιστές ιστού όπως οι Apache και IIS. Για παράδειγμα, η αίτηση ενός φακέλου χωρίς τελικό slash έχει ως αποτέλεσμα μια ανακατεύθυνση για να συμπεριληφθεί το slash:
```
GET /home HTTP/1.1
Host: normal-website.com
@ -464,17 +570,17 @@ Host: vulnerable-website.com
HTTP/1.1 301 Moved Permanently
Location: https://attacker-website.com/home/
```
Σε αυτό το σενάριο, το αίτημα ενός χρήστη για ένα αρχείο JavaScript έχει παραβιαστεί. Ο επιτιθέμενος μπορεί δυνητικά να συμβιβάσει τον χρήστη παρέχοντας κακόβουλο JavaScript ως απάντηση.
Σε αυτό το σενάριο, το αίτημα ενός χρήστη για ένα αρχείο JavaScript έχει υποκλαπεί. Ο επιτιθέμενος μπορεί δυνητικά να συμβιβάσει τον χρήστη παρέχοντας κακόβουλο JavaScript ως απάντηση.
### Εκμετάλλευση της δηλητηρίασης της μνήμης cache μέσω HTTP Request Smuggling <a href="#exploiting-web-cache-poisoning-via-http-request-smuggling" id="exploiting-web-cache-poisoning-via-http-request-smuggling"></a>
### Εκμετάλλευση της Δηλητηρίασης Cache Ιστοσελίδας μέσω HTTP Request Smuggling <a href="#exploiting-web-cache-poisoning-via-http-request-smuggling" id="exploiting-web-cache-poisoning-via-http-request-smuggling"></a>
Η δηλητηρίαση της μνήμης cache μπορεί να εκτελεστεί εάν οποιοδήποτε στοιχείο της **υποδομής front-end αποθηκεύει περιεχόμενο**, συνήθως για να βελτιώσει την απόδοση. Με την παραποίηση της απάντησης του διακομιστή, είναι δυνατόν να **δηλητηριαστεί η μνήμη cache**.
Η δηλητηρίαση cache ιστοσελίδας μπορεί να εκτελεστεί αν οποιοδήποτε στοιχείο της **υποδομής front-end αποθηκεύει περιεχόμενο στην cache**, συνήθως για να βελτιώσει την απόδοση. Με την παραποίηση της απάντησης του διακομιστή, είναι δυνατόν να **δηλητηριαστεί η cache**.
Προηγουμένως, παρατηρήσαμε πώς οι απαντήσεις του διακομιστή θα μπορούσαν να τροποποιηθούν για να επιστρέψουν ένα σφάλμα 404 (ανατρέξτε σε [Basic Examples](#basic-examples)). Ομοίως, είναι εφικτό να ξεγελάσουμε τον διακομιστή ώστε να παραδώσει περιεχόμενο `/index.html` ως απάντηση σε ένα αίτημα για `/static/include.js`. Ως αποτέλεσμα, το περιεχόμενο `/static/include.js` αντικαθίσταται στη μνήμη cache με αυτό του `/index.html`, καθιστώντας το `/static/include.js` μη προσβάσιμο στους χρήστες, δυνητικά οδηγώντας σε άρνηση υπηρεσίας (DoS).
Προηγουμένως, παρατηρήσαμε πώς οι απαντήσεις του διακομιστή θα μπορούσαν να τροποποιηθούν για να επιστρέψουν ένα σφάλμα 404 (ανατρέξτε σε [Basic Examples](#basic-examples)). Ομοίως, είναι εφικτό να ξεγελάσουμε τον διακομιστή ώστε να παραδώσει περιεχόμενο `/index.html` ως απάντηση σε ένα αίτημα για `/static/include.js`. Ως αποτέλεσμα, το περιεχόμενο `/static/include.js` αντικαθίσταται στην cache με αυτό του `/index.html`, καθιστώντας το `/static/include.js` μη προσβάσιμο στους χρήστες, δυνητικά οδηγώντας σε άρνηση υπηρεσίας (DoS).
Αυτή η τεχνική γίνεται ιδιαίτερα ισχυρή εάν ανακαλυφθεί μια **ευπάθεια Open Redirect** ή εάν υπάρχει **ανακατεύθυνση στον ιστό προς μια ανοιχτή ανακατεύθυνση**. Τέτοιες ευπάθειες μπορούν να εκμεταλλευτούν για να αντικαταστήσουν το αποθηκευμένο περιεχόμενο του `/static/include.js` με ένα σενάριο υπό τον έλεγχο του επιτιθέμενου, επιτρέποντας ουσιαστικά μια εκτενή επίθεση Cross-Site Scripting (XSS) σε όλους τους πελάτες που ζητούν το ενημερωμένο `/static/include.js`.
Αυτή η τεχνική γίνεται ιδιαίτερα ισχυρή αν ανακαλυφθεί μια **ευπάθεια Open Redirect** ή αν υπάρχει **ανακατεύθυνση στον ιστότοπο σε μια ανοιχτή ανακατεύθυνση**. Τέτοιες ευπάθειες μπορούν να εκμεταλλευτούν για να αντικαταστήσουν το αποθηκευμένο περιεχόμενο του `/static/include.js` με ένα σενάριο υπό τον έλεγχο του επιτιθέμενου, επιτρέποντας ουσιαστικά μια εκτενή επίθεση Cross-Site Scripting (XSS) σε όλους τους πελάτες που ζητούν το ενημερωμένο `/static/include.js`.
Παρακάτω είναι μια απεικόνιση της εκμετάλλευσης της **δηλητηρίασης cache σε συνδυασμό με μια ανακατεύθυνση στον ιστό προς ανοιχτή ανακατεύθυνση**. Ο στόχος είναι να τροποποιηθεί το περιεχόμενο της μνήμης cache του `/static/include.js` για να εξυπηρετήσει κώδικα JavaScript που ελέγχεται από τον επιτιθέμενο:
Παρακάτω είναι μια απεικόνιση της εκμετάλλευσης της **δηλητηρίασης cache σε συνδυασμό με μια ανακατεύθυνση στον ιστότοπο σε ανοιχτή ανακατεύθυνση**. Ο στόχος είναι να τροποποιηθεί το περιεχόμενο της cache του `/static/include.js` για να εξυπηρετήσει κώδικα JavaScript υπό τον έλεγχο του επιτιθέμενου:
```
POST / HTTP/1.1
Host: vulnerable.net
@ -496,7 +602,7 @@ x=1
Μετά από επιτυχή **socket poisoning**, θα πρέπει να ξεκινήσει ένα **GET request** για το `/static/include.js`. Αυτό το αίτημα θα μολυνθεί από το προηγούμενο αίτημα **on-site redirect to open redirect** και θα ανακτήσει το περιεχόμενο του script που ελέγχεται από τον επιτιθέμενο.
Στη συνέχεια, οποιοδήποτε αίτημα για το `/static/include.js` θα εξυπηρετεί το αποθηκευμένο περιεχόμενο του script του επιτιθέμενου, εκκινώντας αποτελεσματικά μια ευρεία επίθεση XSS.
Στη συνέχεια, οποιοδήποτε αίτημα για το `/static/include.js` θα εξυπηρετήσει το αποθηκευμένο περιεχόμενο του script του επιτιθέμενου, εκκινώντας αποτελεσματικά μια ευρεία επίθεση XSS.
### Using HTTP request smuggling to perform web cache deception <a href="#using-http-request-smuggling-to-perform-web-cache-deception" id="using-http-request-smuggling-to-perform-web-cache-deception"></a>
@ -505,7 +611,7 @@ x=1
> - Στο **web cache poisoning**, ο επιτιθέμενος προκαλεί την εφαρμογή να αποθηκεύσει κάποιο κακόβουλο περιεχόμενο στην cache, και αυτό το περιεχόμενο εξυπηρετείται από την cache σε άλλους χρήστες της εφαρμογής.
> - Στο **web cache deception**, ο επιτιθέμενος προκαλεί την εφαρμογή να αποθηκεύσει κάποιο ευαίσθητο περιεχόμενο που ανήκει σε άλλο χρήστη στην cache, και στη συνέχεια ο επιτιθέμενος ανακτά αυτό το περιεχόμενο από την cache.
Ο επιτιθέμενος κατασκευάζει ένα smuggled request που ανακτά ευαίσθητο περιεχόμενο συγκεκριμένο για τον χρήστη. Σκεφτείτε το παρακάτω παράδειγμα:
Ο επιτιθέμενος κατασκευάζει ένα μολυσμένο αίτημα που ανακτά ευαίσθητο περιεχόμενο συγκεκριμένο για τον χρήστη. Σκεφτείτε το παρακάτω παράδειγμα:
```markdown
`POST / HTTP/1.1`\
`Host: vulnerable-website.com`\
@ -516,11 +622,11 @@ x=1
`GET /private/messages HTTP/1.1`\
`Foo: X`
```
Αν αυτή η λαθραία αίτηση δηλητηριάσει μια καταχώρηση cache που προορίζεται για στατικό περιεχόμενο (π.χ., `/someimage.png`), τα ευαίσθητα δεδομένα του θύματος από το `/private/messages` μπορεί να αποθηκευτούν στην καταχώρηση cache του στατικού περιεχομένου. Ως εκ τούτου, ο επιτιθέμενος θα μπορούσε ενδεχομένως να ανακτήσει αυτά τα αποθηκευμένα ευαίσθητα δεδομένα.
Αν αυτή η λαθραία αίτηση δηλητηριάσει μια καταχώρηση cache που προορίζεται για στατικό περιεχόμενο (π.χ., `/someimage.png`), τα ευαίσθητα δεδομένα του θύματος από το `/private/messages` μπορεί να αποθηκευτούν κάτω από την καταχώρηση cache του στατικού περιεχομένου. Ως εκ τούτου, ο επιτιθέμενος θα μπορούσε ενδεχομένως να ανακτήσει αυτά τα αποθηκευμένα ευαίσθητα δεδομένα.
### Κατάχρηση του TRACE μέσω HTTP Request Smuggling <a href="#exploiting-web-cache-poisoning-via-http-request-smuggling" id="exploiting-web-cache-poisoning-via-http-request-smuggling"></a>
[**Σε αυτή την ανάρτηση**](https://portswigger.net/research/trace-desync-attack) προτείνεται ότι αν ο διακομιστής έχει ενεργοποιημένη τη μέθοδο TRACE, θα μπορούσε να είναι δυνατό να καταχραστεί με ένα HTTP Request Smuggling. Αυτό συμβαίνει επειδή αυτή η μέθοδος θα ανακλά οποιαδήποτε κεφαλίδα σταλεί στον διακομιστή ως μέρος του σώματος της απάντησης. Για παράδειγμα:
[**Σε αυτή την ανάρτηση**](https://portswigger.net/research/trace-desync-attack) προτείνεται ότι αν ο διακομιστής έχει ενεργοποιημένη τη μέθοδο TRACE, θα μπορούσε να είναι δυνατό να την καταχραστεί με ένα HTTP Request Smuggling. Αυτό συμβαίνει επειδή αυτή η μέθοδος θα ανακλά οποιοδήποτε header σταλεί στον διακομιστή ως μέρος του σώματος της απάντησης. Για παράδειγμα:
```
TRACE / HTTP/1.1
Host: example.com
@ -698,12 +804,14 @@ table.add(req)
```
## Εργαλεία
- HTTP Hacker (Burp BApp Store) οπτικοποίηση της συγχώνευσης/πλαισίωσης και της χαμηλού επιπέδου συμπεριφοράς HTTP
- https://github.com/PortSwigger/bambdas/blob/main/CustomAction/SmugglingOrPipelining.bambda Burp Repeater Custom Action "Smuggling or pipelining?"
- [https://github.com/anshumanpattnaik/http-request-smuggling](https://github.com/anshumanpattnaik/http-request-smuggling)
- [https://github.com/PortSwigger/http-request-smuggler](https://github.com/PortSwigger/http-request-smuggler)
- [https://github.com/gwen001/pentest-tools/blob/master/smuggler.py](https://github.com/gwen001/pentest-tools/blob/master/smuggler.py)
- [https://github.com/defparam/smuggler](https://github.com/defparam/smuggler)
- [https://github.com/Moopinger/smugglefuzz](https://github.com/Moopinger/smugglefuzz)
- [https://github.com/bahruzjabiyev/t-reqs-http-fuzzer](https://github.com/bahruzjabiyev/t-reqs-http-fuzzer): Αυτό το εργαλείο είναι ένας HTTP Fuzzer βασισμένος σε γραμματική, χρήσιμο για να βρείτε παράξενες διαφορές στο request smuggling.
- [https://github.com/bahruzjabiyev/t-reqs-http-fuzzer](https://github.com/bahruzjabiyev/t-reqs-http-fuzzer): Αυτό το εργαλείο είναι ένας γραμματικός HTTP Fuzzer χρήσιμος για την εύρεση παράξενων αποκλίσεων συγχώνευσης αιτημάτων.
## Αναφορές
@ -716,6 +824,10 @@ table.add(req)
- [https://standoff365.com/phdays10/schedule/tech/http-request-smuggling-via-higher-http-versions/](https://standoff365.com/phdays10/schedule/tech/http-request-smuggling-via-higher-http-versions/)
- [https://portswigger.net/research/trace-desync-attack](https://portswigger.net/research/trace-desync-attack)
- [https://www.bugcrowd.com/blog/unveiling-te-0-http-request-smuggling-discovering-a-critical-vulnerability-in-thousands-of-google-cloud-websites/](https://www.bugcrowd.com/blog/unveiling-te-0-http-request-smuggling-discovering-a-critical-vulnerability-in-thousands-of-google-cloud-websites/)
- Προσοχή στην ψευδή θετική: πώς να διακρίνετε την HTTP pipelining από τη συγχώνευση αιτημάτων [https://portswigger.net/research/how-to-distinguish-http-pipelining-from-request-smuggling](https://portswigger.net/research/how-to-distinguish-http-pipelining-from-request-smuggling)
- [https://http1mustdie.com/](https://http1mustdie.com/)
- Επιθέσεις Desync με Ικανότητα Περιηγητή [https://portswigger.net/research/browser-powered-desync-attacks](https://portswigger.net/research/browser-powered-desync-attacks)
- PortSwigger Academy desync πλευράς πελάτη [https://portswigger.net/web-security/request-smuggling/browser/client-side-desync](https://portswigger.net/web-security/request-smuggling/browser/client-side-desync)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -2,6 +2,22 @@
{{#include ../../banners/hacktricks-training.md}}
**Ελέγξτε την ανάρτηση [https://portswigger.net/research/browser-powered-desync-attacks](https://portswigger.net/research/browser-powered-desync-attacks)**
Η αποσυγχρονισμένη εκμετάλλευση που υποστηρίζεται από τον περιηγητή (γνωστή και ως client-side request smuggling) εκμεταλλεύεται τον περιηγητή του θύματος για να προσθέσει ένα κακώς διαμορφωμένο αίτημα σε μια κοινή σύνδεση, έτσι ώστε τα επόμενα αιτήματα να αναλύονται εκτός συγχρονισμού από ένα downstream component. Σε αντίθεση με την κλασική εκμετάλλευση FE↔BE, οι payloads περιορίζονται από το τι μπορεί νομίμως να στείλει ένας περιηγητής διασυνοριακά.
Βασικοί περιορισμοί και συμβουλές
- Χρησιμοποιείτε μόνο κεφαλίδες και σύνταξη που μπορεί να εκπέμψει ένας περιηγητής μέσω πλοήγησης, fetch ή υποβολής φόρμας. Οι παραποιήσεις κεφαλίδων (LWS tricks, duplicate TE, invalid CL) γενικά δεν θα σταλούν.
- Στοχεύστε endpoints και μεσάζοντες που ανακλούν εισόδους ή αποθηκεύουν απαντήσεις. Χρήσιμες επιπτώσεις περιλαμβάνουν την δηλητηρίαση cache, την διαρροή κεφαλίδων που έχουν εισαχθεί από το front-end ή την παράκαμψη ελέγχων διαδρομής/μεθόδου του front-end.
- Η επαναχρησιμοποίηση έχει σημασία: ευθυγραμμίστε το διαμορφωμένο αίτημα ώστε να μοιράζεται την ίδια σύνδεση HTTP/1.1 ή H2 με ένα αίτημα υψηλής αξίας του θύματος. Οι συμπεριφορές που είναι κλειδωμένες σε σύνδεση/καταστάσεις ενισχύουν την επίδραση.
- Προτιμήστε πρωτότυπα που δεν απαιτούν προσαρμοσμένες κεφαλίδες: σύγχυση διαδρομής, έγχυση query-string και διαμόρφωση σώματος μέσω POST με κωδικοποίηση φόρμας.
- Επικυρώστε την πραγματική αποσυγχρονισμένη κατάσταση του server έναντι απλών τεχνικών pipelining επαναδοκιμάζοντας χωρίς επαναχρησιμοποίηση ή χρησιμοποιώντας τον έλεγχο HTTP/2 nested-response.
Για τεχνικές end-to-end και PoCs δείτε:
- PortSwigger Research BrowserPowered Desync Attacks: https://portswigger.net/research/browser-powered-desync-attacks
- PortSwigger Academy clientside desync: https://portswigger.net/web-security/request-smuggling/browser/client-side-desync
## References
- [https://portswigger.net/research/browser-powered-desync-attacks](https://portswigger.net/research/browser-powered-desync-attacks)
- [https://portswigger.net/web-security/request-smuggling/browser/client-side-desync](https://portswigger.net/web-security/request-smuggling/browser/client-side-desync)
- Distinguishing pipelining vs smuggling (background on reuse false-positives): https://portswigger.net/research/how-to-distinguish-http-pipelining-from-request-smuggling
{{#include ../../banners/hacktricks-training.md}}