mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/pentesting-web/xss-cross-site-scripting/dom-invader.md'
This commit is contained in:
parent
74e221a0a2
commit
30a577ea2a
@ -4,78 +4,125 @@
|
|||||||
|
|
||||||
## DOM Invader
|
## 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, παρέχοντας λεπτομέρειες σχετικά με το πλαίσιο και την απολύμανση.
|
1. **Εντοπίσετε ελέγξιμους στόχους** σε πραγματικό χρόνο, συμπεριλαμβανομένου του πλαισίου (χαρακτηριστικό, HTML, URL, JS) και της εφαρμοσμένης απολύμανσης.
|
||||||
2. **Καταγραφή, επεξεργασία και επαναποστολή διαδικτυακών μηνυμάτων** που αποστέλλονται μέσω της μεθόδου `postMessage()` για δοκιμές DOM XSS. Το DOM Invader μπορεί επίσης να ανιχνεύσει αυτόματα ευπάθειες χρησιμοποιώντας ειδικά κατασκευασμένα διαδικτυακά μηνύματα.
|
2. **Καταγράψετε, επεξεργαστείτε και στείλτε ξανά τα `postMessage()` web-messages**, ή αφήστε την επέκταση να τα μεταλλάξει αυτόματα.
|
||||||
3. Ανίχνευση **πηγών ρύπανσης πρωτοτύπων πελάτη** και σάρωση ελέγξιμων gadget που αποστέλλονται σε επικίνδυνες καταβυθίσεις.
|
3. **Ανιχνεύσετε πηγές ρύπανσης πρωτοτύπου πλευράς πελάτη και σαρώστε για αλυσίδες gadget→sink**, δημιουργώντας PoCs εν κινήσει.
|
||||||
4. Αναγνώριση **ευπαθειών DOM clobbering**.
|
4. **Βρείτε διανύσματα DOM clobbering** (π.χ. συγκρούσεις `id` / `name` που αντικαθιστούν παγκόσμιες μεταβλητές).
|
||||||
|
5. **Ρυθμίστε τη συμπεριφορά** μέσω ενός πλούσιου UI Ρυθμίσεων (προσαρμοσμένο canary, αυτόματη έγχυση, μπλοκάρισμα ανακατευθύνσεων, λίστες πηγών/στόχων, κ.λπ.).
|
||||||
|
|
||||||
### Ενεργοποιήστε το
|
---
|
||||||
|
|
||||||
Στον ενσωματωμένο περιηγητή του Burp, μεταβείτε στην **επέκταση Burp** και ενεργοποιήστε το:
|
### 1. Ενεργοποιήστε το
|
||||||
|
|
||||||
<figure><img src="../../images/image (1129).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../../images/image (1129).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Τώρα ανανεώστε τη σελίδα και στα **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**.
|
||||||
|
|
||||||
<figure><img src="../../images/image (695).png" alt=""><figcaption></figcaption></figure>
|
> Ο 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.
|
### 3. Web-messages (`postMessage`)
|
||||||
2. **Τροποποίηση** και **επανέκδοση** διαδικτυακών μηνυμάτων για χειροκίνητη δοκιμή DOM XSS, παρόμοια με τη λειτουργία του Burp Repeater.
|
|
||||||
3. **Αυτόματη τροποποίηση** και αποστολή διαδικτυακών μηνυμάτων για έλεγχο DOM XSS.
|
|
||||||
|
|
||||||
#### Λεπτομέρειες μηνύματος
|
Η υποκαρτέλα **Messages** καταγράφει κάθε κλήση `window.postMessage()`, δείχνοντας τη χρήση `origin`, `source` και `data`.
|
||||||
|
|
||||||
Λεπτομερείς πληροφορίες μπορούν να προβληθούν για κάθε μήνυμα κάνοντας κλικ σε αυτό, οι οποίες περιλαμβάνουν αν η JavaScript του πελάτη έχει πρόσβαση στις ιδιότητες `origin`, `data` ή `source` του μηνύματος.
|
• **Τροποποιήστε & στείλτε ξανά**: κάντε διπλό κλικ σε ένα μήνυμα, επεξεργαστείτε το `data` και πατήστε **Send** (όπως το Burp Repeater).
|
||||||
|
|
||||||
- **`origin`** : Αν οι **πληροφορίες προέλευσης του μηνύματος δεν ελέγχονται**, μπορεί να είστε σε θέση να στείλετε διασυνοριακά μηνύματα στον χειριστή γεγονότων **από έναν αυθαίρετο εξωτερικό τομέα**. Αλλά αν ελέγχεται, μπορεί να είναι ακόμα ανασφαλές.
|
• **Auto-fuzz**: ενεργοποιήστε την **Postmessage interception ➜ Auto-mutate** στις ρυθμίσεις για να επιτρέψετε στο DOM Invader να δημιουργήσει payloads βασισμένα σε canary και να τα επαναπαίξει στον χειριστή.
|
||||||
- **`data`**: Εδώ αποστέλλεται το payload. Αν αυτά τα δεδομένα δεν χρησιμοποιούνται, η καταβύθιση είναι άχρηστη.
|
|
||||||
- **`source`**: Αξιολογεί αν η ιδιότητα πηγής, που συνήθως αναφέρεται σε iframe, επικυρώνεται αντί για την προέλευση. Ακόμα και αν αυτό ελέγχεται, δεν διασφαλίζει ότι η επικύρωση δεν μπορεί να παρακαμφθεί.
|
|
||||||
|
|
||||||
#### Απάντηση σε μήνυμα
|
Σύνοψη σημασίας πεδίου:
|
||||||
|
|
||||||
1. Από την προβολή **Μηνυμάτων**, κάντε κλικ σε οποιοδήποτε μήνυμα για να ανοίξετε το παράθυρο λεπτομερειών μηνύματος.
|
* **origin** – αν ο χειριστής επικυρώνει το `event.origin`.
|
||||||
2. Επεξεργαστείτε το πεδίο **Data** όπως απαιτείται.
|
* **data** – τοποθεσία payload. Αν δεν χρησιμοποιείται, ο στόχος είναι ασήμαντος.
|
||||||
3. Κάντε κλικ στο **Send**.
|
* **source** – επικύρωση αναφοράς iframe / παραθύρου; συχνά πιο αδύναμη από την αυστηρή επικύρωση προέλευσης.
|
||||||
|
|
||||||
### Ρύπανση Πρωτοτύπων
|
---
|
||||||
|
|
||||||
Το DOM Invader μπορεί επίσης να αναζητήσει **ευπάθειες Ρύπανσης Πρωτοτύπων**. Πρώτα, πρέπει να το ενεργοποιήσετε:
|
### 4. Ρύπανση Πρωτοτύπου
|
||||||
|
|
||||||
<figure><img src="../../images/image (1026).png" alt=""><figcaption></figcaption></figure>
|
Ενεργοποιήστε κάτω από **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
|
```javascript
|
||||||
let b = {}
|
let obj = {};
|
||||||
b.testproperty
|
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` συγκρούουν με παγκόσμιες μεταβλητές ή αντικείμενα φόρμας (`<input name="location">` → αντικαθιστά το `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/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/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/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}}
|
{{#include ../../banners/hacktricks-training.md}}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user