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