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
bc1b15df20
commit
d6196e8294
@ -4,78 +4,125 @@
|
||||
|
||||
## DOM Invader
|
||||
|
||||
DOM Invader, Burp'ın yerleşik tarayıcısında kurulu bir tarayıcı aracıdır. Çeşitli kaynaklar ve sinkler kullanarak **DOM XSS zafiyetlerini tespit etmeye** yardımcı olur; bunlar arasında web mesajları ve prototip kirlenmesi bulunmaktadır. Araç, bir uzantı olarak önceden yüklenmiştir.
|
||||
DOM Invader, **Burp Suite'in yerleşik Chromium tarayıcısında** kurulu bir tarayıcı aracıdır. **DOM XSS ve diğer istemci tarafı güvenlik açıklarını** (prototip kirlenmesi, DOM çakışması vb.) otomatik olarak **JavaScript kaynaklarını ve hedeflerini enstrümante ederek** tespit etmeye yardımcı olur. Eklenti, Burp ile birlikte gelir ve yalnızca etkinleştirilmesi gerekir.
|
||||
|
||||
DOM Invader, tarayıcının Geliştirici Araçları panelinde aşağıdakileri sağlayan bir sekme entegre eder:
|
||||
DOM Invader, tarayıcının Geliştirici Araçları paneline bir sekme ekler ve bu sekme ile şunları yapabilirsiniz:
|
||||
|
||||
1. **DOM XSS testi için bir web sayfasındaki kontrol edilebilir sinklerin tanımlanması**, bağlam ve sanitizasyon detayları sağlar.
|
||||
2. **`postMessage()` yöntemiyle gönderilen web mesajlarının** kaydedilmesi, düzenlenmesi ve yeniden gönderilmesi için DOM XSS testi. DOM Invader ayrıca özel olarak hazırlanmış web mesajlarını kullanarak zafiyetleri otomatik olarak tespit edebilir.
|
||||
3. **İstemci tarafı prototip kirlenmesi** kaynaklarının tespiti ve riskli sinklere gönderilen kontrol edilebilir gadgetların taranması.
|
||||
4. **DOM clobbering zafiyetlerinin** tanımlanması.
|
||||
1. **Gerçek zamanlı olarak kontrol edilebilir hedefleri** tanımlayın; bağlam (özellik, HTML, URL, JS) ve uygulanan sanitizasyon dahil.
|
||||
2. **`postMessage()` web-mesajlarını kaydedin, düzenleyin ve yeniden gönderin**, veya eklentinin bunları otomatik olarak değiştirmesine izin verin.
|
||||
3. **İstemci tarafı prototip kirlenmesi kaynaklarını tespit edin ve gadget→sink zincirlerini tarayın**, anında PoC'ler oluşturun.
|
||||
4. **DOM çakışma vektörlerini bulun** (örneğin, global değişkenleri geçersiz kılan `id` / `name` çakışmaları).
|
||||
5. **Davranışı ince ayar yapın**; zengin bir Ayarlar UI'si (özel kanarya, otomatik enjekte, yönlendirme engelleme, kaynak/hedef listeleri vb.) aracılığıyla.
|
||||
|
||||
### Etkinleştir
|
||||
---
|
||||
|
||||
Burp'ın yerleşik tarayıcısında **Burp uzantısına** gidin ve etkinleştirin:
|
||||
### 1. Etkinleştir
|
||||
|
||||
<figure><img src="../../images/image (1129).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Şimdi sayfayı yenileyin ve **Geliştirici Araçları** içinde **DOM Invader sekmesini** bulacaksınız:
|
||||
1. **Proxy ➜ Intercept ➜ Open Browser** (Burp’ın gömülü tarayıcısı) açın.
|
||||
2. **Burp Suite** logosuna (sağ üstte) tıklayın. Gizliyse, önce yapboz parçasına tıklayın.
|
||||
3. **DOM Invader** sekmesinde, **Enable DOM Invader**'ı AÇIK konuma getirin ve **Reload**'a basın.
|
||||
4. Geliştirici Araçları'nı açın ( `F12` / Sağ tıklayın ➜ İncele ) ve sabitleyin. Yeni bir **DOM Invader** paneli görünür.
|
||||
|
||||
<figure><img src="../../images/image (695).png" alt=""><figcaption></figcaption></figure>
|
||||
> Burp, durumu profil başına hatırlar. Gerekirse *Ayarlar ➜ Araçlar ➜ Burp’ın tarayıcısı ➜ Ayarları sakla...* altında devre dışı bırakın.
|
||||
|
||||
### Bir Canary Enjekte Et
|
||||
### 2. Bir Kanarya Enjekte Et
|
||||
|
||||
Önceki resimde bir **rastgele karakter grubu, yani Canary** görebilirsiniz. Şimdi bunu webin farklı kısımlarına (parametreler, formlar, url...) **enjekte etmeye** başlamalısınız ve her seferinde arama butonuna tıklayın. DOM Invader, **canary'nin herhangi bir ilginç sinkte sonlanıp sonlanmadığını** kontrol edecektir.
|
||||
Bir **kanarya**, DOM Invader'ın takip ettiği rastgele bir işaretçi dizesidir (örneğin, `xh9XKYlV`). Şunları yapabilirsiniz:
|
||||
|
||||
Ayrıca, **URL parametrelerini Enjekte Et** ve **Formları Enjekte Et** seçenekleri, bulduğu her **URL** parametresine ve **formuna** **canary'yi enjekte ederek** otomatik olarak **yeni bir sekme** açacaktır.
|
||||
* **Kopyalayın** ve parametrelerde, formlarda, Web-Socket çerçevelerinde, web-mesajlarında vb. manuel olarak enjekte edin.
|
||||
* **Inject URL params / Inject forms** butonlarını kullanarak, kanaryanın her sorgu anahtar/değerine veya form alanına otomatik olarak eklendiği yeni bir sekme açın.
|
||||
* **Boş bir kanarya** arayın, böylece istismar edilebilirlikten bağımsız olarak tüm hedefleri ortaya çıkarın (keşif için harika).
|
||||
|
||||
### Boş Bir Canary Enjekte Et
|
||||
#### Özel kanarya (2025+)
|
||||
|
||||
Sayfanın potansiyel sinklerini bulmak istiyorsanız, bunlar istismar edilebilir olmasa bile, **boş bir canary arayabilirsiniz**.
|
||||
Burp 2024.12, **Kanarya ayarlarını** tanıttı (Burp logosu ➜ DOM Invader ➜ Kanarya). Şunları yapabilirsiniz:
|
||||
|
||||
### Mesajları Gönder
|
||||
* **Rastgeleleştirin** veya **özel bir dize** ayarlayın (çoklu sekme testi için veya varsayılan değer sayfada doğal olarak göründüğünde yararlıdır).
|
||||
* Değeri panoya **kopyalayın**.
|
||||
* Değişiklikler **Reload** gerektirir.
|
||||
|
||||
DOM Invader, web mesajları kullanarak DOM XSS testi yapmayı sağlar ve şu özelliklere sahiptir:
|
||||
---
|
||||
|
||||
1. **`postMessage()` ile gönderilen web mesajlarının** kaydedilmesi, Burp Proxy'nin HTTP istek/yanıt geçmişi kaydıyla benzerlik gösterir.
|
||||
2. **Web mesajlarının** değiştirilmesi ve **yeniden gönderilmesi**, DOM XSS için manuel test yapmaya benzer, Burp Repeater'ın işlevine benzer.
|
||||
3. **Web mesajlarının otomatik olarak değiştirilmesi** ve DOM XSS'yi araştırmak için gönderilmesi.
|
||||
### 3. Web-mesajları (`postMessage`)
|
||||
|
||||
#### Mesaj detayları
|
||||
**Messages** alt sekmesi, her `window.postMessage()` çağrısını kaydeder ve `origin`, `source` ve `data` kullanımını gösterir.
|
||||
|
||||
Her mesaj hakkında detaylı bilgi, üzerine tıklanarak görüntülenebilir; bu, istemci tarafı JavaScript'in mesajın `origin`, `data` veya `source` özelliklerine erişip erişmediğini içerir.
|
||||
• **Değiştir ve yeniden gönder**: bir mesaja çift tıklayın, `data`yı düzenleyin ve **Gönder**'e basın (Burp Repeater benzeri).
|
||||
|
||||
- **`origin`** : Eğer mesajın **origin bilgisi kontrol edilmezse**, **rastgele bir dış alan** üzerinden olay işleyicisine çapraz alan mesajları gönderebilirsiniz. Ancak kontrol ediliyorsa, yine de güvensiz olabilir.
|
||||
- **`data`**: Payload'un gönderildiği yerdir. Bu veri kullanılmazsa, sink işe yaramaz.
|
||||
- **`source`**: Genellikle bir iframe'i referans alan kaynak özelliğinin doğrulanıp doğrulanmadığını değerlendirir. Bu kontrol edilse bile, doğrulamanın atlanamayacağına dair bir garanti yoktur.
|
||||
• **Otomatik fuzz**: ayarlarda **Postmessage interception ➜ Auto-mutate**'yi etkinleştirerek DOM Invader'ın kanarya tabanlı yükleri oluşturmasına ve bunları işleyiciye yeniden oynamasına izin verin.
|
||||
|
||||
#### Bir mesaja yanıt ver
|
||||
Alan anlamı özeti:
|
||||
|
||||
1. **Mesajlar** görünümünden, mesaj detayları penceresini açmak için herhangi bir mesaja tıklayın.
|
||||
2. Gerekli şekilde **Veri** alanını düzenleyin.
|
||||
3. **Gönder** butonuna tıklayın.
|
||||
* **origin** – işleyicinin `event.origin`'i doğrulayıp doğrulamadığı.
|
||||
* **data** – yük konumu. Kullanılmıyorsa, hedef önemsizdir.
|
||||
* **source** – iframe / pencere referansı doğrulaması; genellikle katı köken kontrolünden daha zayıftır.
|
||||
|
||||
### Prototip Kirlenmesi
|
||||
---
|
||||
|
||||
DOM Invader ayrıca **Prototip Kirlenmesi zafiyetlerini** arayabilir. Öncelikle, bunu etkinleştirmeniz gerekir:
|
||||
### 4. Prototip Kirlenmesi
|
||||
|
||||
<figure><img src="../../images/image (1026).png" alt=""><figcaption></figcaption></figure>
|
||||
**Ayarlar ➜ Saldırı türleri ➜ Prototip kirlenmesi** altında etkinleştirin.
|
||||
|
||||
Sonra, **`Object.prototype`**'a rastgele özellikler eklemenizi sağlayan **kaynakları** arayacaktır.
|
||||
İş akışı:
|
||||
|
||||
1. **Göz atın** – DOM Invader, URL/sorgu/hash veya JSON web-mesajlarında bulunan kirlenme **kaynaklarını** (`__proto__`, `constructor`, `prototype`) işaretler.
|
||||
2. **Test edin** – *Test* butonuna tıklayarak `Object.prototype.testproperty`'nin var olması gereken bir PoC sekmesi açın:
|
||||
|
||||
Eğer bir şey bulunursa, bulunan kaynağı **test etmek için** bir **Test** butonu görünecektir. Üzerine tıklayın, konsolda bir nesne oluşturun ve `testproperty`'nin var olup olmadığını kontrol edin:
|
||||
```javascript
|
||||
let b = {}
|
||||
b.testproperty
|
||||
let obj = {};
|
||||
console.log(obj.testproperty); // ➜ 'DOM_INVADER_PP_POC'
|
||||
```
|
||||
Bir kaynak bulduğunuzda **bir alet için tarama yapabilirsiniz**:
|
||||
3. **Gadget'leri tarayın** – DOM Invader, özellik adlarını brute force ile dener ve herhangi birinin tehlikeli hedeflere (örneğin, `innerHTML`) ulaşıp ulaşmadığını takip eder.
|
||||
4. **İstismar edin** – bir gadget-hedef zinciri bulunduğunda, bir *Exploit* butonu görünür ve kaynak + gadget + hedefi zincirleyerek uyarıyı tetikler.
|
||||
|
||||
1. **DOM** görünümünde herhangi bir tanımlanmış prototip kirlenme kaynağının yanında bulunan **Gadget'leri Tara** butonuna tıklandığında, DOM Invader yeni bir sekme açar. Uygun aletler için tarama başlar.
|
||||
2. Bu arada, aynı sekmede, DevTools panelinde **DOM Invader** sekmesi açılmalıdır. Tarama tamamlandığında, tanımlanan aletler aracılığıyla erişilebilen herhangi bir sink **DOM** görünümünde görüntülenir. Örneğin, `innerHTML` sink'ine geçirilen `html` adlı bir alet özelliği aşağıdaki örnekte gösterilmektedir.
|
||||
Gelişmiş ayarlar (dişli simgesi):
|
||||
|
||||
## DOM kirlenmesi
|
||||
* **CSP / X-Frame-Options'ı kaldırın**; gadget taraması sırasında iframe'lerin çalışabilir kalmasını sağlamak için.
|
||||
* **Teknikleri ayrı çerçevelerde tarayın**; `__proto__` ile `constructor` arasındaki etkileşimi önlemek için.
|
||||
* **Teknikleri** kırılgan uygulamalar için bireysel olarak devre dışı bırakın.
|
||||
|
||||
Önceki görüntüde DOM kirlenmesi taramasının açılabileceği görülmektedir. Tamamlandığında, **DOM Invader DOM kirlenmesi açıklarını aramaya başlayacaktır**.
|
||||
---
|
||||
|
||||
### 5. DOM Çakışması
|
||||
|
||||
**Saldırı türleri ➜ DOM çakışması**'nı açın. DOM Invader, `id`/`name` nitelikleri global değişkenlerle veya form nesneleriyle çakışan dinamik olarak oluşturulan öğeleri izler (`<input name="location">` → `window.location`'ı geçersiz kılar). Kullanıcı kontrolündeki işaretlemenin değişken değiştirmesine yol açtığı her durumda bir giriş üretilir.
|
||||
|
||||
---
|
||||
|
||||
## 6. Ayarlar Genel Görünümü (2025)
|
||||
|
||||
DOM Invader artık **Ana / Saldırı Türleri / Çeşitli / Kanarya** kategorilerine ayrılmıştır.
|
||||
|
||||
1. **Ana**
|
||||
* **DOM Invader'ı Etkinleştir** – global anahtar.
|
||||
* **Postmessage interception** – mesaj kaydını aç/kapat; otomatik mutasyon için alt anahtarlar.
|
||||
* **Özel Kaynaklar/Hedefler** – *dişli simgesi* ➜ belirli hedefleri (örneğin, `eval`, `setAttribute`) etkinleştirip/devre dışı bırakın; bu hedefler uygulamayı bozabilir.
|
||||
|
||||
2. **Saldırı Türleri**
|
||||
* **Prototip kirlenmesi** (teknik başına ayarlarla).
|
||||
* **DOM çakışması**.
|
||||
|
||||
3. **Çeşitli**
|
||||
* **Yönlendirme önleme** – istemci tarafı yönlendirmelerini engelleyin, böylece hedef listesi kaybolmaz.
|
||||
* **Yönlendirmeden önce kesme noktası** – yönlendirmeden hemen önce JS'yi duraklatın, çağrı yığınını incelemek için.
|
||||
* **Tüm kaynaklara kanarya enjekte et** – kanaryayı her yere otomatik olarak enjekte edin; yapılandırılabilir kaynak/parametre izin listesi.
|
||||
|
||||
4. **Kanarya**
|
||||
* Görüntüle / rastgeleleştir / özel kanarya ayarla; panoya kopyala. Değişiklikler tarayıcıyı yeniden yüklemeyi gerektirir.
|
||||
|
||||
---
|
||||
|
||||
### 7. İpuçları ve İyi Uygulamalar
|
||||
|
||||
* **Ayrı bir kanarya kullanın** – `test` gibi yaygın dizelerden kaçının, aksi takdirde yanlış pozitifler oluşur.
|
||||
* **Ağır hedefleri** (`eval`, `innerHTML`) geçici olarak devre dışı bırakın, aksi takdirde sayfa işlevselliği bozulabilir.
|
||||
* **Burp Repeater & Proxy ile birleştirin** – savunmasız bir durumu üreten tarayıcı isteği/yanıtını çoğaltın ve son istismar URL'lerini oluşturun.
|
||||
* **Çerçeve kapsamını unutmayın** – kaynaklar/hedefler, tarama bağlamına göre görüntülenir; iframe'ler içindeki güvenlik açıkları manuel odaklanma gerektirebilir.
|
||||
* **Kanıtları dışa aktarın** – DOM Invader paneline sağ tıklayın ➜ *Ekran görüntüsünü kaydet* raporlara eklemek için.
|
||||
|
||||
---
|
||||
|
||||
## Referanslar
|
||||
|
||||
@ -85,5 +132,7 @@ Bir kaynak bulduğunuzda **bir alet için tarama yapabilirsiniz**:
|
||||
- [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}}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user