From 30a577ea2a29a1c2f93bb2397851b0d62f7e3b15 Mon Sep 17 00:00:00 2001 From: Translator Date: Tue, 5 Aug 2025 00:34:18 +0000 Subject: [PATCH] Translated ['src/pentesting-web/xss-cross-site-scripting/dom-invader.md' --- .../xss-cross-site-scripting/dom-invader.md | 131 ++++++++++++------ 1 file changed, 90 insertions(+), 41 deletions(-) diff --git a/src/pentesting-web/xss-cross-site-scripting/dom-invader.md b/src/pentesting-web/xss-cross-site-scripting/dom-invader.md index f79e7024f..9e80f0dc0 100644 --- a/src/pentesting-web/xss-cross-site-scripting/dom-invader.md +++ b/src/pentesting-web/xss-cross-site-scripting/dom-invader.md @@ -4,78 +4,125 @@ ## DOM Invader -Το DOM Invader είναι ένα εργαλείο προγράμματος περιήγησης που είναι εγκατεστημένο στον ενσωματωμένο περιηγητή του Burp. Βοηθά στην **ανίχνευση ευπαθειών DOM XSS** χρησιμοποιώντας διάφορες πηγές και καταβυθίσεις, συμπεριλαμβανομένων των διαδικτυακών μηνυμάτων και της ρύπανσης πρωτοτύπων. Το εργαλείο είναι προεγκατεστημένο ως επέκταση. +Το DOM Invader είναι ένα εργαλείο προγράμματος περιήγησης που είναι εγκατεστημένο στον **ενσωματωμένο περιηγητή Chromium του Burp Suite**. Βοηθά στην **ανίχνευση DOM XSS και άλλων ευπαθειών πλευράς πελάτη** (ρύπανση πρωτοτύπου, DOM clobbering, κ.λπ.) με την αυτόματη **εργαλειοποίηση πηγών και στόχων JavaScript**. Η επέκταση περιλαμβάνεται στο Burp και χρειάζεται μόνο να ενεργοποιηθεί. -Το DOM Invader ενσωματώνει μια καρτέλα μέσα στο πάνελ DevTools του προγράμματος περιήγησης που επιτρέπει τα εξής: +Το DOM Invader προσθέτει μια καρτέλα στο πάνελ DevTools του προγράμματος περιήγησης που σας επιτρέπει να: -1. **Αναγνώριση ελέγξιμων καταβυθίσεων** σε μια ιστοσελίδα για δοκιμές DOM XSS, παρέχοντας λεπτομέρειες σχετικά με το πλαίσιο και την απολύμανση. -2. **Καταγραφή, επεξεργασία και επαναποστολή διαδικτυακών μηνυμάτων** που αποστέλλονται μέσω της μεθόδου `postMessage()` για δοκιμές DOM XSS. Το DOM Invader μπορεί επίσης να ανιχνεύσει αυτόματα ευπάθειες χρησιμοποιώντας ειδικά κατασκευασμένα διαδικτυακά μηνύματα. -3. Ανίχνευση **πηγών ρύπανσης πρωτοτύπων πελάτη** και σάρωση ελέγξιμων gadget που αποστέλλονται σε επικίνδυνες καταβυθίσεις. -4. Αναγνώριση **ευπαθειών DOM clobbering**. +1. **Εντοπίσετε ελέγξιμους στόχους** σε πραγματικό χρόνο, συμπεριλαμβανομένου του πλαισίου (χαρακτηριστικό, HTML, URL, JS) και της εφαρμοσμένης απολύμανσης. +2. **Καταγράψετε, επεξεργαστείτε και στείλτε ξανά τα `postMessage()` web-messages**, ή αφήστε την επέκταση να τα μεταλλάξει αυτόματα. +3. **Ανιχνεύσετε πηγές ρύπανσης πρωτοτύπου πλευράς πελάτη και σαρώστε για αλυσίδες gadget→sink**, δημιουργώντας PoCs εν κινήσει. +4. **Βρείτε διανύσματα DOM clobbering** (π.χ. συγκρούσεις `id` / `name` που αντικαθιστούν παγκόσμιες μεταβλητές). +5. **Ρυθμίστε τη συμπεριφορά** μέσω ενός πλούσιου UI Ρυθμίσεων (προσαρμοσμένο canary, αυτόματη έγχυση, μπλοκάρισμα ανακατευθύνσεων, λίστες πηγών/στόχων, κ.λπ.). -### Ενεργοποιήστε το +--- -Στον ενσωματωμένο περιηγητή του Burp, μεταβείτε στην **επέκταση Burp** και ενεργοποιήστε το: +### 1. Ενεργοποιήστε το
-Τώρα ανανεώστε τη σελίδα και στα **Dev Tools** θα βρείτε την **καρτέλα DOM Invader:** +1. Ανοίξτε **Proxy ➜ Intercept ➜ Open Browser** (ο ενσωματωμένος περιηγητής του Burp). +2. Κάντε κλικ στο λογότυπο **Burp Suite** (πάνω δεξιά). Αν είναι κρυμμένο, κάντε πρώτα κλικ στο κομμάτι του παζλ. +3. Στην καρτέλα **DOM Invader**, ενεργοποιήστε το **Enable DOM Invader** και πατήστε **Reload**. +4. Ανοίξτε το DevTools ( `F12` / Δεξί κλικ ➜ Επιθεώρηση ) και τοποθετήστε το. Εμφανίζεται ένα νέο πάνελ **DOM Invader**. -
+> Ο Burp θυμάται την κατάσταση ανά προφίλ. Απενεργοποιήστε το κάτω από *Settings ➜ Tools ➜ Burp’s browser ➜ Store settings...* αν απαιτείται. -### Εισάγετε ένα Canary +### 2. Εγχύστε ένα Canary -Στην προηγούμενη εικόνα μπορείτε να δείτε μια **τυχαία ομάδα χαρακτήρων, που είναι το Canary**. Πρέπει τώρα να αρχίσετε να **εισάγετε** το Canary σε διάφορα μέρη του ιστού (params, forms, url...) και κάθε φορά να κάνετε κλικ στην αναζήτηση. Το DOM Invader θα ελέγξει αν το **canary κατέληξε σε οποιαδήποτε ενδιαφέρουσα καταβύθιση** που θα μπορούσε να εκμεταλλευτεί. +Ένα **canary** είναι μια τυχαία συμβολοσειρά δείκτη (π.χ. `xh9XKYlV`) που παρακολουθεί το DOM Invader. Μπορείτε να: -Επιπλέον, οι επιλογές **Inject URL params** και Inject forms θα ανοίξουν αυτόματα μια **νέα καρτέλα** **εισάγοντας** το **canary** σε κάθε **παράμετρο URL** και **φόρμα** που βρίσκει. +* **Αντιγράψετε** το και να το εγχύσετε χειροκίνητα σε παραμέτρους, φόρμες, πλαίσια Web-Socket, web-messages, κ.λπ. +* Χρησιμοποιήστε τα κουμπιά **Inject URL params / Inject forms** για να ανοίξετε μια νέα καρτέλα όπου το canary προσαρτάται σε κάθε κλειδί/τιμή ερωτήματος ή πεδίο φόρμας αυτόματα. +* Αναζητήστε ένα **κενό canary** για να αποκαλύψετε όλους τους στόχους ανεξαρτήτως εκμεταλλευσιμότητας (καλό για αναγνώριση). -### Εισάγετε ένα κενό Canary +#### Προσαρμοσμένο canary (2025+) -Αν θέλετε απλώς να βρείτε πιθανές καταβυθίσεις που μπορεί να έχει η σελίδα, ακόμη και αν δεν είναι εκμεταλλεύσιμες, μπορείτε να **αναζητήσετε ένα κενό canary**. +Ο Burp 2024.12 εισήγαγε τις **ρυθμίσεις Canary** (λογότυπο Burp ➜ DOM Invader ➜ Canary). Μπορείτε να: -### Μηνύματα Post +* **Τυχαία** ή να ορίσετε μια **προσαρμοσμένη συμβολοσειρά** (χρήσιμο για δοκιμές πολλαπλών καρτελών ή όταν η προεπιλεγμένη τιμή εμφανίζεται φυσικά στη σελίδα). +* **Αντιγράψτε** την τιμή στο πρόχειρο. +* Οι αλλαγές απαιτούν **Reload**. -Το DOM Invader επιτρέπει τη δοκιμή για DOM XSS χρησιμοποιώντας διαδικτυακά μηνύματα με δυνατότητες όπως: +--- -1. **Καταγραφή διαδικτυακών μηνυμάτων** που αποστέλλονται μέσω `postMessage()`, παρόμοια με την καταγραφή ιστορικού αιτημάτων/απαντήσεων HTTP του Burp Proxy. -2. **Τροποποίηση** και **επανέκδοση** διαδικτυακών μηνυμάτων για χειροκίνητη δοκιμή DOM XSS, παρόμοια με τη λειτουργία του Burp Repeater. -3. **Αυτόματη τροποποίηση** και αποστολή διαδικτυακών μηνυμάτων για έλεγχο DOM XSS. +### 3. Web-messages (`postMessage`) -#### Λεπτομέρειες μηνύματος +Η υποκαρτέλα **Messages** καταγράφει κάθε κλήση `window.postMessage()`, δείχνοντας τη χρήση `origin`, `source` και `data`. -Λεπτομερείς πληροφορίες μπορούν να προβληθούν για κάθε μήνυμα κάνοντας κλικ σε αυτό, οι οποίες περιλαμβάνουν αν η JavaScript του πελάτη έχει πρόσβαση στις ιδιότητες `origin`, `data` ή `source` του μηνύματος. +• **Τροποποιήστε & στείλτε ξανά**: κάντε διπλό κλικ σε ένα μήνυμα, επεξεργαστείτε το `data` και πατήστε **Send** (όπως το Burp Repeater). -- **`origin`** : Αν οι **πληροφορίες προέλευσης του μηνύματος δεν ελέγχονται**, μπορεί να είστε σε θέση να στείλετε διασυνοριακά μηνύματα στον χειριστή γεγονότων **από έναν αυθαίρετο εξωτερικό τομέα**. Αλλά αν ελέγχεται, μπορεί να είναι ακόμα ανασφαλές. -- **`data`**: Εδώ αποστέλλεται το payload. Αν αυτά τα δεδομένα δεν χρησιμοποιούνται, η καταβύθιση είναι άχρηστη. -- **`source`**: Αξιολογεί αν η ιδιότητα πηγής, που συνήθως αναφέρεται σε iframe, επικυρώνεται αντί για την προέλευση. Ακόμα και αν αυτό ελέγχεται, δεν διασφαλίζει ότι η επικύρωση δεν μπορεί να παρακαμφθεί. +• **Auto-fuzz**: ενεργοποιήστε την **Postmessage interception ➜ Auto-mutate** στις ρυθμίσεις για να επιτρέψετε στο DOM Invader να δημιουργήσει payloads βασισμένα σε canary και να τα επαναπαίξει στον χειριστή. -#### Απάντηση σε μήνυμα +Σύνοψη σημασίας πεδίου: -1. Από την προβολή **Μηνυμάτων**, κάντε κλικ σε οποιοδήποτε μήνυμα για να ανοίξετε το παράθυρο λεπτομερειών μηνύματος. -2. Επεξεργαστείτε το πεδίο **Data** όπως απαιτείται. -3. Κάντε κλικ στο **Send**. +* **origin** – αν ο χειριστής επικυρώνει το `event.origin`. +* **data** – τοποθεσία payload. Αν δεν χρησιμοποιείται, ο στόχος είναι ασήμαντος. +* **source** – επικύρωση αναφοράς iframe / παραθύρου; συχνά πιο αδύναμη από την αυστηρή επικύρωση προέλευσης. -### Ρύπανση Πρωτοτύπων +--- -Το DOM Invader μπορεί επίσης να αναζητήσει **ευπάθειες Ρύπανσης Πρωτοτύπων**. Πρώτα, πρέπει να το ενεργοποιήσετε: +### 4. Ρύπανση Πρωτοτύπου -
+Ενεργοποιήστε κάτω από **Settings ➜ Attack types ➜ Prototype pollution**. -Στη συνέχεια, θα **αναζητήσει πηγές** που σας επιτρέπουν να προσθέσετε αυθαίρετες ιδιότητες στο **`Object.prototype`**. +Ροή εργασίας: + +1. **Περιηγηθείτε** – Το DOM Invader σηματοδοτεί πηγές ρύπανσης (`__proto__`, `constructor`, `prototype`) που βρίσκονται σε URL/ερώτημα/κατακερματισμό ή JSON web-messages. +2. **Δοκιμάστε** – κάντε κλικ στο *Test* για να ανοίξετε μια καρτέλα PoC όπου θα πρέπει να υπάρχει το `Object.prototype.testproperty`: -Αν βρεθεί κάτι, θα εμφανιστεί ένα κουμπί **Test** για να **δοκιμάσετε την βρεθείσα πηγή**. Κάντε κλικ σε αυτό, θα εμφανιστεί μια νέα καρτέλα, δημιουργήστε ένα αντικείμενο στην κονσόλα και ελέγξτε αν η `testproperty` υπάρχει: ```javascript -let b = {} -b.testproperty +let obj = {}; +console.log(obj.testproperty); // ➜ 'DOM_INVADER_PP_POC' ``` -Μόλις βρείτε μια πηγή μπορείτε να **σκανάρετε για ένα gadget**: +3. **Σαρώστε για gadgets** – Το DOM Invader δοκιμάζει ονόματα ιδιοτήτων και παρακολουθεί αν κάποια καταλήγουν σε επικίνδυνους στόχους (π.χ. `innerHTML`). +4. **Εκμεταλλευτείτε** – όταν βρεθεί μια αλυσίδα gadget-sink, εμφανίζεται ένα κουμπί *Exploit* που συνδέει πηγή + gadget + sink για να ενεργοποιήσει την ειδοποίηση. -1. Ένας νέος πίνακας ανοίγει από το DOM Invader όταν το κουμπί **Scan for gadgets**, το οποίο μπορεί να βρεθεί δίπλα σε οποιαδήποτε αναγνωρισμένη πηγή ρύθμισης πρωτοτύπου στην προβολή **DOM**, πατηθεί. Η σάρωση για κατάλληλα gadgets ξεκινά. -2. Εν τω μεταξύ, στην ίδια καρτέλα, η καρτέλα **DOM Invader** θα πρέπει να είναι ανοιχτή στο πάνελ DevTools. Αφού ολοκληρωθεί η σάρωση, οποιοιδήποτε δέκτες προσβάσιμοι μέσω των αναγνωρισμένων gadgets εμφανίζονται στην προβολή **DOM**. Για παράδειγμα, μια ιδιότητα gadget με όνομα `html` που μεταφέρεται στον δέκτη `innerHTML` εμφανίζεται στο παρακάτω παράδειγμα. +Προηγμένες ρυθμίσεις (εικονίδιο γρανάζι): -## DOM clobbering +* **Αφαιρέστε CSP / X-Frame-Options** για να διατηρήσετε τα iframes λειτουργικά κατά τη διάρκεια της σάρωσης gadgets. +* **Σαρώστε τεχνικές σε ξεχωριστά πλαίσια** για να αποφύγετε την παρέμβαση `__proto__` με `constructor`. +* **Απενεργοποιήστε τεχνικές** μεμονωμένα για ευαίσθητες εφαρμογές. -Στην προηγούμενη εικόνα είναι δυνατό να δείτε ότι η σάρωση DOM clobbering μπορεί να ενεργοποιηθεί. Μόλις γίνει αυτό, **το DOM Invader θα αρχίσει να αναζητά ευπάθειες DOM clobbering**. +--- + +### 5. DOM Clobbering + +Ενεργοποιήστε **Attack types ➜ DOM clobbering**. Το DOM Invader παρακολουθεί δυναμικά δημιουργημένα στοιχεία των οποίων τα χαρακτηριστικά `id`/`name` συγκρούουν με παγκόσμιες μεταβλητές ή αντικείμενα φόρμας (`` → αντικαθιστά το `window.location`). Δημιουργείται μια καταχώρηση όποτε ο ελεγχόμενος από τον χρήστη markup οδηγεί σε αντικατάσταση μεταβλητών. + +--- + +## 6. Επισκόπηση Ρυθμίσεων (2025) + +Το DOM Invader έχει πλέον χωριστεί σε κατηγορίες **Main / Attack Types / Misc / Canary**. + +1. **Main** +* **Enable DOM Invader** – παγκόσμια διακόπτης. +* **Postmessage interception** – ενεργοποιήστε/απενεργοποιήστε την καταγραφή μηνυμάτων; υποδιακόπτες για αυτόματη μετάλλαξη. +* **Custom Sources/Sinks** – *εικονίδιο γρανάζι* ➜ ενεργοποιήστε/απενεργοποιήστε συγκεκριμένους στόχους (π.χ. `eval`, `setAttribute`) που μπορεί να σπάσουν την εφαρμογή. + +2. **Attack Types** +* **Prototype pollution** (με ρυθμίσεις ανά τεχνική). +* **DOM clobbering**. + +3. **Misc** +* **Redirect prevention** – μπλοκάρετε τις ανακατευθύνσεις πλευράς πελάτη ώστε η λίστα στόχων να μην χαθεί. +* **Breakpoint before redirect** – σταματήστε το JS ακριβώς πριν από την ανακατεύθυνση για επιθεώρηση της στοίβας κλήσεων. +* **Inject canary into all sources** – αυτόματη έγχυση canary παντού; ρυθμιζόμενη λίστα επιτρεπόμενων πηγών/παραμέτρων. + +4. **Canary** +* Προβολή / τυχαία / ορίστε προσαρμοσμένο canary; αντιγραφή στο πρόχειρο. Οι αλλαγές απαιτούν επαναφόρτωση του προγράμματος περιήγησης. + +--- + +### 7. Συμβουλές & Καλές Πρακτικές + +* **Χρησιμοποιήστε διακριτό canary** – αποφύγετε κοινές συμβολοσειρές όπως `test`, αλλιώς θα προκύψουν ψευδώς θετικά. +* **Απενεργοποιήστε βαρείς στόχους** (`eval`, `innerHTML`) προσωρινά αν σπάνε τη λειτουργικότητα της σελίδας κατά την πλοήγηση. +* **Συνδυάστε με Burp Repeater & Proxy** – αναπαραγάγετε το αίτημα/απάντηση του προγράμματος περιήγησης που παρήγαγε μια ευάλωτη κατάσταση και δημιουργήστε τελικούς exploit URLs. +* **Θυμηθείτε το πεδίο πλαισίου** – οι πηγές/στόχοι εμφανίζονται ανά πλαίσιο περιήγησης; οι ευπάθειες μέσα σε iframes μπορεί να χρειάζονται χειροκίνητη εστίαση. +* **Εξάγετε αποδείξεις** – κάντε δεξί κλικ στο πάνελ DOM Invader ➜ *Save screenshot* για να συμπεριληφθεί σε αναφορές. + +--- ## Αναφορές @@ -85,5 +132,7 @@ b.testproperty - [https://portswigger.net/burp/documentation/desktop/tools/dom-invader/web-messages](https://portswigger.net/burp/documentation/desktop/tools/dom-invader/web-messages) - [https://portswigger.net/burp/documentation/desktop/tools/dom-invader/prototype-pollution](https://portswigger.net/burp/documentation/desktop/tools/dom-invader/prototype-pollution) - [https://portswigger.net/burp/documentation/desktop/tools/dom-invader/dom-clobbering](https://portswigger.net/burp/documentation/desktop/tools/dom-invader/dom-clobbering) +- [https://portswigger.net/burp/documentation/desktop/tools/dom-invader/settings/canary](https://portswigger.net/burp/documentation/desktop/tools/dom-invader/settings/canary) +- [https://portswigger.net/burp/documentation/desktop/tools/dom-invader/settings/misc](https://portswigger.net/burp/documentation/desktop/tools/dom-invader/settings/misc) {{#include ../../banners/hacktricks-training.md}}