Cache Poisoning via URL discrepancies

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks

Αυτή είναι μια περίληψη των τεχνικών που προτείνονται στην ανάρτηση https://portswigger.net/research/gotta-cache-em-all προκειμένου να εκτελούνται επιθέσεις cache poisoning καταχρώντας τις διαφορές μεταξύ cache proxies και web servers.

Ο στόχος αυτής της επίθεσης είναι να κάνει τον cache server να πιστεύει ότι φορτώνεται ένας στατικός πόρος έτσι ώστε να τον αποθηκεύει στην cache ενώ ο cache server αποθηκεύει ως κλειδί cache μέρος της διαδρομής αλλά ο web server απαντά επιλύοντας μια άλλη διαδρομή. Ο web server θα επιλύσει τη πραγματική διαδρομή που θα φορτώνει μια δυναμική σελίδα (η οποία μπορεί να αποθηκεύει ευαίσθητες πληροφορίες σχετικά με τον χρήστη, ένα κακόβουλο payload όπως XSS ή να ανακατευθύνει για να φορτώσει ένα αρχείο JS από τον ιστότοπο του επιτιθέμενου για παράδειγμα).

Delimiters

URL delimiters διαφέρουν ανάλογα με το framework και τον server, επηρεάζοντας τον τρόπο που δρομολογούνται τα αιτήματα και χειρίζονται οι απαντήσεις. Ορισμένοι κοινοί διαχωριστές προέλευσης είναι:

  • Ερωτηματικό: Χρησιμοποιείται στο Spring για μεταβλητές matrix (π.χ. /hello;var=a/world;var1=b;var2=c/hello/world).

  • Τελεία: Προσδιορίζει τη μορφή απάντησης στο Ruby on Rails (π.χ. /MyAccount.css/MyAccount)

  • Null Byte: Συντομεύει διαδρομές στο OpenLiteSpeed (π.χ. /MyAccount%00aaa/MyAccount).

  • Newline Byte: Διαχωρίζει τα στοιχεία URL στο Nginx (π.χ. /users/MyAccount%0aaaa/account/MyAccount).

Άλλοι συγκεκριμένοι διαχωριστές μπορεί να βρεθούν ακολουθώντας αυτή τη διαδικασία:

  • Βήμα 1: Εντοπίστε μη cacheable αιτήματα και χρησιμοποιήστε τα για να παρακολουθήσετε πώς χειρίζονται τα URLs με πιθανές διαχωριστές.

  • Βήμα 2: Προσθέστε τυχαίους επιθέτες σε διαδρομές και συγκρίνετε την απάντηση του server για να προσδιορίσετε αν ένας χαρακτήρας λειτουργεί ως διαχωριστής.

  • Βήμα 3: Εισάγετε πιθανούς διαχωριστές πριν από τον τυχαίο επιθέτη για να δείτε αν η απάντηση αλλάζει, υποδεικνύοντας τη χρήση διαχωριστή.

Normalization & Encodings

  • Σκοπός: Οι αναλυτές URL και στους δύο cache και origin servers κανονικοποιούν τα URLs για να εξάγουν διαδρομές για την αντιστοίχιση σημείων και τα κλειδιά cache.

  • Διαδικασία: Εντοπίζει τους διαχωριστές διαδρομής, εξάγει και κανονικοποιεί τη διαδρομή αποκωδικοποιώντας χαρακτήρες και αφαιρώντας τμήματα τελείας.

Encodings

Διαφορετικοί HTTP servers και proxies όπως Nginx, Node και CloudFront αποκωδικοποιούν τους διαχωριστές διαφορετικά, οδηγώντας σε ασυνέπειες σε CDNs και origin servers που θα μπορούσαν να εκμεταλλευτούν. Για παράδειγμα, αν ο web server εκτελεί αυτή τη μετατροπή /myAccount%3Fparam/myAccount?param αλλά ο cache server διατηρεί ως κλειδί τη διαδρομή /myAccount%3Fparam, υπάρχει μια ασυνέπεια.

Ένας τρόπος για να ελέγξετε αυτές τις ασυνέπειες είναι να στείλετε αιτήματα URL κωδικοποιώντας διαφορετικούς χαρακτήρες μετά τη φόρτωση της διαδρομής χωρίς καμία κωδικοποίηση και να ελέγξετε αν η απάντηση της κωδικοποιημένης διαδρομής προήλθε από την αποθηκευμένη απάντηση.

Dot segment

Η κανονικοποίηση διαδρομής όπου εμπλέκονται οι τελείες είναι επίσης πολύ ενδιαφέρουσα για επιθέσεις cache poisoning. Για παράδειγμα, /static/../home/index ή /aaa..\home/index, ορισμένοι cache servers θα αποθηκεύσουν αυτές τις διαδρομές με τον εαυτό τους ως κλειδιά ενώ άλλοι μπορεί να επιλύσουν τη διαδρομή και να χρησιμοποιήσουν /home/index ως το κλειδί cache. Ακριβώς όπως πριν, η αποστολή αυτού του είδους αιτημάτων και η επαλήθευση αν η απάντηση συγκεντρώθηκε από την cache βοηθά στην αναγνώριση αν η απάντηση για το /home/index είναι η απάντηση που στάλθηκε όταν ζητήθηκαν αυτές οι διαδρομές.

Static Resources

Πολλοί cache servers θα αποθηκεύσουν πάντα μια απάντηση αν αναγνωριστεί ως στατική. Αυτό μπορεί να οφείλεται σε:

  • Η επέκταση: Το Cloudflare θα αποθηκεύει πάντα αρχεία με τις παρακάτω επεκτάσεις: 7z, csv, gif, midi, png, tif, zip, avi, doc, gz, mkv, ppt, tiff, zst, avif, docx, ico, mp3, pptx, ttf, apk, dmg, iso, mp4, ps, webm, bin, ejs, jar, ogg, rar, webp, bmp, eot, jpg, otf, svg, woff, bz2, eps, jpeg, pdf, svgz, woff2, class, exe, js, pict, swf, xls, css, flac, mid, pls, tar, xlsx

  • Είναι δυνατόν να αναγκάσετε μια cache να αποθηκεύσει μια δυναμική απάντηση χρησιμοποιώντας έναν διαχωριστή και μια στατική επέκταση όπως ένα αίτημα προς το /home$image.png θα αποθηκεύσει το /home$image.png και ο origin server θα απαντήσει με το /home

  • Γνωστές στατικές καταλόγους: Οι παρακάτω κατάλογοι περιέχουν στατικά αρχεία και επομένως η απάντησή τους θα πρέπει να αποθηκευτεί: /static, /assets, /wp-content, /media, /templates, /public, /shared

  • Είναι δυνατόν να αναγκάσετε μια cache να αποθηκεύσει μια δυναμική απάντηση χρησιμοποιώντας έναν διαχωριστή, έναν στατικό κατάλογο και τελείες όπως: /home/..%2fstatic/something θα αποθηκεύσει το /static/something και η απάντηση θα είναι /home

  • Στατικοί κατάλογοι + τελείες: Ένα αίτημα προς το /static/..%2Fhome ή προς το /static/..%5Chome μπορεί να αποθηκευτεί όπως είναι αλλά η απάντηση μπορεί να είναι /home

  • Στατικά αρχεία: Ορισμένα συγκεκριμένα αρχεία αποθηκεύονται πάντα όπως το /robots.txt, /favicon.ico, και /index.html. Τα οποία μπορούν να καταχραστούν όπως το /home/..%2Frobots.txt όπου η cache μπορεί να αποθηκεύσει το /robots.txt και ο origin server να απαντήσει στο /home.

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks

Last updated