mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
139 lines
12 KiB
Markdown
139 lines
12 KiB
Markdown
# 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 ➜ Burp’s 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}}
|