139 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# DOM Invader
{{#include ../../banners/hacktricks-training.md}}
## DOM Invader
Το DOM Invader είναι ένα εργαλείο προγράμματος περιήγησης που είναι εγκατεστημένο στον **ενσωματωμένο περιηγητή Chromium του Burp Suite**. Βοηθά στην **ανίχνευση DOM XSS και άλλων ευπαθειών πλευράς πελάτη** (ρύπανση πρωτοτύπου, DOM clobbering, κ.λπ.) με την αυτόματη **εργαλειοποίηση πηγών και στόχων JavaScript**. Η επέκταση περιλαμβάνεται στο Burp και χρειάζεται μόνο να ενεργοποιηθεί.
Το DOM Invader προσθέτει μια καρτέλα στο πάνελ DevTools του προγράμματος περιήγησης που σας επιτρέπει να:
1. **Εντοπίσετε ελέγξιμους στόχους** σε πραγματικό χρόνο, συμπεριλαμβανομένου του πλαισίου (χαρακτηριστικό, HTML, URL, JS) και της εφαρμοσμένης απολύμανσης.
2. **Καταγράψετε, επεξεργαστείτε και στείλτε ξανά τα `postMessage()` web-messages**, ή αφήστε την επέκταση να τα μεταλλάξει αυτόματα.
3. **Ανιχνεύσετε πηγές ρύπανσης πρωτοτύπου πλευράς πελάτη και σαρώστε για αλυσίδες gadget→sink**, δημιουργώντας PoCs εν κινήσει.
4. **Βρείτε διανύσματα DOM clobbering** (π.χ. συγκρούσεις `id` / `name` που αντικαθιστούν παγκόσμιες μεταβλητές).
5. **Ρυθμίστε τη συμπεριφορά** μέσω ενός πλούσιου UI Ρυθμίσεων (προσαρμοσμένο canary, αυτόματη έγχυση, μπλοκάρισμα ανακατευθύνσεων, λίστες πηγών/στόχων, κ.λπ.).
---
### 1. Ενεργοποιήστε το
<figure><img src="../../images/image (1129).png" alt=""><figcaption></figcaption></figure>
1. Ανοίξτε **Proxy ➜ Intercept ➜ Open Browser** (ο ενσωματωμένος περιηγητής του Burp).
2. Κάντε κλικ στο λογότυπο **Burp Suite** (πάνω δεξιά). Αν είναι κρυμμένο, κάντε πρώτα κλικ στο κομμάτι του παζλ.
3. Στην καρτέλα **DOM Invader**, ενεργοποιήστε το **Enable DOM Invader** και πατήστε **Reload**.
4. Ανοίξτε το DevTools ( `F12` / Δεξί κλικ ➜ Επιθεώρηση ) και τοποθετήστε το. Εμφανίζεται ένα νέο πάνελ **DOM Invader**.
> Ο Burp θυμάται την κατάσταση ανά προφίλ. Απενεργοποιήστε το κάτω από *Settings ➜ Tools ➜ Burps browser ➜ Store settings...* αν απαιτείται.
### 2. Εγχύστε ένα Canary
Ένα **canary** είναι μια τυχαία συμβολοσειρά δείκτη (π.χ. `xh9XKYlV`) που παρακολουθεί το DOM Invader. Μπορείτε να:
* **Αντιγράψετε** το και να το εγχύσετε χειροκίνητα σε παραμέτρους, φόρμες, πλαίσια Web-Socket, web-messages, κ.λπ.
* Χρησιμοποιήστε τα κουμπιά **Inject URL params / Inject forms** για να ανοίξετε μια νέα καρτέλα όπου το canary προσαρτάται σε κάθε κλειδί/τιμή ερωτήματος ή πεδίο φόρμας αυτόματα.
* Αναζητήστε ένα **κενό canary** για να αποκαλύψετε όλους τους στόχους ανεξαρτήτως εκμεταλλευσιμότητας (καλό για αναγνώριση).
#### Προσαρμοσμένο canary (2025+)
Ο Burp 2024.12 εισήγαγε τις **ρυθμίσεις Canary** (λογότυπο Burp ➜ DOM Invader ➜ Canary). Μπορείτε να:
* **Τυχαία** ή να ορίσετε μια **προσαρμοσμένη συμβολοσειρά** (χρήσιμο για δοκιμές πολλαπλών καρτελών ή όταν η προεπιλεγμένη τιμή εμφανίζεται φυσικά στη σελίδα).
* **Αντιγράψτε** την τιμή στο πρόχειρο.
* Οι αλλαγές απαιτούν **Reload**.
---
### 3. Web-messages (`postMessage`)
Η υποκαρτέλα **Messages** καταγράφει κάθε κλήση `window.postMessage()`, δείχνοντας τη χρήση `origin`, `source` και `data`.
**Τροποποιήστε & στείλτε ξανά**: κάντε διπλό κλικ σε ένα μήνυμα, επεξεργαστείτε το `data` και πατήστε **Send** (όπως το Burp Repeater).
**Auto-fuzz**: ενεργοποιήστε την **Postmessage interception ➜ Auto-mutate** στις ρυθμίσεις για να επιτρέψετε στο DOM Invader να δημιουργήσει payloads βασισμένα σε canary και να τα επαναπαίξει στον χειριστή.
Σύνοψη σημασίας πεδίου:
* **origin** αν ο χειριστής επικυρώνει το `event.origin`.
* **data** τοποθεσία payload. Αν δεν χρησιμοποιείται, ο στόχος είναι ασήμαντος.
* **source** επικύρωση αναφοράς iframe / παραθύρου; συχνά πιο αδύναμη από την αυστηρή επικύρωση προέλευσης.
---
### 4. Ρύπανση Πρωτοτύπου
Ενεργοποιήστε κάτω από **Settings ➜ Attack types ➜ Prototype pollution**.
Ροή εργασίας:
1. **Περιηγηθείτε** Το DOM Invader σηματοδοτεί πηγές ρύπανσης (`__proto__`, `constructor`, `prototype`) που βρίσκονται σε URL/ερώτημα/κατακερματισμό ή JSON web-messages.
2. **Δοκιμάστε** κάντε κλικ στο *Test* για να ανοίξετε μια καρτέλα PoC όπου θα πρέπει να υπάρχει το `Object.prototype.testproperty`:
```javascript
let obj = {};
console.log(obj.testproperty); // ➜ 'DOM_INVADER_PP_POC'
```
3. **Σαρώστε για gadgets** Το DOM Invader δοκιμάζει ονόματα ιδιοτήτων και παρακολουθεί αν κάποια καταλήγουν σε επικίνδυνους στόχους (π.χ. `innerHTML`).
4. **Εκμεταλλευτείτε** όταν βρεθεί μια αλυσίδα gadget-sink, εμφανίζεται ένα κουμπί *Exploit* που συνδέει πηγή + gadget + sink για να ενεργοποιήσει την ειδοποίηση.
Προηγμένες ρυθμίσεις (εικονίδιο γρανάζι):
* **Αφαιρέστε CSP / X-Frame-Options** για να διατηρήσετε τα iframes λειτουργικά κατά τη διάρκεια της σάρωσης gadgets.
* **Σαρώστε τεχνικές σε ξεχωριστά πλαίσια** για να αποφύγετε την παρέμβαση `__proto__` με `constructor`.
* **Απενεργοποιήστε τεχνικές** μεμονωμένα για ευαίσθητες εφαρμογές.
---
### 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* για να συμπεριληφθεί σε αναφορές.
---
## Αναφορές
- [https://portswigger.net/burp/documentation/desktop/tools/dom-invader](https://portswigger.net/burp/documentation/desktop/tools/dom-invader)
- [https://portswigger.net/burp/documentation/desktop/tools/dom-invader/enabling](https://portswigger.net/burp/documentation/desktop/tools/dom-invader/enabling)
- [https://portswigger.net/burp/documentation/desktop/tools/dom-invader/dom-xss](https://portswigger.net/burp/documentation/desktop/tools/dom-invader/dom-xss)
- [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}}