Express Prototype Pollution Gadgets
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Serve XSS responses
Για περισσότερες λεπτομέρειες ρίξτε μια ματιά στην αρχική έρευνα
Change JSON content-type to HTML
Σε μια εφαρμογή Express που χρησιμοποιεί JSON content type response και ανακλά ένα JSON:
Σε αυτές τις περιπτώσεις, το XSS δεν είναι συνήθως δυνατό με τύπο περιεχομένου JSON. Ωστόσο, με την μόλυνση πρωτοτύπου μπορούμε να μπερδέψουμε το Express ώστε να εξυπηρετήσει μια HTML απάντηση. Αυτή η ευπάθεια βασίζεται στη χρήση του res.send(obj)
από την εφαρμογή και στη χρήση του body parser με τον τύπο περιεχομένου application/json.
Με την ρύπανση των ιδιοτήτων body
και _body
, είναι δυνατόν να προκαλέσουμε την Express να σερβίρει τον τύπο περιεχομένου HTML και να ανακλά την ιδιότητα _body
, με αποτέλεσμα αποθηκευμένο XSS.
Απόδοση UTF7
Είναι δυνατόν να κάνουμε την express να αποδώσει περιεχόμενο UTF-7 με:
Safe Scanning Techinques
JSON spaces
Η παρακάτω PP θα προσθέσει ένα επιπλέον διάστημα στα χαρακτηριστικά μέσα σε ένα JSON που δεν θα σπάσει τη λειτουργικότητα:
Τότε ένα αντανάκλαση JSON θα φαίνεται έτσι:
Exposed Headers
Ο παρακάτω PP gadget θα κάνει τον διακομιστή να στείλει πίσω την HTTP κεφαλίδα: Access-Control-Expose_headers: foo
Απαιτείται η εγκατάσταση του CORS module
Μέθοδος OPTIONS
Με το παρακάτω payload, είναι δυνατόν να κρυφτεί μια μέθοδος από μια απάντηση OPTIONS:
Κατάσταση
Είναι δυνατόν να αλλάξετε τον κωδικό κατάστασης που επιστρέφεται χρησιμοποιώντας το παρακάτω PP payload:
Σφάλμα
Όταν αναθέτετε σε ένα πρωτότυπο με μια πρωτογενή τιμή όπως μια συμβολοσειρά, παράγει μια λειτουργία no-op καθώς το πρωτότυπο πρέπει να είναι ένα αντικείμενο. Εάν προσπαθήσετε να αναθέσετε ένα αντικείμενο πρωτοτύπου στο Object.prototype
αυτό θα ρίξει μια εξαίρεση. Μπορούμε να χρησιμοποιήσουμε αυτές τις δύο συμπεριφορές για να ανιχνεύσουμε αν η ρύπανση του πρωτοτύπου ήταν επιτυχής:
Reflected Value
Όταν μια εφαρμογή περιλαμβάνει ένα αντικείμενο στην απάντησή της, η δημιουργία ενός χαρακτηριστικού με ένα ασυνήθιστο όνομα μαζί με το __proto__
μπορεί να είναι διαφωτιστική. Συγκεκριμένα, αν μόνο το ασυνήθιστο χαρακτηριστικό επιστρέφεται στην απάντηση, αυτό θα μπορούσε να υποδηλώνει την ευπάθεια της εφαρμογής:
Επιπλέον, σε σενάρια όπου χρησιμοποιείται μια βιβλιοθήκη όπως το Lodash, η ρύθμιση μιας ιδιότητας τόσο μέσω της ρύθμισης πρωτοτύπου (PP) όσο και άμεσα μέσα στο αντικείμενο προσφέρει μια άλλη διαγνωστική προσέγγιση. Εάν μια τέτοια ιδιότητα παραλειφθεί από την απόκριση, υποδηλώνει ότι το Lodash επαληθεύει την ύπαρξη της ιδιότητας στο στοχευόμενο αντικείμενο πριν από τη συγχώνευση:
Misc
Allow Dots
Υπάρχει μια επιλογή στο Express που σας επιτρέπει να δημιουργείτε αντικείμενα από παραμέτρους συμβολοσειράς ερωτήματος. Μπορείτε σίγουρα να το χρησιμοποιήσετε σε μια αλυσίδα σφαλμάτων για να εκμεταλλευτείτε μια ευπάθεια μόλυνσης πρωτοτύπου.
?foo.bar=baz
δημιουργεί ένα αντικείμενο στο Node.
Αναφορές
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Last updated