From d6196e82948c8e0472083555f7541f268e024a6c Mon Sep 17 00:00:00 2001 From: Translator Date: Tue, 5 Aug 2025 00:35:21 +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 0436d789a..c6bcc82fc 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'ı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
-Ş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. -
+> 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 -
+**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 (`` → `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}}