Proxy / WAF Protections Bypass
Last updated
Last updated
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Τεχνικές από αυτή την έρευνα.
Παράδειγμα κανόνα Nginx:
Για να αποτραπούν οι παρακάμψεις, το Nginx εκτελεί κανονικοποίηση διαδρομής πριν την ελέγξει. Ωστόσο, αν ο διακομιστής backend εκτελεί διαφορετική κανονικοποίηση (αφαιρώντας χαρακτήρες που δεν αφαιρεί το nginx), μπορεί να είναι δυνατή η παράκαμψη αυτής της άμυνας.
Nginx Version
Node.js Bypass Characters
1.22.0
\xA0
1.21.6
\xA0
1.20.2
\xA0
, \x09
, \x0C
1.18.0
\xA0
, \x09
, \x0C
1.16.1
\xA0
, \x09
, \x0C
Nginx Version
Flask Bypass Characters
1.22.0
\x85
, \xA0
1.21.6
\x85
, \xA0
1.20.2
\x85
, \xA0
, \x1F
, \x1E
, \x1D
, \x1C
, \x0C
, \x0B
1.18.0
\x85
, \xA0
, \x1F
, \x1E
, \x1D
, \x1C
, \x0C
, \x0B
1.16.1
\x85
, \xA0
, \x1F
, \x1E
, \x1D
, \x1C
, \x0C
, \x0B
Nginx Version
Spring Boot Bypass Characters
1.22.0
;
1.21.6
;
1.20.2
\x09
, ;
1.18.0
\x09
, ;
1.16.1
\x09
, ;
Διαμόρφωση Nginx FPM:
Nginx είναι ρυθμισμένο να μπλοκάρει την πρόσβαση στο /admin.php
, αλλά είναι δυνατόν να παρακαμφθεί αυτό με την πρόσβαση στο /admin.php/index.php
.
Σε αυτή την ανάρτηση εξηγείται ότι το ModSecurity v3 (μέχρι 3.0.12), υλοποιούσε εσφαλμένα τη μεταβλητή REQUEST_FILENAME
η οποία προοριζόταν να περιέχει τη διαδρομή που προσπελάστηκε (μέχρι την αρχή των παραμέτρων). Αυτό συμβαίνει επειδή εκτελούσε μια αποκωδικοποίηση URL για να αποκτήσει τη διαδρομή.
Ως εκ τούτου, ένα αίτημα όπως το http://example.com/foo%3f';alert(1);foo=
στο mod security θα υποθέσει ότι η διαδρομή είναι απλώς /foo
επειδή το %3f
μετατρέπεται σε ?
που τερματίζει τη διαδρομή URL, αλλά στην πραγματικότητα η διαδρομή που θα λάβει ο διακομιστής θα είναι /foo%3f';alert(1);foo=
.
Οι μεταβλητές REQUEST_BASENAME
και PATH_INFO
επηρεάστηκαν επίσης από αυτό το σφάλμα.
Κάτι παρόμοιο συνέβη στην έκδοση 2 του Mod Security που επέτρεπε την παράκαμψη μιας προστασίας που εμπόδιζε τους χρήστες να προσπελάσουν αρχεία με συγκεκριμένες επεκτάσεις σχετικές με αρχεία αντιγράφων ασφαλείας (όπως το .bak
) απλά στέλνοντας την τελεία κωδικοποιημένη σε %2e
, για παράδειγμα: https://example.com/backup%2ebak
.
Αυτή η έρευνα αναφέρει ότι ήταν δυνατό να παρακαμφθούν οι κανόνες AWS WAF που εφαρμόζονταν σε HTTP headers στέλνοντας έναν "κακώς σχηματισμένο" header που δεν αναλύθηκε σωστά από την AWS αλλά αναλύθηκε από τον διακομιστή backend.
Για παράδειγμα, στέλνοντας το ακόλουθο αίτημα με μια SQL injection στον header X-Query:
Ήταν δυνατόν να παρακαμφθεί το AWS WAF επειδή δεν καταλάβαινε ότι η επόμενη γραμμή είναι μέρος της τιμής της κεφαλίδας ενώ ο διακομιστής NODEJS το καταλάβαινε (αυτό διορθώθηκε).
Συνήθως, τα WAF έχουν έναν συγκεκριμένο περιορισμό μήκους αιτήσεων για έλεγχο και αν μια αίτηση POST/PUT/PATCH είναι πάνω από αυτόν, το WAF δεν θα ελέγξει την αίτηση.
Για το AWS WAF, μπορείτε να ελέγξετε την τεκμηρίωση:
Μέγιστο μέγεθος σώματος αίτησης ιστού που μπορεί να ελεγχθεί για προστασίες Application Load Balancer και AWS AppSync
8 KB
Μέγιστο μέγεθος σώματος αίτησης ιστού που μπορεί να ελεγχθεί για προστασίες CloudFront, API Gateway, Amazon Cognito, App Runner και Verified Access**
64 KB
Από τα έγγραφα του Azure:
Παλαιότερα Web Application Firewalls με Core Rule Set 3.1 (ή χαμηλότερα) επιτρέπουν μηνύματα μεγαλύτερα από 128 KB απενεργοποιώντας την επιθεώρηση σώματος αίτησης, αλλά αυτά τα μηνύματα δεν θα ελεγχθούν για ευπάθειες. Για νεότερες εκδόσεις (Core Rule Set 3.2 ή νεότερες), το ίδιο μπορεί να γίνει απενεργοποιώντας τον μέγιστο περιορισμό σώματος αίτησης. Όταν μια αίτηση υπερβαίνει το όριο μεγέθους:
Αν είναι λειτουργία πρόληψης: Καταγράφει και μπλοκάρει την αίτηση.
Αν είναι λειτουργία ανίχνευσης: Ελέγχει μέχρι το όριο, αγνοεί το υπόλοιπο και καταγράφει αν το Content-Length
υπερβαίνει το όριο.
Από Akamai:
Από προεπιλογή, το WAF ελέγχει μόνο τα πρώτα 8KB μιας αίτησης. Μπορεί να αυξήσει το όριο έως 128KB προσθέτοντας Προηγμένα Μεταδεδομένα.
Από Cloudflare:
Έως 128KB.
Ανάλογα με την υλοποίηση της κανονικοποίησης Unicode (περισσότερες πληροφορίες εδώ), χαρακτήρες που μοιράζονται την συμβατότητα Unicode μπορεί να είναι σε θέση να παρακάμψουν το WAF και να εκτελούνται ως το προοριζόμενο payload. Συμβατοί χαρακτήρες μπορούν να βρεθούν εδώ.
https://github.com/ustayready/fireprox: Δημιουργία ενός URL πύλης API για χρήση με το ffuf
https://github.com/rootcathacking/catspin: Παρόμοιο με το fireprox
https://github.com/PortSwigger/ip-rotate: Πρόσθετο Burp Suite που χρησιμοποιεί IP πύλης API
https://github.com/fyoorer/ShadowClone: Ένας δυναμικά καθορισμένος αριθμός περιβαλλόντων παραμέτρων ενεργοποιείται με βάση το μέγεθος του αρχείου εισόδου και τον παράγοντα διαχωρισμού, με την είσοδο να διαχωρίζεται σε κομμάτια για παράλληλη εκτέλεση, όπως 100 περιβάλλοντα να επεξεργάζονται 100 κομμάτια από ένα αρχείο εισόδου 10,000 γραμμών με παράγοντα διαχωρισμού 100 γραμμών.
Διαφορετικές τεχνικές μπορούν να χρησιμοποιηθούν για να παρακαμφθούν τα φίλτρα regex στα τείχη προστασίας. Παραδείγματα περιλαμβάνουν εναλλαγή πεζών-κεφαλαίων, προσθήκη διακοπών γραμμής και κωδικοποίηση φορτίων. Πόροι για τις διάφορες παρακάμψεις μπορούν να βρεθούν στο PayloadsAllTheThings και OWASP. Τα παραδείγματα παρακάτω αντλήθηκαν από αυτό το άρθρο.
nowafpls: Πρόσθετο Burp για την προσθήκη άχρηστων δεδομένων σε αιτήματα για την παράκαμψη των WAF με βάση το μήκος
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)